package reflect;publicclassRedlectDemo2{publicstaticvoidmain(String[] args){//new关键字
Person p =newPerson();
System.out.println(p);//输出:Person [name=张三, age=22]//利用反射实例化//1、加载类的类对象
Class cls= Class.forName("refiect.Person");//2、利用Class方法newInstance实例化
Object o = cls.newInstance();//必须有无参构造
System.out.println(o);//输出:Person [name=张三, age=22]}}
通过指定的构造器实例化对象
package reflect;import java.lang.reflect.Constructor;publicclassReflectDemo3{publicstaticvoidmain(String[] args)throws Exception{
Person p =newPerson();
System.out.println(p);
Person p1 =newPerson("李四",22);
System.out.println(p1);
Class<?> cls = Class.forName("reflect.Person");//获取构造器
Constructor<?> c = cls.getConstructor();//利用该构造器实例化对象
Object o = c.newInstance();
System.out.println(o);//利用Person(String,int)
Constructor<?> c2 = cls.getConstructor(String.class,int.class);//实例化
Object o 2= c2.newInstance("小明",50);
System.out.println(o2);}}
使用反射机制调用方法
package reflect;import java.lang.reflect.Method;import java.util.Scanner;publicclassReflectDemo4{publicstaticvoidmain(String[] args)throws Exception{
Person p =newPerson();
p.sayHello();
Scanner scan =newScanner(System.in);
System.out.println("请输入类名:");
String className = scan.nextLine();
System.out.println("请输入方法名:");
String methodName = scan.nextLine();//实例化
Class c= Class.forName(className);
m.invoke(o);//o.sayHello();}}
利用反射调用私有方法
package reflect;import java.lang.reflect.Method;publicclassReflectDemo5{publicstaticvoidmain(String[] args){
Person p =newPerson();//p.dosome; //编译不通过
Class cls= Class.forName("reflect.Person");
Object o = cls.newInstance();//获取Person中的私有方法dosome
Method m = cls.getDeclaredMethod("dosome");
m.setAccessible(true);//打破封装
m.invoke(o);}}