标签:常用 ESS xtend 信息 不包含 imp entity gets public
在java程序运行状态中,对于任意一个类,可以获取其所有的属性和方法,对于任意一个对象可以动态的调用其方法获取其属性。我们称这种特性为java反射。
应用:
在程序运行过程中,动态实现以下操作:
1)通过反射创建对象
a. Class.newInstance()
b. Construction.newInstance()
//通过反射创建对象 //1、通过newInstance创建对象,调用无参构造 Student student=studentClass.newInstance(); //2、通过构造器创建对象 Constructor<Student> constructor = studentClass.getDeclaredConstructor(); //设置是否允许访问,当private方法设置为true后,可以直接调用 constructor.setAccessible(true); //通过构造器调用对象 Student student1 = constructor.newInstance(); Student student2 = constructor.newInstance(); System.out.println(student1==student2);//false
2)通过反射获取对象的类型,属性,方法,构造
/** * 演示获取类的各种信息 */ public static void getClassInfo() throws NoSuchFieldException { Class<Student> studentClass = Student.class; //获取类上的注解 Annotation[] annotations=studentClass.getAnnotations(); //根据名称获取单个属性 Field name=studentClass.getField("name"); name.setAccessible(true); LogData annotation = name.getAnnotation(LogData.class); Field[] fields = studentClass.getFields();//获取类中的public属性 Field[] declaredFields = studentClass.getDeclaredFields();//获取类中定义的所有属性 //获取类的方法 Method[] methods = studentClass.getMethods();//获取类中的public的方法(包含父类方法) Method[] declaredMethods = studentClass.getDeclaredMethods();//获取类中定义的所有方法 //获取实现的接口 Class<?>[] interfaces = studentClass.getInterfaces(); //获取类的父类 Class<? super Student> superclass = studentClass.getSuperclass(); //包含包名的类名 String name1 = studentClass.getName(); //不包含包名的类名 String simpleName = studentClass.getSimpleName(); }
3)动态调用对象的方法,获取对象的属性
4)获取方法或属性上的注解信息
反射中涉及到的常用类
1) Class类:用来描述类信息的类
2) Method类:用来描述方法的类
3) Field类:用来描述属性的类
4) Construction类:用来描述构造方法
获取Class对象的方式
1) 类名.class
2) 对象.getClass();
3) Class.forName(“类的全路径”)
//获取class对象,一个类只有一个Class对象 Class<Student> studentClass=Student.class; Class<? extends Student> aClass=new Student().getClass(); Class<?> aClass1=Class.forName("entity.Student"); System.out.println(studentClass==aClass);//true System.out.println(studentClass==aClass1);//true
标签:常用 ESS xtend 信息 不包含 imp entity gets public
原文地址:https://www.cnblogs.com/xie-qi/p/13040802.html