您的位置:首页 > 其它

第十三章、反射、类加载与垃圾回收

2014-04-24 11:04 190 查看
java类文件通过类加载器加载到内存中。

类加载器包括

根类加载器:其是用本地代码实现,负责加载核心java类
扩展类加载器:负责加载扩展的java的类
系统类加载器:负责加载应用程序自身的类
还可以通过继承ClassLoader(抽象类)基类来创建自定义的类加载

类加载的三个阶段

加载、连接(验证、准备、解析)、初始化三个阶段,加载完后得到一个class对象

反射

java程序中的对象在运行时会出现两种类型:编译时类型和运行时类型,例如:
Employee s(编译时类型为Employee)=new Salary()(运行时类型为Salary);

在java程序中获得Class对象有三种方式
第一种:
反射是指java中,可以运行期载入、探知和使用编译器完全未知的类。通过使用java反射机制,
我们可以获得类的信息,并动态创建对象、设定成员变量的值、调用方法以及动态创建和访问数组
例如:
//class.forName(className)方式的反射
Scanner scan = new Scanner(System.in);
System.out.print("请输入:");
String className = scan.next();
Class c3 = Class.forName(className(全限定类名即包名.类名));

//得到构造方法及其参数,并且可以获取对应的参数类型
// Constructor[] cons = c3.getConstructors();
//
// for(int i=0; i
// System.out.println(cons[i].getGenericParameterTypes().length);
// if(cons[i].getGenericParameterTypes().length>0){
// System.out.println(cons[i].getGenericParameterTypes()[0]);;
// }
// }
第二种

在编译时知道类名的情况用:Class c=类名.class;//调用该类的class属性来获得该类的Class
对象

第三种

如果一个类的实例对象已经得到,则调用该对象的getClass()方法返回该对象所属类对应的的Class
对象,getClass()方法属于Object类的,所以所有对象都可以使用:
例如:Dong d=new Dong();
Class c=d(对象名).getClass();

垃圾回收

对象不可获得就会被垃圾回收,System.gc()或者Runtime.gc()方法是程序员与JVM的垃圾回收器
进行通讯的唯一机制,但是gc()方法并不能保证垃圾回收器立即执行垃圾回收,只能促使垃圾回收器
尽快回收无用的对象

对象的finalize()方法可以帮助我们完成一些释放对象所占用的资源等收尾工作。但是垃圾回收
器是否执行finalize()方法、以及什么时候执行该方法,都是不确定的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: