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

来源:互联网 发布:淘宝退货率太高 编辑:程序博客网 时间:2024/05/29 15:25
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

代码示例:

<span style="white-space:pre"></span>//典型使用顺序:Pattern p = Pattern.compile("a*b"); //正则表达式Matcher m = P.matcher("aaaaab");//被判断的字符串boolean b = m.matches();//调用的是判断功能等价于String st = "aaaaab";String regex = "a*b";boolean flag = st.matches(regex);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步骤创建的实例

代码示例:

创建类的对象

String  name="com.dsa.类名";//寻找该名称类文件,并加载进内存,并非产生class对象Class clazz=Class.forName(name);//产生该类的对象Object obj=clazz.newInstance();//得到某一个指定构造方法Constructor  constructor= Class.forName("").getConstructor(String.class);//创建实例对象Object obj=constructor.newInstance("abc");//Constructor 构造方法:代表某个类中的一个构造方法。//得到某个类中所有的构造方法Constructor  constructors[]= Class.forName("").getConstructors();; //得到某一个构造方法Constructor  constructor= Class.forName("").getConstructor(StringBuffer.class);Constructor  constructor= Class.getConstructor(StringBuffer.class);//创建实例对象String str=(String) constructor.newInstance(new StringBUffer("abc"));//调用获得的方法时要用到上面相同类型的实例对象//Class.newInstance()方法:String obj=(String)Class.forName("java.lang.String").newInstance();//先得到默认的构造方法,然后用该构造方法创建实例对象。//成员变量 Filed类 代表某个类中的一个成员变量//对一个类进行反射。ReflectPoint  pt1=new ReflectPoint(3,5);Filed filedy=pt1.getclsss().getFiled("Y");//只代表哪个对象Filed filedy=pt1.getclsss().getDeclaredField("x")//获取对象不管是私有还是被保护的filedy.setAccessible(true);//设置可以访问,暴力反射filedy.get(pt1)//取出Y的值//将字段中的b全变成aField[] fields=obj.getClass().getFields();//获取全部对象 for(Field field :fields){if(field.getType()==String.class){//如果是字符串String oldValue = (String)field.get(obj);//获取字符串内容String newValue = oldValue.replace('b','a');//将字符串内容替换field.set(obj,newValue);//将新值赋给对象           //Method类 成员方法的反射。  //获取成员方法   //反射形式:Method  methodCharAt = String.class.getMethod("charAt"--方法名,int.class--这是参数类型,如果是空参函数则是 null);Object obj=clazz.newInstance();methodCharAt.invoke(str1,1);  //数组的反射Class clazz=obj.getClass();if(clazz.isArray()){int len=array.getLength(obj);for(int i=0;i<len;I==){sopArray.get(obj,i))}   }

0 0