Java反射机制是通过访问已经装载到JVM中的Java对象的描述,实现访问、检查和修改Java对象本身信息。
Java反射机制需要使用Class类实现。1)首先通过Class类获得需要操作对象的字节码文件,然后通过获得的Class的对象创建对象,最后使用对象进行调用。简单实例如下:
//被操作的类
public class Stu{
private static int age;
private String name;
public Stu(){} //无参构造函数
public Stu(String name, int age){//有参构造函数
this.name = name;
this.age = age;
}
private void method1(){//私有的成员方法
System.out.println(name+":"+age);
}
}
Class类反射创建Stu的对象,通过对象访问成员:
/***
* 1、创建Class对象,有三种方式。
* (1)类.class 如: Stu.class
* (2)Class.forName(类的完整路劲) 如:Class.forName("com.fs.demo.Stu")
* (3)对象.getclass() 如:new Stu().getclass()
* 2、使用Class对象
* (1)获取构造器,然后创建对象
* (2)使用Class对象获取成员方法,成员属性等
*/
public class Test {
public static void main(String[] args) throws Exception {
Test t = new Test();
t.getFieldFromStu();
t.getMethodFromStu();
}
/**
*获取Class对象,packageName-类的完整路径
**/
public Class getClass(String packageName){
//获得Class对象
Class c = Class.forName(packageName);
return c;
}
/**
*获取对象
**/
public Stu getStu() throws Exception {
//获得构造器
Constructor constructor = getClass("com.fs.demo.Stu").getDeclaredConstructor();
//设置权限为可访问
constructor.setAccessible(true);
//通过构造器创建对象
Stu stu = (Stu) constructor.newInstance();
return stu;
}
/**
*获取成员变量 name
**/
public void getFieldFromStu() {
Field mame_field = getClass("com.fs.demo.Stu").getDeclaredField("name");
mame_field.setAccessible(true);
// 取出对象stu中name_filed指向成员变量name的值
String name = (String) mame_field.get(stu);
System.out.println(name);
}
//获取成员方法 method1
public void getMethodFromStu() {
Method method1 = getClass("com.fs.demo.Stu").getDeclaredMethod("method1");
method1.setAccessible(true);
// 取出对象stu中method1指向成员方法method1
method1.invoke(getStu());
}
}
新手学习中,仅供大家学习交流,不足之处请谅解!
本文深入探讨Java反射机制的概念、实现方式及应用实例,包括Class类的使用、构造器获取、成员变量与方法访问等核心内容。
985

被折叠的 条评论
为什么被折叠?



