简单理解java中的反射机制

xiaoxiao2025-11-27  8

反射机制:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

1.首先我们要了解java中的Class类: 其实每当我们编写并编译一个类时,JVM就会创建这个类对应的Class类对象,记录着该类的相关类型信息;并且这个Class对象会保存在同名.class文件里(编译后的字节码文件保存的就是Class对象); 比如Shapes类,它的Class对象保存在Shapes.class里 Shapes类的所有对象,共用一个它的Class对象

2.获取对应类的Class方式 (1)Class c=对象.getClass()

A a=new A();Class c=a.getClass();

(2)Class c=类名.Class()

Class c=A.Class();

(3)Class c=Class.forName(“类名全路径”)

3.Class类中的常见用方法 一.与构造方法有关的:Constructor类 (1)static Class forName(String className) (2)newInstance()

演示用法:实例化的几种方式 (1)默认构造方法

Class c= Class.forName("com.pojo.Student"); Student student=c.newInstance(); 设置成员值

(2)获取带String 参数 public 的构造方法

Class c= Class.forName("com.pojo.Student"); Constructor cs=c.getConstructor(String.Class) Student student=cs.newInstance("wanlong");

(3)获取带int参数,String参数,private的构造方法

Class c= Class.forName("com.pojo.Student"); Constructor cs=c.getDeclaredConstructor(int.Class,String.Class) //由于是private,必须设置可以访问 cs.setAccessible(true); Student student=cs.newInstance("wanlong");

其他就不演示了:

二:与成员有关的:Field类

演示:

Class c=Class.forName("com.pojo.Student"); //获取成员变量为name且public Field Fname=c.getField("name"); //获得所有成员变量且public (包含父类) Field [] fields=c.getField(); 其他就不演示了;同理 给字段赋值 Student student=c.newInstance(); Fname.set(student,"wanlong");

三:与方法有关的类:Method

演示:

Class c=Class.forName("com.pojo.Student"); //获得方法名为add ,参数为int,String类型 public的方法 Method addMethod=c.getMethod("add",int.Class,String.Class); 其他同理:不演示 调用方法 Student student=c.newInstance(); addMethod.invote(student,"1","wanlong");
转载请注明原文地址: https://www.6miu.com/read-5040077.html

最新回复(0)