第十三章、反射、类加载与垃圾回收
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()方法、以及什么时候执行该方法,都是不确定的
类加载器包括
根类加载器:其是用本地代码实现,负责加载核心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()方法、以及什么时候执行该方法,都是不确定的
相关文章推荐
- 第十三章反射(reflect)、类加载与垃圾回收总结
- 《反射、类加载与垃圾回收》
- 反射 类加载与垃圾回收
- 反射、类加载与垃圾回收
- 反射,类加载与垃圾回收
- Java反射、类加载与垃圾回收
- java基础19(Javaoo14)—— 反射,类加载与垃圾回收
- java基础19(Javaoo14)——反射、类加载与垃圾回收
- 反射、加载与垃圾回收
- 第十三章 类加载和反射
- Java 类加载机制 ClassLoader Class.forName 内存管理 垃圾回收GC
- JAVA 放射、类的加载机制与垃圾回收
- Java 类加载机制 ClassLoader Class.forName 内存管理 垃圾回收GC
- 初识JAVA(【面向对象】:pub/fri/pro/pri、封装/继承/多态、接口/抽象类、静态方法和抽象方法;泛型、垃圾回收机制、反射和RTTI)
- 反射类加载与垃圾回收
- .net重点知识复习(内存管理、垃圾回收、反射)
- 反射类加载和垃圾回收
- 类加载与垃圾回收
- 【Java面试整理之JVM】深入理解JVM结构、类加载机制、垃圾回收GC原理、JVM内存分配策略、JVM内存泄露和溢出
- 反射·类加载与垃圾回收