Java 反射的详细说明
2022/7/5 1:20:50
本文主要是介绍Java 反射的详细说明,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
转自:
http://www.java265.com/JavaCourse/202206/3796.html
下文通过笔者的这篇文章,将带你快速入门java反射,如下所示
java反射的概念
JAVA反射机制: 程序在运行时,可对任意一个实体类, 对任意一个对象 都可以调用其中的方法及属性 我们将这种运行时,获取其属性的功能称之为"java反射"
java反射的功效
1、运行时生成对象实例 2、运行期间调用方法 3、运行时更改属性
Java反射的使用场景
1、在运行时判断任意一个对象所属的类 2、在运行时构造任意一个类的对象 3、在运行时判断任意一个类所具有的方法和属性 4、在运行时调用任意一个对象的方法 5、生成动态代理
Java反射涉及类
类名 | 用途 |
Class类 | 代表类的实体,在运行的Java应用程序中表示类和接口 |
Field类 | 代表类的成员变量(成员变量也称为类的属性) |
Method类 | 代表类的方法 |
Constructor类 | 代表类的构造方法 |
例:
User类 public class User { private String name; private int age; private User(String name, int age) { this.name = name; this.age = age; } public User(){ throw new IllegalAccessError("禁止无参构造方法"); } private String getName() { return name == null ? "" : name; } private void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", age=" + age + '}'; } } import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class TestClass{ public static void main(String[] args){ Class<?> clz = null; try { clz = Class.forName("User");//全路径名 } catch (ClassNotFoundException e) { e.printStackTrace(); } // 找到带有这个参数的构造方法 Constructor constructor = null; try { constructor = clz.getDeclaredConstructor(String.class, int.class); } catch (NoSuchMethodException e) { e.printStackTrace(); } constructor.setAccessible(true); // 初始化对象 Object user = null; try { user = constructor.newInstance("猫猫",20); } catch (InstantiationException | IllegalAccessException | InvocationTargetException e) { e.printStackTrace(); } System.out.println("--------------"+constructor.toString()); // 找到该私有方法 Method getName = null; try { getName = clz.getDeclaredMethod("getName"); } catch (NoSuchMethodException e) { e.printStackTrace(); } getName.setAccessible(true); String name = null; try { name = (String) getName.invoke(user); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } System.out.println("--------------"+name); // 找到私有属性 Field age = null; try { age = clz.getDeclaredField("age"); } catch (NoSuchFieldException e) { e.printStackTrace(); } age.setAccessible(true); try { age.setInt(user16, 20); // 修改属性 } catch (IllegalAccessException e) { e.printStackTrace(); } try { System.out.println("--------------"+age.get(user)); } catch (IllegalAccessException e) { e.printStackTrace(); } } }
这篇关于Java 反射的详细说明的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?
- 2024-05-09企业src漏洞挖掘-有意思的命令执行