程序的编译运行和HelloWorid的常见问题与Notepad++使用12/999

          Java整个编译以及运行的过程相当繁琐,本文通过一个简单的程序来简单的说明整个流程。       

          如下图,Java程序从源文件创建到程序运行要经过两大步骤:1、源文件由编译器编译成字节码(ByteCode)  2、字节码由java虚拟机解释运行。因为java程序既要编译同时也要经过JVM的解释运行,所以说Java被称为半解释语言( "semi-interpreted" language)。


图1   java程序编译运行过程

 

        下面通过以下这个java程序,来说明java程序从编译到最后运行的整个流程。代码如下:

 

  1. //MainApp.java  
  2. public class MainApp {  
  3.     public static void main(String[] args) {  
  4.         Animal animal = new Animal("Puppy");  
  5.         animal.printName();  
  6.     }  
  7. }  
  8. //Animal.java  
  9. public class Animal {  
  10.     public String name;  
  11.     public Animal(String name) {  
  12.         this.name = name;  
  13.     }  
  14.     public void printName() {  
  15.         System.out.println("Animal ["+name+"]");  
  16.     }  
  17. }  

 

        第一步(编译): 创建完源文件之后,程序会先被编译为.class文件。Java编译一个类时,如果这个类所依赖的类还没有被编译,编译器就会先编译这个被依赖的类,然后引用,否则直接引用,这个有点象make。如果java编译器在指定目录下找不到该类所其依赖的类的.class文件或者.java源文件的话,编译器话报“cant find symbol”的错误。

        编译后的字节码文件格式主要分为两部分:常量池方法字节码。常量池记录的是代码出现过的所有token(类名,成员变量名等等)以及符号引用(方法引用,成员变量引用等等);方法字节码放的是类中各个方法的字节码。下面是MainApp.class通过反汇编的结果,我们可以清楚看到.class文件的结构:
图2  MainApp类常量池  
 
posted @ 2022-06-28 15:31  ja不会va  阅读(49)  评论(0)    收藏  举报