跟王老师学反射:反射概述
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了跟王老师学反射:反射概述相关的知识,希望对你有一定的参考价值。
跟王老师学反射(一) java反射概述主讲教师:王少华 QQ群号:483773664
学习目标:
理解Java反射机制
一、什么是Java反射
理解Java反射机制
现实生活,我们会看到这样的现象,在很多影视城,会看到很多山寨版的古代的建筑,比如故宫,但是由于年代久远,故宫的建筑图纸,丢失了(我们假设故宫的图纸丢失了),这样我们就必须依据现在的故宫实体建筑,画出它的图纸,然后依据现画好来的图纸,来建造山寨版的故宫。这样一个由实物得到图纸的过程,我们也可以称之为“反射过程”
Reflection(反射)允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。反射相关的API有:
java.lang.Class:代表一个类
java.lang.reflect.Method:代表类的方法
java.lang.reflect.Field:代表类的成员变量
java.lang.reflect.Constructor:代表类的构造方法
。。。
其实,在我们平时的开放过程中,已经应该到了Java反射机制,比如,在MyEclipse中,我们创建一个对象,然后通过点,编译工具就会将这个对象的全部属性显示出来
这就是利用了Java反射机制。
二、、小案例:见识反射的魅力1、普通类:Floor
1234567891011121314151617181920212223 public
class
Floor {
private
String color;
//大楼颜色
int
height;
//大楼高度
/**
* 构造方法
*/
public
Floor() {
System.out.println(
"我是Floor的构造方法"
);
}
/**
* 获得color
*/
public
void
getColor(){
System.out.println(
this
.color);
}
/**
* 大楼的功能
* @param str
*/
public
void
fun(String str){
System.out.println(str);
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | public class Floor { private String color; //大楼颜色 int height; //大楼高度 /** * 构造方法 */ public Floor() { System.out.println( "我是Floor的构造方法" ); } /** * 获得color */ public void getColor(){ System.out.println( this .color); } /** * 大楼的功能 * @param str */ public void fun(String str){ System.out.println(str); } } |
2、测试类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | public static void reflectMethod(Floor floor) throws InstantiationException, IllegalAccessException, NoSuchFieldException, SecurityException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException{ //获得图纸:getClass Class<Floor> floorClass = (Class<Floor>) floor.getClass(); //造楼:newInstance Floor newFloor = floorClass.newInstance(); //属性赋值: 获得属性 Field field = floorClass.getDeclaredField( "color" ); //属性赋值:因为color的属性是private,所以得设置其可访问性 field.setAccessible( true );
//查看是否设置成功 newFloor.getColor(); //获得方法:通过方法名和方法参数类型来区分 Method method = floorClass.getDeclaredMethod( "fun" , String. class ); //执行方法: method.invoke(newFloor, "教学楼" ); } |
以上是关于跟王老师学反射:反射概述的主要内容,如果未能解决你的问题,请参考以下文章