编译及运行java程序

建立一个Hello.java文件,文件内容如下:

public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello, java!");
    }
}

注意,文件名前缀要和类名一致。接下来需要进行编译,使用编译命令javac

Java规定,某个类定义的public static void main(String[] args)是Java程序的固定入口方法,因此,Java程序总是从main方法开始执行。

注意到Java源码的缩进不是必须的,但是用缩进后,格式好看,很容易看出代码块的开始和结束,缩进一般是4个空格或者一个tab。

如何运行Java程序

Java源码本质上是一个文本文件,我们需要先用javacHello.java编译成字节码文件Hello.class,然后,用java命令执行这个字节码文件:

┌──────────────────┐
│    Hello.java    │<─── source code
└──────────────────┘
          │ compile
          ▼
┌──────────────────┐
│   Hello.class    │<─── byte code
└──────────────────┘
          │ execute
          ▼
┌──────────────────┐
│    Run on JVM    │
└──────────────────┘

因此,可执行文件javac是编译器,而可执行文件java就是虚拟机。

第一步,在保存Hello.java的目录下执行命令javac Hello.java

$ javac Hello.java

如果源代码无误,上述命令不会有任何输出,而当前目录下会产生一个Hello.class文件:

$ ls
Hello.class Hello.java

第二步,执行Hello.class,使用命令java Hello

$ java Hello
Hello, world!

注意:给虚拟机传递的参数Hello是我们定义的类名,虚拟机自动查找对应的class文件并执行。

有一些童鞋可能知道,直接运行java Hello.java也是可以的:

$ java Hello.java 
Hello, world!

这是Java 11新增的一个功能,它可以直接运行一个单文件源码!

实际开发中,我们会将源代码放在src目录中,而将编译过的类库文件存在在bin目录中。

|---src
   |
   |---com
      |---studyjava
         |---unit1
            |---Hello.java
|---bin    
   |
   |---com
      |---studyjava
         |---unit1
            |---Hello.class

# 编译 C:\Users\admin\Desktop\code\java\src>javac -d ../bin com/studyjava/unit1/Hello.java
# 运行 C:\Users\admin\Desktop\code\java\bin>java com.studyjava.unit1.Hello

需要注意的是,在实际项目中,单个不依赖第三方库的Java源码是非常罕见的,所以,绝大多数情况下,我们无法直接运行一个Java源码文件,原因是它需要依赖其他的库。