黑马程序员--Java高新技术--JDK1.5新特性(下)

时间:2022-11-09 19:41:39
1.正则表达式


概念:符合某些规则的字符串.

a.字符:

X字符    X     例: A就表示A
\\反斜线字符
\r回车
\n换行

b.字符类

[abc] 表示a,或者b,或者c
[^abc] 表示除了abc以外的其他23个任意字符
[a-zA-Z] 表示52个英文字符的任何一个字符
[0-9] 表示0-9之间的任意一个字符

c.预定义字符类 

. 任何字符(与行结束符可能匹配也可能不匹配) 
\d  数字:[0-9] 
\D  非数字: [^0-9] 
\s  空白字符:[ \t\n\x0B\f\r] 
\S  非空白字符:[^\s] 
\w  单词字符:[a-zA-Z_0-9] 
\W  非单词字符:[^\w] 

d.边界匹配器

^   行的开头 
$   行的结尾 
\b   单词边界 
\B   非单词边界 
\A   输入的开头 
\G   上一个匹配的结尾 
\Z   输入的结尾,仅用于最后的结束符(如果有的话) 
\z   输入的结尾 


e. 数量词 

X?  X,一次或一次也没有 
X*  X,零次或多次 
X+  X,一次或多次 
X{n} X,恰好 n 次 
X{n,}  X,至少 n 次 
X{n,m}  X,至少 n 次,但是不超过 m 次 
f.组和捕获

按照()括起来的内容就可以看成是分组了
例:((A)(B(C))   4组

第一组 ((A)(B(C)) 1
第二组 (A) 2
第三组 (B(C) 3
第四组 (C) 4

右边引用左边组的内容,是通过编号,必须前面加一个转义符(\\).

(1)匹配功能(JDK 1.4以后出现)
public boolean matches(String regex)

(2)替换功能
public String replaceAll(regex,"")
(3)获取功能
使用的是正则对象Pattern和匹配器Matcher

代码示例:

[java] view plaincopyprint?
  1. <span style="white-space:pre">            </span>//典型使用顺序:  
  2.               
  3.             Pattern p = Pattern.compile("a*b"); //正则表达式  
  4.             Matcher m = P.matcher("aaaaab");//被判断的字符串  
  5.             boolean b = m.matches();//调用的是判断功能  
  6.               
  7.             等价于  
  8.               
  9.             String st = "aaaaab";  
  10.             String regex = "a*b";  
  11.             boolean flag = st.matches(regex);  
  12.             System.out.println(flag);  // true  

boolean find();  查找
String group();  获取

2.反射


概念:
JAVA你反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所以属性和方法;
对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态
调用对象的方法的功能称为Java语言的反射机制.

要想解剖一个类,必须先要获取到该类的字节码文件对象,而解剖使用的就是Class类中的
方法,所以先要获取到每一个字节码文件对应的Class类型的对象.

获取Class类的对象
方式1:使用类的getClass()方法
方式2:数据类型的.Class静态属性
方式3:使用的是Class类按的forName() 静态方法  类的全路径.

使用哪一种呢

自己写代码完后测试用第二种,开发用第三种.
因为第三种可以使用配置文件配置类的路径(扩展性好,更灵活).

步骤:

1.获取字节码文件对象
2.获取构造器对象,并创建实例
3.获取成员变量或者成员方法对象
4.通过成员变量或者成员方法对象的方法接收2步骤创建的实例

代码示例:

创建类的对象

[java] view plaincopyprint?
  1. String  name="com.dsa.类名";  
  2.                   
  3.                 //寻找该名称类文件,并加载进内存,并非产生class对象  
  4.                   
  5.                 Class clazz=Class.forName(name);  
  6.                   
  7.                 //产生该类的对象  
  8.                   
  9.                 Object obj=clazz.newInstance();  
  10.                   
  11.                 //得到某一个指定构造方法  
  12.                   
  13.                 Constructor  constructor= Class.forName("").getConstructor(String.class);  
  14.                   
  15.                 //创建实例对象  
  16.                   
  17.                 Object obj=constructor.newInstance("abc");  
  18.   
  19.                 //Constructor 构造方法:代表某个类中的一个构造方法。  
  20.   
  21.                 //得到某个类中所有的构造方法  
  22.                 Constructor  constructors[]= Class.forName("").getConstructors();;   
  23.   
  24.                 //得到某一个构造方法  
  25.                 Constructor  constructor= Class.forName("").getConstructor(StringBuffer.class);  
  26.   
  27.   
  28.                 Constructor  constructor= Class.getConstructor(StringBuffer.class);  
  29.                   
  30.                 //创建实例对象  
  31.                 String str=(String) constructor.newInstance(new StringBUffer("abc"));  
  32.                   
  33.                 //调用获得的方法时要用到上面相同类型的实例对象  
  34.                   
  35.                 //Class.newInstance()方法:  
  36.                   
  37.                 String obj=(String)Class.forName("java.lang.String").newInstance();  
  38.               
  39.                 //先得到默认的构造方法,然后用该构造方法创建实例对象。  
  40.   
  41.         //成员变量 Filed类 代表某个类中的一个成员变量  
  42.           
  43.                 //对一个类进行反射。  
  44.                 ReflectPoint  pt1=new ReflectPoint(3,5);  
  45.                 Filed filedy=pt1.getclsss().getFiled("Y");//只代表哪个对象  
  46.                 Filed filedy=pt1.getclsss().getDeclaredField("x")//获取对象不管是私有还是被保护的  
  47.                 filedy.setAccessible(true);//设置可以访问,暴力反射  
  48.                 filedy.get(pt1)//取出Y的值  
  49.   
  50.   
  51.                 //将字段中的b全变成a  
  52.                   
  53.                 Field[] fields=obj.getClass().getFields();//获取全部对象   
  54.                 for(Field field :fields){  
  55.                 if(field.getType()==String.class){//如果是字符串  
  56.                 String oldValue = (String)field.get(obj);//获取字符串内容  
  57.                 String newValue = oldValue.replace('b','a');//将字符串内容替换  
  58.                 field.set(obj,newValue);//将新值赋给对象             
  59.   
  60.         //Method类 成员方法的反射。  
  61.             
  62.                 //获取成员方法  
  63.                  
  64.                 //反射形式:  
  65.                 Method  methodCharAt = String.class.getMethod("charAt"--方法名,int.class--这是参数类型,如果是空参函数则是 null);  
  66.                 Object obj=clazz.newInstance();  
  67.   
  68.                 methodCharAt.invoke(str1,1);  
  69.             
  70.   
  71.         //数组的反射  
  72.           
  73.                 Class clazz=obj.getClass();  
  74.                   
  75.                 if(clazz.isArray()){  
  76.                   
  77.                     int len=array.getLength(obj);  
  78.                       
  79.                     for(int i=0;i<len;I==){  
  80.                       
  81.                     sopArray.get(obj,i))  
  82.                     }     
  83.   
  84.   
  85.                 }  
  86.