Java 反射
什么是反射?
Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法功能称为Java语言的反射机制
反射的使用
在Java中,Class类与java.lang.reflect类库一起对反射技术进行全力的支持。在反射包中,我们常用的类主要有Constructor类表示的是Class对象所表示的类的构造方法,利用它可以在运行时动态创建对象;Field表示Class对象的成员变量,通过它可以在运行时动态修改成员变量的属性值(包含private)、Method表示Class对象的成员方法,通过它可以动态调用对象的方法(包含private)
-
Class类对象的获取
/** * @author zhing * @create 2022/6/4 10:34 */ public class Test { public static void main(String[] args) throws ClassNotFoundException { //获取Class对象的三种方式 System.out.println("根据类名获取:"+User.class); System.out.println("根据对象获取:"+(new User()).getClass()); System.out.println("根据全限定类名获取:"+Class.forName("oop.reflect.User")); //常用的方达 System.out.println("获取全限定类名:"+User.class.getName()); System.out.println("获取类名:"+User.class.getSimpleName()); System.out.println("实例化:"+User.class.getSimpleName()); } }
-
Constructor类及其用法
-
Field类及其用法
-
Method类及其用法
getName、getCanonocalName与getSimpleName的区别?
- getSimpleName:只获取类名
- getName:类的全限定名,jvm中Class的表示,可以用于动态加载Class对象,例如Class.forName。
中Class的表示,可以用于动态加载Class对象,例如Class.forName。 - getCanonocalName:主要输出(toString )或log打印,大多数情况下和getName一样,但是在内部类、数组等类型的便是形式就不同了