欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java反射机制,以及简单例子

程序员文章站 2022-07-08 12:38:28
...

理解java反射机制

首先:了解什么是Java反射

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

理解:主要是利用Java反射机制对未知或者任意一个对象所属的类,进行查看里面的所有成员变量和方法
换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods。

可以通过反射来获得类的对象
反射还可以获得类的属性方法构造器
因为反射式在运行阶段 去反向解析得到以上所有
下面进入代码操作:

首先获取class对象的几种方式
    主要有如下三种。
//通过myBatis框架的xml映射文件
1.getMapper(Student.class);

//JDBC
2.Class.forName("Student");
//通过基本的new 对象来调用
3.new Student().getClass();

然后通过Java反射机制获取class里面的数据

直接来包名.类名
Class c=Student.class;
//一,通过Method对象 查询所有的方法(Method)
Method [] ms=c.getMethods();
for (Method method : ms) {
System.out.println(method);
}
通过上述代码输出class中的所有方法。


//二,通过Field对象查询所有Student类里面所有实体对象(Field)

Field [] fs=c.getDeclaredFields();

for (Field field : fs) {
System.out.println(field);
}
上述代码输出显示的是Student类里面的所有实体对象
列如: private int num;

public String name;

protected String address;

String aaa;
(类似于这种 没有封装的setter对象)

输出结果显示:
private int com.qm.test.Student.num
public java.lang.String com.qm.test.Student.name
protected java.lang.String com.qm.test.Student.address
java.lang.String com.qm.test.Student.aaa


下面的话还有一种是查看Student里面的构造器,构造参数
具体测试代码如下:(其重要注意一点就是访问修饰符类型要是public,如果是private是找不到的)

Constructor[] sc=c.getConstructors();

for (Constructor constructor : sc) {
System.out.println(constructor);
//直接查Student类里面构造参数
}

Student实体类里面代码:
private Student(){}

public Student(int a,int b){}
输出结果显示:
public com.qm.test.Student(int,int)

结果:可以看出输出的结果是只有public类型的private没有显示

通过上一种,延申,通过判断来找寻指定类型的构造函数

上代码:Constructor[] sc=c.getConstructors();
for (Constructor constructor : sc) {
if (constructor.toString().contains("public")) {
//contains("public") 起到一个判断作用
Student sst=(Student) constructor.newInstance(1,1);
System.out.println(sst);
}
//直接指定public 以及构造器参数


总结:以上就是鄙人对Java反射机制的一定理解,虽然说不是很深入,但是基本理解够用
总的来说就是通过特定方法查看实体对象里面的属性构造函数,可以通过反射来获得类的对象,反射还可以获得类的属性方法构造器,因为反射式在运行阶段 去反向解析得到以上所有