今天学习了如何在linux系统上编译Java代码,特转载一篇关于带包的java程序编译运行方法,方便后续复习使用
一、编译单独一个java程序
Hello.java
public class Hello{
public static void main(String args[]){
System.out.println("Hello World!");
}
}
xl@ubuntu:~/java$ javac Hello.java //在当前目录下产生Hello.class文件
xl@ubuntu:~/java$ ls
Hello.class Hello.java
xl@ubuntu:~/java$ java Hello // 执行Hello.class
Hello World!
二、编译一个带包的java程序
Hello.java
package hello.world;
public class Hello{
public static void main(String args[]){
System.out.println("Hello World!");
}
}
xl@ubuntu:~/java$ javac Hello.java // 在当前目录下产生Hello.class文件
xl@ubuntu:~/java$ ls
Hello.class Hello.java
xl@ubuntu:~/java$ java Hello // 在执行的时候显示找不到Hello这个类,原因是因为程序中包含包hello.world,执行类的时候回去按照这个包的路径来找。因此我们用下面的命令来执行。
Error: Could not find or load main class Hello
xl@ubuntu:~/java$ javac -d . Hello.java // 参数-d 指定生成class文件的位置
xl@ubuntu:~/java$ ls // 此时我们看到在当前目录下生成了一个目录hello/world/
hello Hello.java
xl@ubuntu:~/java$ tree hello/
hello/
└── world
└── Hello.class
1 directory, 1 file
xl@ubuntu:~/java$ java hello.world.Hello // 执行类的时候需要带上路径
Hello World!
三、同一个包下,一个类调用另一个类
Lance.java
package hello.world;
public class Lance{
public String getName(){
return "my name is lance";
}
}
Introduce.java
package hello.world;
import hello.world.Lance;
public class Introduce{
public static void main(String args[]){
Lance name = new Lance();
System.out.println("hello world! " + name.getName());
}
}
xl@ubuntu:~/java$ javac -d . Lance.java // 参数-d . 表示在当前目录下产生hello/world/目录。并且生成Lance.class
xl@ubuntu:~/java$ javac -cp . -d . Introduce.java // 参数-cp . 表示按照hello.world.Lance的路径寻找类,并且编译Introduce.java。此时在当前目录下产生hello/world/目录,并且生成Introduce.class
xl@ubuntu:~/java$ tree hello/
hello/
└── world
├── Introduce.class
└── Lance.class
1 directory, 2 files
xl@ubuntu:~/java$ java hello.world.Introduce
hello world! my name is lance
四、一个包下的类调用另一个包下的类
Lance.java
package hello.world01;
public class Lance{
public String getName(){
return "my name is lance";
}
}
Introduce.java
package hello.world02;
import hello.world01.Lance;
public class Introduce{
public static void main(String args[]){
Lance name = new Lance();
System.out.println("hello world! " + name.getName());
}
}
xl@ubuntu:~/java$ javac -d . Lance.java // 参数-d . 表示在当前目录下产生hello/world01/目录。并且生成Lance.class
xl@ubuntu:~/java$ javac -cp . -d . Introduce.java // 参数-cp . 表示按照hello.world01.Lance的路径寻找类,并且编译Introduce.java。此时在当前目录下产生hello/world02/目录,并且生成Introduce.class
xl@ubuntu:~/java$ tree hello/
hello/
├── world01
│ └── Lance.class
└── world02
└── Introduce.class
2 directories, 2 files
xl@ubuntu:~/java$ java hello.world02.Introduce // 执行Introduce类的时候需要指定路径
hello world! my name is lance
补充:
一个包的文件都在时运行如下命令进行编译: javac -d . *.java
运行:编译之后会自己生成文件夹,不要进入这个文件夹,直接运行 java -cp /home/test test.Test,其中源文件在 test 文件夹中,包名为 test,启动文件为 Test.java。