我自己的感觉
1 启动jvm加载类加载器,将加载相关文件载入内存
2 执行javac命令
3 导入java.lang包和你自己import的包
4 执行编译期检查,有异常则抛出异常。
5 jvm生成与平台无关的二进制字节码文件  就是.class文件。

解决方案 »

  1.   

    如果是Javac编译器,主要做了如下的事情:
    1、解析与填充符号表;    
    2、注解处理器;    
    3、语义分析与字节码生成:    
        3.1、标注检查    
        3.2、数据及控制流分析    
        3.3、解语法糖    
            3.3.1、泛型与类型擦除    
            3.3.2、自动装箱、拆箱与遍历循环    
            3.3.3、条件编译    
        3.4、字节码生成    
    详细要研究下Javac的源代码了,java从也是Java实现的。
    程序编译与代码优化(早期(编译器)优化):
    https://github.com/arthinking/arthinking.github.io/blob/master/Java/2014120501_JVM%E7%AC%94%E8%AE%B0%20-%20%E7%A8%8B%E5%BA%8F%E7%BC%96%E8%AF%91%E4%B8%8E%E4%BB%A3%E7%A0%81%E4%BC%98%E5%8C%96%EF%BC%88%E6%97%A9%E6%9C%9F%EF%BC%88%E7%BC%96%E8%AF%91%E5%99%A8%EF%BC%89%E4%BC%98%E5%8C%96%EF%BC%89.md
      

  2.   

    打错了。。 javac也是Java实现的