《Java 反射全攻略1》
反射就是剖析类对象,动态获取类信息 类内容 类组成的能力
获取类信息的三种方式
class.forname()
对象.getClass()
类名.class
以下是代码实现
package com.qcby.c_reflection;public class DemoTest {public static void main(String[] args) throws ClassNotFoundException {//1 对象.getClass()Person person = new Person();Class<? extends Person> aClass = person.getClass();System.out.println("aClass = " + aClass);System.out.println("===============");//2 类。classClass<Person> personClass = Person.class;System.out.println("personClass = " + personClass);//3Class.forNameClass<?> aClass1 = Class.forName("com.qcby.c_reflection.Person");System.out.println("aClass1 = " + aClass1);}
}
反射构造方法&暴力反射
反射所有的public构造方法
代码实现
package com.qcby.c_reflection;import java.lang.reflect.Constructor;public class DemoTest2 {public static void main(String[] args) {Class<Person> personClass = Person.class;//获取所有public的构造Constructor<?>[] constructors = personClass.getConstructors();for (Constructor<?> constructor : constructors) {System.out.println(constructor);}}
}
获取空参的构造方法
代码实现
package com.qcby.c_reflection;import java.lang.reflect.Constructor;public class DemoTest3 {public static void main(String[] args) throws Exception{Class<Person> personClass = Person.class;Constructor<Person> constructor = personClass.getConstructor();System.out.println("constructor = " + constructor);/*** 好比是 Person = new Perosn()*/Person person = constructor.newInstance();System.out.println("person = " + person);}
}
获取所有构造函数,包括private
代码实现
package com.qcby.c_reflection;import java.lang.reflect.Constructor;public class DemoTest4 {public static void main(String[] args) {Class<Person> personClass = Person.class;Constructor<?>[] declaredConstructors = personClass.getDeclaredConstructors();for (Constructor<?> declaredConstructor : declaredConstructors) {System.out.println("declaredConstructors = " + declaredConstructor);}}
}
获取private以及更改修改权限
constructor.setAccessible(true); 为true 表示可以更改private
package com.qcby.c_reflection;import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;public class DemoTest5 {public static void main(String[] args) throws Exception {Class<Person> personClass = Person.class;Constructor<Person> constructor = personClass.getDeclaredConstructor(String.class);constructor.setAccessible(true);Person person = constructor.newInstance("山上");System.out.println(person);}
}