JAVA中用反射来实例化对象和获取构造方法 这里的实例化对象呢,是用Class类中的newInstance方法来实例化对象, 这个种实例化对象的方法比new这种方法有点复杂,那为什么 还使用这种方法呢,其实是为了尽量减少耦合。而减少耦合的最好方法是使用接口,但是,用了接口,也不能不使用new关键字,所以导致耦合的最关键原因是new。
另外就是如何获取这个字节码。有三种方法
- |–通过这个Object类中的getClass方法来获取。
- |–通过这个类名.class,不过这种方式很少用,一般在框架开发中出现
- |–通过Class类中的forName方法来获取。
代码如下,同时还获取了这个Person中的构造方法;
获取构造方法包括这个所有构造方法和指定参数的构造方法。
import java.lang.reflect.*;
public class Demo{
public static void main(String[] args)throws Exception{
Class<?> cls = Class.forName("Person");
Object obj = cls.newInstance();
Person person = (Person)obj;
System.out.println(person);
//获取构造函数
Constructor cons[] = cls.getConstructors();
for(int i=0;i<cons.length;i++){
System.out.println(cons[i]);
}
//获取指定参数的构造方法
Class<?> con[] = new Class[]{String.class};
Constructor constructor = cls.getConstructor(con);
System.out.println(constructor);
}
}
class Person{
private String name = "sunofbeaches";
private int age = 18;
public Person(){}
public Person(String name){
this.name = name;
}
public Person(int age){
this.age = age;
}
public Person(String name,int age){
this.age = age;
this.name = name;
}
public String toString(){
return this.name+"...."+this.age;
}
}
运行结果: