您的位置:首页 > 职场人生

黑马程序员--Java--正则和反射

2015-07-29 13:28 477 查看
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

正则

1.1 正则(regex)概述
正则就是运用相应的规则匹配整个字符串,他是运用一些特定的符号来体现;因此在学习正则时需要记忆一些特殊符号。

特点:虽然简化了代码,但阅读性差。

1.2 正则中一些特殊符号的意义:
1、字符串类:

[abc]:表示对应的字符是a、b或c

[a-z]:表示对应的字符是小写字母

[^a-z]:表示对应的字符不是小写字母

[a-zA-Z]:表示对应的字符是字母

[a-d[m-p]]:表示对应的字符是a-d或者m-p

2、预定义字符类

.:任意字符

\d:数字

\D:非数字

\s:空白字符

\S:非空白字符

\w:单词字符

\W:非单词字符

3、数量词

x?:一次或0次

x+:一次或多次

x*:零次或多次

x{n}:恰好n次

x{n,}:至少n次

x{n,m}:至少n次最多m次

ps:

1、当用到特殊字符时,需要转义,此时需要加上两个“\”,如“\d”代表数字,在编程中需要输入“\\d”第一个\是把后面的\d转义的。

2、当用到的为“.”时,需要用两个“\\”,即“\\.”。“\\”也写为“\\\\”。
1.3 正则的运用
1、匹配(判断)str.matches(regex)

例:判断某个数的不是QQ号码

String qq = "1234567890";

String regex = "[1-9][0-9]{4,14}";//表示第一位是1-9的数,后面有4-14位0-9的数。

boolean flag = qq.matches(regex);

2、切割 str.split(regex)

例:用叠词切

String regex = "(.)\\1":用()的为组,按左括号排序,再用\n调用。

3、替换 str.replaceAll(regex,new)

$n:可以找到在前面正则中的组。

例: str.replaceAll((\d)\\1+,$1);

4、获取

获取较为复杂,其步骤为:

1.将正则表达式封装成对象:regex

2.将此对象与字符串向关联。Pattern

3.获取正则的引擎. Matcher

4.通过引擎对符合字符串的规则子串进行操作。find--group

例:

1、Pattern p = Pattern.compile(regex);

2、Matcher m = p.matcher(str)

3、if(m.find()){

    sop(m.group);

   }

反射

2.1 反射的概述
1、Java反射机制是在运行状态中,对任意一个类(class文件),都可以知道这个类的所有属性和方法;对于任意一个对象,都能够调用让的任意一个方法和属性;这种动态的获取信息及调用对象方法的功能称为java语言的反射机制。

2、一个类一旦被类加载器加载进类存中,就占用了一片存储空间,这个空间的内存就是类的字节码。如果想要对指定名称的字节码文件进行加载并获取其中的内容并调用,那么就要用到反射技术。

3、这个字节码对象就用class类来表示。

4、如何获得一个类的字节码对象:

   Class s1 = Person.class;(类名.class)

   Class s2 = p.getClass();(对象.getClass())

   Class s3 = Class.forName(Person);(Class中的静态方法forName("类的具体名称"))

   ps:比较字节码一般用"=="比较。

5、用字节码创建对象:

   Object obj = s1.newInstance();

   Construction c = getConstruction(String.class,int.class);

   obj = c.newInstance("小明",33);
2.2 获取及调用类中的成员
1、构造函数:Constructor类

 class.getConstructor():获取所有的构造方法。

 class.getConstructor(参数类型的字节码):获得指定的构造函数。

例:获取String类中构造函数String(StringBuffer sf)

Constructor c = String.class.getConstructor(StringBuffer.class);//获取构造函数

String s = (String)c.newInstance(new StringBuffer("abcd"));//用其构造方法创建对象,因为创建的对象为Object类,所有必须向下转型。

注意:运行过程中有:NoSuchMethodException和InstantionException异常
2、成员变量:Field类
 Field f = class.getField("参数名称"):获取指定参数的Filed类

 int x = f.get(对象名称):获得对象中成员变量的值

例:已存在Person类中有name成员变量,获取Person p = Person("zhangsan")的name那么值;

 Field f = Person.class.getField("name");

 String name = f.get(p);//运行结果 name = "zhangsan"

当需要取得私有成员变量:

 Field f = p.getClass().getDeclaredField("age");

 f.setAccessible(true);

 int age = f.get(p);

3、成员方法:Method类

 class.getMethod("方法名称",参数字节码);

 m.invoke(对象,参数);

4、数组:Arrays

 int[] a1 = new int[3];

 int[] a2 = new int[4];

 a1.getClass() == a2.getClass();

 class c = obj.getClass();

 c.isArray();//判断obj是不是数组

 int len = Array.getlength(obj);//去其长度
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: