一、ClassLoader
1.ClassLoaader基本概念
由于java是由许多独立的类文件组成,每一个文件对应一个java类,并且这些类是根据程序需要逐渐载入内存。ClassLoader是JVM实现的一部分,它包括bootstrap classloader(启动类加载器),ClassLoader在JVM运行的时候加载Java核心的API,以满足java成句最基本需求,包括用户自定义的ClassLoader(ExtClassloader用来加载java的扩展api,即/lib/ext中的类。AppClassLoader用来加载yonghu8机器上CLASSPATH设置目录中的class的)
2.ClassLoader加载流程
程序运行-->JVM启动-->运行bootstrap classloader-->该ClassLoader加载java核心API(ExtClassLoader和AppClassLoader也在此时被加载)-->调用ExtClassLoader加载扩展API-->AppclassLoader加载CLASSPATH目录下定义的class。
3.ClassLoader一些重要方法
forName和ClassLoader中的loadClass方法的目的一样,都是用了加载class 的,区别在于loadClass方法是protected,而用户使用的方法是一个参数与,一个参数的loadclass方法实际上就是调用了两个参数,第二个参数默认为false。因此,loadClass不会初始化该类,而使用Class类的forName加载的时候就会将Class进行解释和初始化。
二、字符编码
在java中,字符只以一种形式存在,那就是Unicode(不选择任何特定的编码,直接使用它们在字符集中的编号,这是统一的唯一方法)。这里的“在java中“暴露JVM、内存、代码里声明的每一个char、String类型的变量。
java的I/O系统中能够制定转换编码的地方,也就在字符与字节转换的地方,那就是InputStreamReader和OutputStreamWriter。这两个类是字节流和字符流之间的适配器类,来承担编码转换的任务。