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