《自己动手写Java虚拟机》学习笔记(二)

第二章 搜索class文件

在加载类前,需要加载它的父类。本章主要讲述的是对于一个java类对应的class文件搜索。

2.1类路径

1.这里涉及到jvm的类路径有三种:

①.bootstrap classpath从jre\lib加载

②.extension classpath从jre\lib\ext加载

③.application classpath从三方类库加载

有没有想起jvm的类加载机制?<类加载机制,走你!>

2.java命令

java -cp path\to\classes ...

java -cp path\to\lib1.jar ...

java -cp path\to\zip2.zip ...

windows下可以分号分隔,类unix下都是冒号分隔。

扫描二维码关注公众号,回复: 2489472 查看本文章

java1.6后还可以通过通配符(*)指定某目录下所有的jar

那么问题来了?有没有发现java命令可以解析jar和zip?这是因为jar和zip都是压缩形式的,但是压缩格式不同。

2.2 Go语言语法

1.Go的函数或方法允许返回多个值。

2.Go继承中,不需要实现接口,只要方法匹配即可。

3.Go没有专门的构造函数。

//函数标识符  使用者类型 方法名        形参        类型    返回值
func (self *TestClass) dosomething(inputString string) ([]byte , error) {...}

2.3本章小结

1.jvm解析classpath选项:

-Xjre解析启动类路径和拓展类路径。优先使用用户输入的-Xjre作为jre目录。如果没有输入该选项,则在当前目录下寻找jre目录。如果找不到,尝试使用JAVA_HOME环境变量。

-classpath/-cp为解析用户类路径。如果用户没有提供该选项,则使用当前目录作为用户类路径。

2.jvm根据由第1步处理得到的结果,去寻找.class文件。

①如果带有*(形如:lib\*),则匹配一个目录下的所有.class

②如果带有jar/JAR/zip/ZIP,则需要遍历压缩包里的文件,看是否能够找到.class

③如果带有“;”(多个源),则需要对每一个源进行挨个处理

④一般情况,即直接指定.class文件。

猜你喜欢

转载自blog.csdn.net/monkeydcoding/article/details/81289013