java基础小结一

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可以在预计正常情况下不会到达的任何位置上放置断言。

     断言可以用于验证传递给私有方法的参数,不应该用于验证传递给公有方法的参数。

     也可以在非公有方法中利用断言测试后置条件。

     断言不应该以任何方式改变程序的状态。