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

------<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);//去其长度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值