目录:
什么是反射:反射是一种技术,可以将.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(不常用):通过类加载器得到
- 先得到类加载器:当前类.class
- 通过类加载器获取反射类:调用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 后查看