反射及获取Class反射类的四种方式

发布于:2022-12-21 ⋅ 阅读:(169) ⋅ 点赞:(0)

目录:

什么是反射:反射是一种技术,可以将.java转化成一种逻辑的二进制字节码文件和一个二进制的Class类(可以操作的一种数据结构),将一个对象中所有的属性和方法抽象成对象,并可以通过调用特定的api区去调用方法或者获取想要的属性。

方式1:Class.froName(文件路径)

方式2:类名.class

方式三:实例对象.getClass

方式4(不常用):通过类加载器得到

常用得方法:


什么是反射:反射是一种技术,可以将.java转化成一种逻辑的二进制字节码文件和一个二进制的Class类(可以操作的一种数据结构),将一个对象中所有的属性和方法抽象成对象,并可以通过调用特定的api去调用方法或者获取想要的属性。


方式1:Class.froName(文件路径)

//方式2: 通过Class.forName("类全路径")
Class<?> userClass = Class.forName("com.User");

这类的全路径是从src目录下开始的

方式2:类名.class

//方式1:通过类.class方式获取

 Class<User> userClass = User.class;

方式三:实例对象.getClass

//方式三:通过实例对象.getClass方法获取
User user1 = new User();
Class<? extends User> userClass = user1.getClass();

方式4(不常用):通过类加载器得到

  1. 先得到类加载器:当前类.class
  2. 通过类加载器获取反射类:调用loadClass("类全路径");
//方式4:通过通过类加载器得到
ClassLoader classLoader = 反射类的四种获取方式.class.getClassLoader();
Class cla4 = classLoader.loadClass("com.solve.java.Person");

注意:这种方式用得很很少,基本只有底层加载类时会用,我们一般不用,只做了解。


常用得方法:

//生成无参得实例对象
Object User = userClass.newInstance();
//得到所有得字段
Field[] declaredFields = userClass.getDeclaredFields();
Method[] declaredMethods = userClass.getDeclaredMethods();
for (Method method : declaredMethods) {
//获取对象得名字,所有的属性和方法都可以调用
    System.out.println(method.getName());
}

//得到所有得方法

Method[] declaredMethods = userClass.getDeclaredMethods();
//获取所有得构造器方法
Constructor[] constructors = userClass.getConstructors();
for (Constructor constructor : constructors) {
    System.out.println(constructor);
}

方法很多,具体可以看api。

本文含有隐藏内容,请 开通VIP 后查看