ToB企服应用市场:ToB评测及商务社交产业平台

标题: java反射大白话 [打印本页]

作者: 农民    时间: 2022-8-9 14:45
标题: java反射大白话
转自:
http://www.java265.com/JavaCourse/202206/3796.html
下文通过笔者的这篇文章,将带你快速入门java反射,如下所示
java反射的概念
  1. JAVA反射机制:
  2.     程序在运行时,可对任意一个实体类,
  3.          对任意一个对象
  4.          都可以调用其中的方法及属性
  5. 我们将这种运行时,获取其属性的功能称之为"java反射"
复制代码
java反射的功效
  1.   
  2. 1、运行时生成对象实例
  3. 2、运行期间调用方法
  4. 3、运行时更改属性
复制代码
Java反射的使用场景
  1. 1、在运行时判断任意一个对象所属的类
  2. 2、在运行时构造任意一个类的对象
  3. 3、在运行时判断任意一个类所具有的方法和属性
  4. 4、在运行时调用任意一个对象的方法
  5. 5、生成动态代理
复制代码
Java反射涉及类

类名用途
Class类代表类的实体,在运行的Java应用程序中表示类和接口
Field类代表类的成员变量(成员变量也称为类的属性)
Method类代表类的方法
Constructor类代表类的构造方法
例:
  1. User类
  2. public class User {
  3.     private String name;
  4.     private int age;
  5.     private User(String name, int age) {
  6.         this.name = name;
  7.         this.age = age;
  8.     }
  9.     public User(){
  10.         throw new IllegalAccessError("禁止无参构造方法");
  11.     }
  12.     private String getName() {
  13.         return name == null ? "" : name;
  14.     }
  15.     private void setName(String name) {
  16.         this.name = name;
  17.     }
  18.     public int getAge() {
  19.         return age;
  20.     }
  21.     public void setAge(int age) {
  22.         this.age = age;
  23.     }
  24.     @Override
  25.     public String toString() {
  26.         return "User{" +
  27.                 "name='" + name + '\'' +
  28.                 ", age=" + age +
  29.                 '}';
  30.     }
  31. }
  32. import java.lang.reflect.Constructor;
  33. import java.lang.reflect.Field;
  34. import java.lang.reflect.InvocationTargetException;
  35. import java.lang.reflect.Method;
  36. public class TestClass{
  37.     public static void main(String[] args){
  38.         Class<?> clz = null;
  39.         try {
  40.             clz = Class.forName("User");//全路径名
  41.         } catch (ClassNotFoundException e) {
  42.             e.printStackTrace();
  43.         }
  44.         // 找到带有这个参数的构造方法
  45.         Constructor constructor = null;
  46.         try {
  47.             constructor = clz.getDeclaredConstructor(String.class, int.class);
  48.         } catch (NoSuchMethodException e) {
  49.             e.printStackTrace();
  50.         }
  51.         constructor.setAccessible(true);
  52.           // 初始化对象
  53.         Object user = null;
  54.         try {
  55.             user = constructor.newInstance("猫猫",20);
  56.         } catch (InstantiationException | IllegalAccessException | InvocationTargetException e) {
  57.             e.printStackTrace();
  58.         }
  59.         System.out.println("--------------"+constructor.toString());
  60.        // 找到该私有方法
  61.         Method getName = null;
  62.         try {
  63.             getName = clz.getDeclaredMethod("getName");
  64.         } catch (NoSuchMethodException e) {
  65.             e.printStackTrace();
  66.         }
  67.         getName.setAccessible(true);
  68.         String name = null;
  69.         try {
  70.             name = (String) getName.invoke(user);
  71.         } catch (IllegalAccessException e) {
  72.             e.printStackTrace();
  73.         } catch (InvocationTargetException e) {
  74.             e.printStackTrace();
  75.         }
  76.         System.out.println("--------------"+name);
  77.         // 找到私有属性
  78.         Field age = null;
  79.         try {
  80.             age = clz.getDeclaredField("age");
  81.         } catch (NoSuchFieldException e) {
  82.             e.printStackTrace();
  83.         }
  84.         age.setAccessible(true);
  85.         try {
  86.             age.setInt(user16, 20);   // 修改属性
  87.         } catch (IllegalAccessException e) {
  88.             e.printStackTrace();
  89.         }
  90.         try {
  91.             System.out.println("--------------"+age.get(user));
  92.         } catch (IllegalAccessException e) {
  93.             e.printStackTrace();
  94.         }
  95.     }
  96. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4