java 基础总结一
一、java虚拟机(JVM)
1、关于ClassLoader类
java程序不是一个可执行文件,它有许多独立的类文件组成,每一个类文件对应一个java类。ClassLoader包括bootstrap classloader(启动类加载器),它在JVM运行的时候加载java核心的API。这个API中就包括用户定义的ClassLoader,用户定义是指通过java程序实现的ClassLoader:一个是ExtClassLoader,一个是AppClassLoader。前一个的作用是用来加载lib/ext目录下的类,后一个的作用是用来加载用户机器上ClASSPATH设置目录中的class。
2、ClassLoader类中的一些方法
(1)、public Class<?> loadClass(String name boolean resolve)throws ClassNotFoundException
使用指定的二进制名称来加载类
(2)、
protected final Class<?> defineClass(String name, byte[] b, int off, int len) throws ClassFormatError
将一个 byte 数组转换为 class类的实例。必须分析 Class,然后才能使用它。
(3)、protected final Class<?> findSystemClass(String name)
throws ClassNotFoundException
该方法从本地文件系统装入文件。
(4)、
protected final void resolveClass(Class<?> c)
- 链接指定的类。类加载器可以使用此方法(其名称容易使人误解)来链接类。如果已经链接类 c,则仅返回此方法。否则,该类就按《 Java Language Specification》中 "Execution" 一章所描述的进行链接。
(5)、
protected final Class<?> findLoadedClass(String name)
(6)、
protected Class<?> findClass(String name) throws ClassNotFoundException
-
使用指定的
二进制名称查找类。此方法应该被类加载器的实现重写,该实现按照委托模型来加载类。在通过父类加载器检查所请求的类后,此方法将被
loadClass
方法调用。默认实现抛出一个 ClassNotFoundException。
(7)、
public static ClassLoader getSystemClassLoader()
-
返回委托的系统类加载器。该加载器是新的
ClassLoader 实例的默认委托父类加载器,通常是用来启动应用程序的类加载器。
在运行时启动序列的早期首先调用此方法,这时会创建系统类加载器并将其设置为调用 Thread 的上下文类加载器。
默认的系统类加载器是此类的一个与实现有关的实例。
(8)、Class.forName()方法forName方法是一个静态的方法,用来加载class。
2、java中assert在什么时候会被用到?
assert可以在预计正常情况下不会到达的任何位置上放置断言。
断言可以用于验证传递给私有方法的参数,不应该用于验证传递给公有方法的参数。
也可以在非公有方法中利用断言测试后置条件。
断言不应该以任何方式改变程序的状态。