自己动手写 Java 虚拟机(一)-编写命令行工具

本文是学习《自己动手写 Java 虚拟机》的第一篇学习笔记,将通过对该书的学习,一步一步使用 Java 语言编写 Java 虚拟机(作者使用的是 Go 语言),应该是很穷人版 Java 虚拟机,就是解析 Java 代码,然后编写执行引擎去执行这段代码。

跟随作者的脚步,首先基于 Java 实现一个命令行工具。

JCommander

这里使用 JCommander 实现一个命令行工具(Commons CLI 也可以)。

JCommander is a very small Java framework that makes it trivial to parse command line parameters.

官方文档地址:http://jcommander.org/

大致了解后,先不过多关注细节,写一个 Demo 试试。

引入相关依赖:

<dependency>
    <groupId>com.beustgroupId>
    <artifactId>jcommanderartifactId>
    <version>1.78version>
dependency>

官网的 Demo:

package com.dongguabai.jvm.terminal;

import com.beust.jcommander.JCommander;
import com.beust.jcommander.Parameter;

/**
 * @author Dongguabai
 * @Description
 * @Date 创建于 2020-06-08 05:34
 */
public class JcommanderTest {

    @Parameter(names={"--length", "-l"})
    int length;
    @Parameter(names={"--pattern", "-p"})
    int pattern;

    public static void main(String ... argv) {
        JcommanderTest main = new JcommanderTest();
        JCommander.newBuilder()
                .addObject(main)
                .build()
                .parse(argv);
        main.run();
    }

    public void run() {
        System.out.printf("%d %d", length, pattern);
    }
}

随后加上启动参数(这里要注意的是没必要比较纠结在 javac 上):

自己动手写 Java 虚拟机(一)-编写命令行工具_第1张图片

输出:

512 2

可以发现,使用还是非常简单的。

编写命令行工具

JCommander 使用还是非常方便的,暂时先写几个比较简单的,以后根据需要加入:

package com.dongguabai.jvm.terminal;

import com.beust.jcommander.JCommander;
import com.beust.jcommander.Parameter;

/**
 * @author Dongguabai
 * @Description
 * @Date 创建于 2020-06-08 07:36
 */
public class DongguabaiJVMCommander {

    private static final String CURRENT_VERSION = "Dongguabai jdk version \"0.0.1\"";

    /**
     * 查看版本
     */
    @Parameter(names = {"--version", "-v"}, required = false, arity = 0, description = "print product version and exit")
    private boolean version;

    /**
     * help
     */
    @Parameter(names = {"--help", "-h"}, required = false, arity = 0,description = " print the help message")
    private boolean help;

    /**
     * 运行 Java 代码
     */
    @Parameter(names = {"--run"}, required = false, arity = 1,description = "to execute a java file")
    private String run;

    public static void main(String... argv) {
        DongguabaiJVMCommander main = new DongguabaiJVMCommander();
        JCommander jCommander = JCommander.newBuilder()
                .addObject(main)
                .build();
        jCommander.parse(argv);
        main.run(jCommander);
    }

    private void run(JCommander jCommander) {
        if (version) {
            System.out.println(CURRENT_VERSION);
            return;
        }
        if (help) {
            jCommander.usage();
            return;
        }
        if (run != null){
            System.out.printf("execute:%s",run);
        }
    }
}

测试一下:

启动参数为 -v,输出:

Dongguabai jdk version "0.0.1"

启动参数为 -h,输出:

Usage: <main class> [options]
  Options:
    --help, -h
       print the help message
      Default: false
    --run
      to execute a java file
    --version, -v
      print product version and exit
      Default: false

启动参数为 --run hello.java,输出:

execute:hello.java

References

  • 《自己动手写 Java 虚拟机》
  • http://jcommander.org/

欢迎关注公众号
​​​​​​在这里插入图片描述

你可能感兴趣的:(jvm,&,jdk)