java反射机制:是指在运行时,动态获取类或者类的属性和方法,调用调用对象方法的功能。
java反射的动态性质: 1.运行时生成对象实例
2.运行时嗲用方法
3.运行时更改属性
java反射原理:在运行时加载编译期间,在不知道名字的类,探知类的结构信息,创建类的实例,调用创建类的属性和方法。具体是指,应用能够自描述和自控制的机制和能力
java反射功能:1.在运行时判断任意一个对象所属的类
2.在运行时构造任意一个类
3.在运行时判断任意一个类所具有的方法和属性
4.在运行时调用任意一个类
java反射常用类:
1.java.lang.Class 反射的核心类,用于获取类的属性,方法等内容
2.java.lang.reflet.Field 类的属性,可以获取和设置类中的属性
3.java.lang.reflect.Method 类的方法,可以获取类的方法或者执行
4.java.lang.reflect.Constructor 类的构造方法
java反射具体功能实现:
1.获取类对象
1.Class<?> cla=Class.forName("java.lang.String“); ///必须是完整的类名
2.Class<?> cla1=new String().getClass();
3.Class<?> cla2=String.class;
2.根据类对象来实例化
1.Person person=cla.newsInstance();//必须存在无参的构造函数
2.通过获取构造函数来实例化
1.获取所有的public构造函数:Constructor[] cons=cla.getConstructors() ;
Constructor con=cla.getConstructor(String.class);
2.实例化:Person person=cons[1].newInstance();
Person person1=cons[0].newInstance("男");
3.获取方法:
1.获取所有的public方法:Method [] methods=cla.getMethods();
2.获取所有的方法与方法的反问级别无关: Method [] methods=cla.getDeclaredMethods();
3.获取单独方法:Method method=cla.getMethod("gethaha");//无参
调用:method.invoke();
Method method1=demo1.getMethod("sayHello", String.class,Integer.class);
method1.invoke(demo1.newInstance(), "张三",14);//有参数
4.获取所有的属性:
1.获取所有的本类的public属性:Field [] fields=cla.getFields();
2.获取所有的本类的属性,与访问级别无关 Field [] fields=cla.getDeclaredFields();
3.获取指定的属性: Field field=cla.getDeclaredField("sex");
field.setAccessible(true);
field.set(obj,"男");
System.out.println(field.get(obj));
5.获取类的接口
1.Class<?>[] inters=cla.getInterfances();
6.获取类的父类:
1.Class <?> cla3=cla.getSuperClass();