反射机制
反射的定义:
反射是指在程序运行期间,能够观察和修改类或者类的对象的属性和行为的特性
项目开发中常见的使用反射的场景
使用JDBC连接数据库
Servlet在Web容器中的加载和运行
反射机制的作用:
Java反射机制提供了以下的功能
1、在运行时获取类的修饰符,包名,类名,实现的接口,继承的父类
2、在运行时获取类的所有属性名,修饰符,属性类型
3、在运行时获取所有方法,方法的返回值类型,方法名,方法参数数量,方法参数类型
4、在运行时调用加载类的方法
Java反射API常用的类:
java.lang.Class //反射的核心类,通过Class类可以获取类的属性、方法等信息
java.lang.reflect.Method //类的方法
java.lang.Constructor //类的构造方法
java.lang.Field //类的属性
java.lang.Modifier
访问类包含的构造方法的常用方法
Constructor getConstructor(Class[] params)
例如:Constructor co=cla.getConstructor(lString.class,List.clss);
Constructor[] getConstructors() //返回所有public构造方法
Constructor getDeclaredConstructor(Class[] params) //返回Class对象所包含的类的指定构造方法
Constructor[] getDeclaredConstructors() //返回Class对象所包含的类的全部构造方法
访问类包含的方法的常用方法
Method getMethod(String name,Class[] params) //name参数用于指定方法名称
例如:Method met=cla.getMethod("setName", String.class);
Method[] getMethods() //返回所有public方法
Method getDeclaredMethod(String name,Class[] params) //返回Class对象所包含的类的指定方法
Method[] getDeclaredMethods() //返回Class对象所包含的类的全部方法
访问类包含的属性的常用方法
Field getField(String name) //name参数用于指定属性名称
例如:Field field=cla.getField("age");
Field[] getFields() //返回所有public属性
Field getDeclaredField(String name) //返回Class对象所包含的类的指定属性
例如:Field nameField=cla.getDeclaredField("name");
Field[] getDeclaredFields() //返回Class对象所包含的类的全部属性
反射实战:
使用Java反射获取类的信息
使用Java反射获取类的构造函数的参数列表,并通过构造函数实例化类
使用Java反射获取类的所有方法的信息,并调用类的setter方法进行属性的赋值
使用Java反射获取类的所有属性的名称和类型,并为其中一个属性赋值
反射的应用:
1、获取类的信息
2、创建对象
两种方式:
a)使用Class对象的newInstance()方法创建对象
b)使用Constructor对象创建对象
3、访问类的属性
4、访问类的方法
5、使用Array类动态创建和访问数组
获取类对象的三种方式
1、类型.class
Class<Student> stu=Student.class;
2、class.forName("类型的全路径名");
Class ss = Class.forName("cn.kgc.kb09.Student");
3、对象.getClass()
TestStudent s=new TestStudent();
Class sc=s.getClass();
通过类对象获取构造方法
方法1
Constructor<Student> con=stu.getConstructor();
方法2
Constructor<Student> con=stu.getDeclaredConstructor();
con.setAccessible(true);
单例模式
单例模式:一个系统中,只允许存在该类的一个对象
public class Teacher {
private static Teacher t=null;//自己本类的私有对象
private Teacher(){
//不允许随意创建对象
}
/* //懒汉式
public synchronized static Teacher getInstance(){
if (t==null){
t=new Teacher();
}
return t;
}*/
/* //饿汉式
static {
t=new Teacher();
}
public static Teacher getInstance(){
return t;
}*/
}