Java反射机制
2021/6/30 12:20:53
本文主要是介绍Java反射机制,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
反射
- 1.反射机制
- 2.Java程序在计算机的三个阶段
- 3.反射完成的事和反射相关的主要类
- 4.反射的优缺点以及时间优化
- 5.Class类分析
1.反射机制
2.Java程序在计算机的三个阶段
创建对象实例会导致类加载,通过类加载器对字节码文件进行加载,类加载会先在方法去生成类字节码的二进制数据/元数据,然后在堆内生成Class类对象,成员变量、构造器、成员方法、注解、泛型等等都用相应的对象数组进行存储。
3.反射完成的事和反射相关的主要类
Cat.java
package com.reflect_; /** * Created on 2021/6/30. * * @author Ryan_小王 */ public class Cat { private String name = "招财猫"; public int age = 10; public Cat() {} public Cat(String name) { this.name = name; } public void hi() { System.out.println("hi" + name); } }
ReflectQuestion.java
package com.reflect_; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Properties; /** * Created on 2021/6/30. * * @author Ryan_小王 */ public class ReflectQuestion { public static void main(String[] args) throws IOException, ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException, NoSuchFieldException { //传统方法 Cat cat = new Cat(); cat.hi(); //1.使用Properties类,可以读写配置文件 Properties properties = new Properties(); properties.load(new FileInputStream("src\\re.properties")); String classfullpath = properties.get("classfullpath").toString(); String methodName = properties.getProperty("method").toString(); System.out.println("classfullpath=" + classfullpath); System.out.println("method=" + methodName); //2.使用反射机制解决 //(1)加载类,返回Class类型的对象cls Class cls = Class.forName(classfullpath); //(2)通过cls得到你加载的类的对象实例 Object o = cls.newInstance(); System.out.println("o的运行类型=" + o.getClass()); //(3)通过cls得到你加载的类的methodName "hi"的方法对象 // 即:在反射中,可以把方法视为对象(万物皆对象) Method method1 = cls.getMethod(methodName); //(4)通过method1调用方法:即通过方法对象来实现调用方法 System.out.println("=================================="); method1.invoke(o); //传统方法 对象.方法(),反射机制 方法.invoke(对象) //(5)Field:类的成员变量,getField不能得到私有属性 Field nameField = cls.getField("age"); System.out.println(nameField.get(o)); //(6)Constructor: Constructor constructor = cls.getConstructor(); System.out.println(constructor); Constructor constructor2 = cls.getConstructor(String.class); System.out.println(constructor2); //Cat(String name) } }
4.反射的优缺点以及时间优化
5.Class类分析
这篇关于Java反射机制的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-05小米13T Pro系统合集:性能与摄影的极致融合,值得你升级的系统ROM
- 2024-10-01基于Python+Vue开发的医院门诊预约挂号系统
- 2024-10-01基于Python+Vue开发的旅游景区管理系统
- 2024-10-01RestfulAPI入门指南:打造简单易懂的API接口
- 2024-10-01初学者指南:了解和使用Server Action
- 2024-10-01Server Component入门指南:搭建与配置详解
- 2024-10-01React 中使用 useRequest 实现数据请求
- 2024-10-01使用 golang 将ETH账户的资产平均分散到其他账户
- 2024-10-01JWT用户校验课程:从入门到实践
- 2024-10-01Server Component课程入门指南