一.通过Class类实例化对象
1.获取Class对象
| 方法 | 特点 |
|---|---|
| 类名.getClass() | 以此方法获得字节码文件对象需要有明确的类名,比较麻烦 |
| .class | 任何继承了Object的类或数据类型都可以通过".class"来直接获取到Class对象 |
| Class.forName(String path) | path为类的全类名,通过path获取到Class对象,可扩展性强,相比之下更为方便 |
2.获取Class类有关构造函数
| 方法 | 特点 |
|---|---|
| getConstructors() | 方法返回当前和超类的所有公共构造函数,此方法返回的是一个数组 |
| getDeclaredConstructors() | 方法返回当前类的所有声明的构造函数,返回的同上 |
| getConstructor(Object.class) | 方法返回当前类指定的公共(有参数/无参数)的构造函数 |
| getDeclaredConstructor(Object.class) | 方法返回当前类指定任何一个(有参数/无参数)构造函数 |
3.Class对象实列化实现
newInstance(参数列表) 方法用来实例化Class对象
public class Animal {
private String itName;
private double height;
private String remark;
public String getItName() {
return itName;
}
public void setItName(String itName) {
this.itName = itName;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public void show(String location){
System.out.println("名字:"+itName+"\t\t"+"重量:"+height+"\t\t"+"坐落于"+location+"\t\t"+remark);
}
public Animal(String itName, double height, String remark) {
this.itName = itName;
this.height = height;
this.remark = remark;
}
public Animal(String itName, double height) {
this.itName = itName;
this.height = height;
}
private void showEmpty(){
System.out.println("维护中,无数据显示");
}
@Override
public String toString() {
return "Animal{" +
"itName='" + itName + ''' +
", height=" + height +
", remark='" + remark + ''' +
'}';
}
public Animal() {
}
}
public class ReflectDemo2 {
public static void main(String[] args) throws Exception {
//1.获取Class类对象
Class clazz = Animal.class;
//2.获取不同类型的构造器
Constructor cons = clazz.getConstructor(String.class, double.class);
Constructor cons2 = clazz.getConstructor(String.class, double.class, String.class);
Constructor cons3 = clazz.getConstructor();
//3.newInstance创建实例对象,用获取到的构造器实列化对象
Object house = cons.newInstance("house", 200.50);
Object lion = cons2.newInstance("lion", 150.39, "it\tis\tstrong");
Object ami = cons3.newInstance();
//强转Animal类型
Animal animal3=(Animal) ami;
Animal animal1=(Animal)house;
Animal animal2=(Animal)lion;
System.out.println(animal1);
System.out.println(animal2);
3.输出结果为