java基础总结一
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)如果 Java 虚拟机已将此加载器记录为具有给定二进制名称的某个类的启动加载器,则返回该二进制名称的类。否则,返回 null。
(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可以在预计正常情况下不会到达的任何位置上放置断言。
???? 断言可以用于验证传递给私有方法的参数,不应该用于验证传递给公有方法的参数。
???? 也可以在非公有方法中利用断言测试后置条件。
?????断言不应该以任何方式改变程序的状态。
?