Java命令与编译执行

 

一、最基础的编译运行:

在D盘根目录下进行测试:

public class Test{
    public void say(){
        System.out.println("ok");
    }

    public static void main(String[]args){
        new Test().say();
    }
}

以上代码写入:

d:\Test.java

然后在d盘目录下执行:

D:\ >javac Test.java

便能生产Test.class文件,文件同样位于D:\根目录下(D:\Test.class)

如果文件名和类名不一致,那么编译时会提示错误:

Test.java:2: 错误: 类Hello是公共的, 应在名为 Hello.java 的文件中声明

 

再执行:

D:\ >java Test

便可成功运行main方法,看到输入结果"ok"

 

二、java类中指明了package

package com.cainiao.test;

public class Test{
    public void say(){
        System.out.println("ok");
    }

    public static void main(String[]args){
        new Test().say();
    }
}

这时,直接运行:

D:\ >javac Test.java

虽然可以成功得到Test.class文件,但是在运行时,却会报错找不到主类.

 

D:\> java Test
错误: 找不到或无法加载主类 Test

原因在于,这时类的全名为:com.cainiao.test.Test,运行时必须要指定全路径名。

Test.class文件不放在相应的包目录下,是不能运行的。编写一个类,编译成.class文件之后,然后随意放在一个目录下,并不等于就将该类放在了包中。,包名必须在源代码中,通过package语句指定,而不是靠目录结构确定。所以com.cainiao.test对应的目录结构需要为(./com/cainiao/test),放在其它目录下不会生效

因此,对于指定了package的类,使用命令:

D:\> javac -d . Test.java

进行编译,即可生成带有包目录的class文件,实际看到的效果为class文件放入了指定的文件夹下:D:\com\cainiao\test\Test.class

然后运行命令:

D:\> java com.cainiao.test.Test

即可得到输入“ok”

如果进入到编译的目录下运行:

D:\ com\cainiao\test\java Test
或者:
D:\ com\cainiao\test\java com.cainiao.test.Test

都会报找不到主类的错误。所以只有在编译时,带上目录,并且直接在生成的目录外面直接执行java命令,并且指定类的全路径限定名,才能够正确运行。

 

三、对文件夹下的所有源码进行编译

创建D:\src目录,然后在src目录下创建两个java类文件,

Test1.java,Test2.java,其package都指定到同一个路径下com.cainiao.test(当然,也可以不同)

对其进行编译:

D:\> javac -d . src/*.java

会自动对其进行编译,生成目录以及class文件。class文件最后发现在同一个目录下。

 

四、环境变量的含义

在安装JDK时,需要配置

JAVA_HOME:用于指明当前JDK的安装目录,它可以被后面两个配置项引用.

PATH:在系统中,执行javac,java命令时,系统会自动从PATH设置的路径去扫描查询可执行文件,只有配置之后,才能够在任意位置执行javac\java等命令。

CLASSPATH: 用于指明在JVM运行时,需要加载的class文件需要从哪些地方去查找,比如上面例子中,Test1.java引用了某个外部的类com.out.ref.Utils,那么必须要把这些编译好的外部依赖文件,放到CLASSPATH变量配置的路径下,JVM才能够正确解析依赖,让程序运行下去。

 

posted @ 2019-07-07 12:04  sliec  阅读(613)  评论(0编辑  收藏  举报