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

阅读更多

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

你可能感兴趣的:(java,java反射,反射机制)