回忆之反射笔记

获取class对象的三种方式

//Object类的getClass()方法
class c1  = 对象名.getClass();
//类的静态属性
Class c2 = 类名.class;
//class类的静态方法
Class c3 = Class.forName("类的正名");
正名:报名+类名

Student student = new Student();
		Class class1 = student.getClass();
		Class class2 = Student.class;
		Class class3 = Class.forName("reflect.Student");
		System.out.println(class1 == class2 );
		System.out.println(class1 == class3);

反射方式获取构造方法

1、获取对应类的字节码文件对象

2、根据字节码文件对象获取构造器对象

3、通过newInstance方法创建对象

Constructor 构造器对象,属于java.base模块,java.lang.reflect包

getConstructor(class...parameterTypes) 只会返回公共构造方法
getDeclaredConstructor(Class...parameterTypes) 可获取私有构造方法
getConstructors()   返回此类(不含私有)构造方法的数组

常用方法
String getName() 返回构造方法名称
T newInstance(Object...initargs) 使用此构造方法和指定参数创建并初始化对象


Class class1  =Class.forName("reflect.Student");
		Constructor conl  = class1.getConstructor();
		System.out.println(conl);
		
		Constructor con2 = class1.getConstructor(String.class);
		System.out.println(con2.getName());
		Student student =(Student) con2.newInstance("尼古拉斯赵四");
		
		System.out.println(student);
		
		Constructor con3 = class1.getDeclaredConstructor(int.class);
		System.out.println(con3);
		
		System.out.println("============================");
		Constructor[] cons = class1.getConstructors();
		for (Constructor constructor : cons) {
			System.out.println(constructor);
		}

 

反射方法获取成员方法并使用

Method对象  方法对象,java.lang.reflect
通过Class 对象获取方法
getMethod(String name,Class...parameterTypes) 返回一个Method对象,仅公共成员方法
                 name:方法名称  parameterTypes:方法的参数列表
getDeclaredMethod(String,Class...)
                 返回一个Method对象,可获取私有成员方法
Method的常用方法
String getName() 返回方法名称
Object invoke(Object obj,Object...args) 在指定对象上调用此方法,参数为args


 

你可能感兴趣的:(Java)