您的位置:首页 > 其它

第十三章反射(reflect)、类加载与垃圾回收总结

2016-05-08 18:55 295 查看


重点掌握:1.通过反射产生对象 2.通过反射探究一个类,探究它的构造,属性和方法 3.在运行期探究类的任意构造方法属性。体会它的动态性。


1.类加载:由类加载器完成,把这个类的信息放入Class文件当中。


加载机制:加载---连接(验证--准备--解析)---初始化


2.反射


在运行期探究和使用编译器未知的类,包括类,属性,方法等。


反射使用步骤:第一步:获取Class对象,第二步通过Class对象探究一个类的信息。第三步,操作从Class对象中的探究出的信息。


第一步:获取Class对象 又分三种获取


1,根据实例对象获取Class对象。


实现方法,调用实例对象的getClass();该方法来自Object类。动态性:无

Student  stu = new Student();
Class stuClass0 = stu.getClass();
Class  strClass0 = “hello”。getClass;
int[] intArray = new int [6];
Class arrayClass0 = intArray .getClass();


2,根据类型名获取Class对象)


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


使用范围:所有的类型(基本,引用,甚至包括void) 动态性:无

Class  stuClass1 = Student.class;
Class strClass1 = String .class;
Class  arrayClass1 = int[].class;
Class  intClass = int .class;//获取int的Class对象该方法在JDK1.5以后才有
Class  integerClass = integer.class//获取包装类Intrger的Class对象
Class  intClass1 = Integer.TYPE;//获取int的Class对象该方法在JDK1.5之前
Class voidClass = void .class;
System 。out.print(stuClass0==stuClass1);//不管用那种方式获取,一个类型只有一个Class对象


3,根据类型的字符串名称获取Class对象。)(用的最多的一种)**********


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


适用范围:只有类类型(包括接口) 动态性:有

Class stuClass2 = null;
StuClass2 = Class.forNmae ("zuoye.shuangseqiu")
系统会打印出try catch。


英语单词:属性(Field) ---构造(Constructor)---行为方法(Method)---被申明的(Declared)***************


获取Class对象中的信息


根据反射探究到的信息进行操作2


根据Constructor对象,产生实例对象。


实现一:调用Constructor对象的newInstance方法。

Con


实现二:直接调用Class对象的NewInstance方法,前提是只能调用到公共无参构造****************

Student stu0 = (Student)stuClass2.newInstance();


根据Field对象,对属性进行取值和赋值 ---实现:调用Field的get ,set 方法
4000
************

Field thePublicField = stuClass2.getField("score");
thePublicField.set(stu,100);//赋值(注意第一个参数,代表给那个Student对象的这个属性取值)
System.out.print(thePublicField.get(stu));//取值(参数代表从那个Student对象的这个属性赋值))


根据Method对象,对方法进行调用--实现:调用Method对象的invoke方法*****************

Method thepublicMethod = stuClass2.getMethod("test1");
thePublicMethod.invoke(stu);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: