------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
反射机制
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法 的功 能称为java语言的反射机制。
反射:在程序运行时期,是通过class文件对象,去使用构造方法,成员变量,成员方法。
获取class文件对象
1:Object类的getClass()方法
2:数据类型的静态的class属性
3:Class类forName()静态方法
一般开发使用第三种。
反射的应用
1:通过反射获取构造方法并使用
//获取字节码文件对象
Classc = Class.forName("cn.itcast.Person");
//获取构造器对象
Constructorcon = c.getDeclearedConstrator(String.class,int.class);
//通过构造器对象获取Person对象
Objectobj = con.newInstance("小明",29);
2:通过反射获取成员变量并使用
//获取字节码文件对象
Classc = Class.forName("cn.itcast.Person");
//获取构造器对象
Constructorcon = c.getDeclearedConstrator(String.class,int.class);
//通过构造器对象获取Person对象
Objectobj = con.newInstance("小明",29);
//获取成员变量
Fieldfield = c.getDeclaredField("name");
field.setAccessiable(true);
field.set(obj,"小明");
3:通过反射获取成员方法并使用
//获取字节码文件对象
Classc = Class.forName("cn.itcast.Person");
//获取构造器对象
Constructorcon = c.getDeclearedConstrator(String.class,int.class);
//通过构造器对象获取Person对象
Objectobj = con.newInstance("小明",29);
//获取所有公共方法对象,包括从父类继承的
//(获取本类所有方法的时候,不包括从父类继承的)
Method[]methods = c.getDeclaredMethods();
for(Methodm : methods){
m.setAccessiable(true);
m.invoke(obj,null);
举例:反射越过泛型检查
正则表达式
常用功能:
1:判断功能
String-- matches
2:切割功能
String-- split
3:替换功能
String-- replaceAll
4:获取功能
Pattern
Matcher
compile()
find()
group()
常用的正则规则
(1):特殊字符
\\:反斜线
\r:回车
\n:换行
(2):字符类
[abc]:a,b或者c的任意一个。
[^abc]:除了a,b,c以外的字符。
[a-zA-Z]:包括了26个英文字母。
[0-9]:包括了0-9这个10个数字字符。
(3):预定义字符类
. 任意字符
\d 数字[0-9]
\D 非数字[^0-9]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
(4):边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界
(5):Greedy 数量词
x? 0次或1次
x* 0次或多次
x+ 1次或多次
x{n} 恰好n次
x{n,} 至少n次
x{m,n} 至少m次,但不能超过n次
应用:用于校验邮箱 电话号码等
单例设计模式
定义:就是指类在内存中只能有一个对象存在
举例:Windows的打印服务,网站的计数器
应用:线程池,数据库连接池
设计一个懒汉式单例设计模式:
设计一个饿汉式单例设计模式: