Java反射
2022-07-15 19:41:15 0 举报
AI智能生成
登录查看完整内容
为你推荐
查看更多
Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。
作者其他创作
大纲/内容
1.反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法。
2.反射可以在一个类运行的时候获取类的信息的机制,可以获取在编译期不可能获得的类的信息。
3.对于任意一个对象,都能调用它的任意一个方法和属性。
4.因为类的信息是保存在Class对象中的,而这个Class对象是在程序运行时被类加载器(ClassLoader)动态加载的。
5.当类加载器装载运行了类后,动态获取Class对象的信息以及动态操作Class对象的属性和方法的功能称为Java语音的反射机制。
概念
1.反编译:.class —> .java。
2.通过反射机制访问Java对象中的属性、方法、构造方法等。
作用
.java -> .Class编译
.Class -> .java反编译
反射
类名.Class
对象 getClass()
Class. forname(\"全限定名\")
类.getClassLoader.LoadClass(\"全限定名\")
子类.Class. getSuperClass()
包装类.Class
获取类对象
getName() 全限定名
getSimpleName()类名
getPackage()包名
根据类得到名(全限定名)
getField(\"属性名\")获取公共属性
getName()属性名
getModifiers()修饰符
getTypet数据类型
set(对象名属性值) = 对象名set.属性名 属性赋值
setAccessible(true)设置私有属性能访问
getDeclareFieldso所有属性
Filen(属性)
incoke(对象名,参数列表 = 对象名.方法名 执行方法
getParameterTypes()得到放回参数列表
getDeclareMethods()得到类的所有方法
getReturnType()得到返回值方法的数据类型
Method(方法)
Class对象.getConstructor()得到构造方法
Class对象.getConstructorst() 得到所有的构造方法
构造方法
知识点
1.Class c1 = Class.forName(\"com.mxm.Reflect\");
2.Class c2 = Reflect.class;
3.Class c3 = new Reflect().getClass();
1.获取Class对象的方法
Class c4 = Class。forName(\"com.mxm.Reflect\");Object o = c4.newInstance();
2.无参数创建对象
3.有参数创建对象
1.Class —— 类的创建;
2.Constructor —— 反射类中构造方法;
Field field = class.getDeclaredField(\"name\
1.获取属性
1.Field类描述的是属性对象,其中可以获取到很多属性信息,包括名字、属性类型、属性的注解。
2.Field类描述
1.在安全管理器中会使用checkPermission方法来检查权限 ,而setAccessible(true)并不是将方法的权限改为public,而是取消Java的权限控制检查,所以即使是public方法,其accessible属性默认也是false。
3.安全管理
Field field = class.getDeclaredField(\"name\");String prive = Modeifier.toString(field.getModofoers());
4.修改属性中的修饰符
3.Field —— 反射方法;
Method m = class.getDeclaredMethod(\"setName\
4.Method —— 反射方法;
5.Modifier —— 访问修饰符的信息。
涉及到的类
当Class.foeName()中路径获取不到对应的Class时,会抛出异常。
1.获取不到Class
1.确实不存在这个Field,抛出异常。
2.修饰符导致的权限问题,抛出相同异常。
2.获取不到Field
1.getField只能获取对象和父类的public修饰的属性。
2.getDeclaredField获取对象中的各种修饰符属性,但是不能获取父类的任何属性。
3.先使用getSupperclass方法可以获取父类的suppereClass对象,再使用getDeclaredField方法获取父类的全部属性
3.获取父类修饰符
4.获取不到父类的非public的方法
5.获取不到父类的构造方法
使用受到限制,对应的Class中必须存在一个无参数的构造方法,并且必须要有访问权限。
1.Class.newInstance()
适应任何类型的构造方法,无论是否有参数都可以调用,只需要setAccessible()方法控制访问权限。
2.Contructor.newInstance()
6.newInstance方法创建类对象的两种方法
public class TestMethod{ static void test(){}}Class cla = Class.foeName(\"TestMethod\");Method m = cla.getDeclaredMethod(\"test\");m.invoke(null);
7.反射静态方法
1.Java的泛型擦除概念,泛型T在编译时会自动向上转型为Object
public class Test<T>{ public void test(T t){}} Class cla = Test.class;Method m = cla.getDeclaredMethod(\"test\
8.反射泛型参数方法
9.反射框架:jOOR
反射进阶
Java反射
0 条评论
回复 删除
下一页