您的位置:首页 > 其它

反射

2016-05-03 22:47 330 查看

reflect 反射

动态性,描述语言的动态,java是有一定动态性的语言。

体现在可以在运行期探究和使用编译期未知的东西,包括类,构造,属性,方法等等。

类加载:由类加载期完成,类的class文件被读入内存后,就会创建一个class对象,类的所有信息就会放入class对象中,同一个类只被载入一次。

连接:把类的二进制数据合并到JRE中。

初始化:JVM负责对类进行初始化,也就是对静态属性进行初始化。

一,反射产生对象

1.获取class对象

1.1根据实例对象获取class对象,

实现方法:调用实例对象的getClass(),该方法来自object类

动态性:无

适用范围:只能适用引用数据类型

1.2根据类型名获取Class对象

实现方法:调用类型名.class

适用范围:基本,引用,甚至包括void的

动态性:无

1.3根据类型的字符串名称获取对象(唯一一个可以配置)

实现方法:调用class.forName(“类的限定名”)

适用范围:只有类类型,包括接口

动态性:有

2.通过class对象探究这个类的信息

2-1探究类的声明部分的信息

String packageName = stuClass.getPackage().getName();//得到全类名

System.out.println(“package”+packageName+”;”);

String className = stuClass.simpleName();//得到简单类名

int classMod = stuclass.getModifiers();//得到修饰符,返回的数字

2-2探究属性

Field[] allpublicFields = stuClass.getFields();//得到所有公共属性

Field[] allFields = stuClass.get.DeclaredFields();//得到所有被申明的属性

2-3探究构造

Constructor[] allPublicCons = stuClass.getConstructor();//得到所有的公共构造

Constructor[] allCons = stuClass.getDeclaredConstructor();

(class…)当数组用来做参数的时候,三个点的申明方式是语法糖,外部的调用者无须创建数组实参,内部的实现者,任然按数组的方式使用形参

2-4探究方法

Method[] allPublicMethods = stuClass2.getMethods();//所有公开的方法

Method[] allMethods = stuClass2.getDeclaredMethods();//所有被申明的方法

try {

Method thePublicMethod = stuClass2.getMethod(“thst2”, int.class);//指定的公共的方法

Method theMethod = stuClass2.getDeclaredMethod(“test3”, int.class,String.class);

} catch (NoSuchMethodException e) {

e.printStackTrace();

} catch (SecurityException e) {

e.printStackTrace();

}

3.操作从class中探究出的信息

二,通过反射探究类(属性,方法等)

三,在运行期探究使用任意方法,任意属性,任意构造,从而体会反射的动态性

<
4000
link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/production/markdown_views-ea0013b516.css" />
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: