黑马程序员--Java--正则和反射
2015-07-29 13:28
477 查看
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
正则就是运用相应的规则匹配整个字符串,他是运用一些特定的符号来体现;因此在学习正则时需要记忆一些特殊符号。
特点:虽然简化了代码,但阅读性差。
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);
}
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);//去其长度
正则
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);//去其长度
相关文章推荐
- 2016校招内推 -- 腾讯SNG前端 -- 面试经历
- 黑马程序员--Java--集合
- 黑马程序员--java--异常
- 黑马程序员--java--多态和内部类
- 黑马程序员--java--继承和接口
- 黑马程序员--java--两种设计模式
- 百度面试题 号码找到符合条件
- 2016校招内推 -- 阿里巴巴前端 -- 四面面试经历
- 程序员笔试面试--数据库知识
- 面试的时候的一些记录 - 不断更新
- 从武侠小说到程序员面试
- 阿里面试题---------关于html标签中物理标记和逻辑标记区别
- 程序员是如何一步步走向平庸的?
- 程序员面试宝典中的一个错误 char * b=(char *)&a
- 黑马程序员--IO流中的File类和Properties类、其他流
- 剑指offer面试题12——打印1到最大的n位数
- 程序员接私单需要注意的几大问题
- 从初级程序员到CEO的蜕变
- 115个Java面试题和答案——终极列表(下)
- 3015年度重大考古发现:中国古代村落“中关村”发现保存完好程序员墓