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;
	}
}
运行结果:






























