java 面向对象编程-- 第十三章 反射、类加载与垃圾回收

时间:2023-11-23 10:38:08

1、狭义JavaBean规范

  • Javabean必须包含一个无参数的public构造方法,方便通过反射的方式产生对象。
  • 属性必须都是私有的。
  • Javabean必须包含符合命名规范的get和set方法,以便访问Javabean的属性。
  • Javabean应该是可序列化(serializable)的。

2、反射

在编译时,并不清楚应该加载哪个类。类的加载是在运行期间进行的。通过反射,可以对类进行加载、探知、自审。

可以通过对象.getClass()或者通过类名.class或者通过Class.forName(“包名.类名”)得到类模板。

Field、、getDeclaredFields、、getName可以获得当前类的属性名。

Method、、getMethods、、getName可以获得当前类的方法名。

Object x=n.newInstance();   调用类的无参构造方法,产生该类的对象。

3、Java类文件通过类加载器加载到内存中。类加载器包括根类加载器、扩展类加载器、系统类加载器。此外,Java API中还提供了一个ClassLoader抽象类,开发者还可以通过继承ClassLoader基类来创建自定义的类加载器。

4、根类加载器是用本地代码实现的,它负责加载核心Java类;扩展类加载器负责加载扩展的Java类,包括所有javax.*开头的类和存放在JRE的扩展目录下中(JAVA_HOME/jre/lib/ext)JAR的类包;系统类加载器负责加载应用程序自身的类。根类加载器同时负责加载扩展类加载器和系统类加载器。

5、类加载的过程包括加载、连接(验证、准备、解析)、初始化三个阶段。

6、类加载完成后,会得到一个对应的Class对象。

7、通过将引用赋值为null,或者将引用赋值为其它对象,或使用脱离范围,可以让对象成为不可获得。当一个对象成为不可获得时,就可能被垃圾回收器回收。

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

9、对象的finalize()方法可以帮助我们完成一些释放对象锁占用的资源等收尾工作。但是垃圾回收器是否会执行finalize()方法、以及何时执行该方法,都是不确定的。