Java反射常用API

337 阅读1分钟

一.通过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.输出结果为

image.png