2.4 测试本章代码

打开ch02/main.go文件,添加两条import语句,代码如下:

package main

import "fmt"
import "strings"
import "jvmgo/ch02/classpath"

func main() {...}
func startJVM(cmd *Cmd) {...}

main()函数不用变,重写startJVM()函数,代码如下:

func startJVM(cmd *Cmd) {
cp := classpath.Parse(cmd.XjreOption, cmd.cpOption)
fmt.Printf("classpath:%v class:%v args:%v\n",
  cp, cmd.class, cmd.args)

className := strings.Replace(cmd.class, ".", "/", -1)
classData, _, err := cp.ReadClass(className)
if err ! = nil {
  fmt.Printf("Could not find or load main class %s\n", cmd.class)
  return
}

fmt.Printf("class data:%v\n", classData)
}

startJVM()先打印出命令行参数,然后读取主类数据,并打印到控制台。虽然还是无法真正启动Java虚拟机,不过相比第1章,已经有了很大的进步。打开命令行窗口,执行下面的命令编译本章代码。

go install jvmgo\ch02

编译成功后,在D:\go\workspace\bin目录下出现ch02.exe文件。执行ch02.exe,指定好-Xjre选项和类名,就可以把class文件的内容打印出来。虽然只是一堆看似杂乱无章的数字,但成就感还是会油然而生。笔者的测试结果如图2-1所示。

图2-1 ch02.exe的测试结果