1、jdk和java 2 sdk是一个意思。
2、所有高级开发工具(eclipse,jbuilder)抛出的错误异常根源都是jdk。
3、jdk,jre,jvm三者关系: jdk安装后jdk安装目录里面就会有jre,此外在program/java目录还会安装一套jre;这两套几乎没有任何区别,虽然有一丝的区别(可以忽略不考虑);如果只安装jre,那么只会在program/java下安装一套。
jdk>jre>jvm——jdk除了包括jre外,还有自己的javac.exe,jar.exe等可执行命令。jvm只是jre(类似一个pc机)里面的一个成员(动态链接函数库)。因为jdk里面的javac,jar等多个包装文件都是java编写的,它也必须在jre上才可以执行,所以默认它就使用jdk安装目录下的jre。同理很多使用java开发的系统软件也会自己安装一个jre,也就是这个道理。
4、如果机器上装了多个jdk,具体哪个被执行??
java XXX—— 具体哪个被执行,地查找顺序 当前目录-〉父目录-〉注册表
5、类加载器 java.exe命令完成找到jre的功能,而jre目录下/lit/rt.jar完成类的加载功能
类在加载过程中,预先加载和按需加载:一般基础类(java运行必须的类)都是一次加载,而系统的class则是在使用的时候才加载。类只有在new的时候才会载入,只有声明的时候是不被加载的。
6、java的动态性
#new Class() 是一种隐性的动态表现,因为jvm是按需进行动态加载的,而不是jvm启动时将所有的class都一次加载。
#Class.forName() 和 ClassLoader() 方法 显性动态加载。
7、三个Loader的委派关系
bootStrapLoader——appClassLoader——extClassLoader