Java在命令行编译以及运行带包名的类

命令行编译时,可以在任意目录下进行编译,只要指定目标java文件所在路径。

同样的,运行时只要指定了classpath,也可以在任意目录下运行class文件。

★在java源文件目录下编译&运行:

例如:HelloWorld.java

package com.hpe.kevin;

public class HelloWorld {

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

}

①将HelloWorld.java放在C:\javacode

Microsoft Windows [Version 10.0.14393]
(c) 2016 Microsoft Corporation. All rights reserved.

C:\Users\junzhang>cd C:\javacode

C:\javacode>dir

 C:\javacode のディレクトリ

2019/05/17  13:11    <DIR>          .
2019/05/17  13:11    <DIR>          ..
2019/05/17  13:10               137 HelloWorld.java
               1 個のファイル                 137 バイト
               2 個のディレクトリ  134,115,450,880 バイトの空き領域

C:\javacode>

在C:\javacode目录下,运行javac命令,不指定生成的class文件的目标文件夹(-d 选项)。

C:\javacode>javac HelloWorld.java

C:\javacode>dir

 C:\javacode のディレクトリ

2019/05/17  13:13    <DIR>          .
2019/05/17  13:13    <DIR>          ..
2019/05/17  13:13               440 HelloWorld.class
2019/05/17  13:10               137 HelloWorld.java
               2 個のファイル                 577 バイト
               2 個のディレクトリ  134,114,734,080 バイトの空き領域

C:\javacode>

此时,如果没有设置classpath的话,不管运行java HelloWorld或者java com.hpe.kevin.HelloWorld 都会提示找不到类的错误。
默认的classpath为当前目录。

C:\javacode>dir

 C:\javacode のディレクトリ

2019/05/17  13:13    <DIR>          .
2019/05/17  13:13    <DIR>          ..
2019/05/17  13:13               440 HelloWorld.class
2019/05/17  13:10               137 HelloWorld.java
               2 個のファイル                 577 バイト
               2 個のディレクトリ  134,114,734,080 バイトの空き領域

C:\javacode>SET CLASSPATH
環境変数 CLASSPATH が定義されていません

C:\javacode>java HelloWorld.class
エラー: メイン・クラスHelloWorld.classが見つからなかったかロードできませんでした

C:\javacode>java com.hpe.kevin.HelloWorld
エラー: メイン・クラスcom.hpe.kevin.HelloWorldが見つからなかったかロードできませんでした

C:\javacode>

要想正常运行HelloWord,可以将HelloWorld.class文件移动到c:\javacode\com\hpe\kevin目录下。

C:\javacode\com\hpe\kevin>dir c:\javacode

 c:\javacode のディレクトリ

2019/05/17  13:22    <DIR>          .
2019/05/17  13:22    <DIR>          ..
2019/05/17  13:21    <DIR>          com
2019/05/17  13:10               137 HelloWorld.java
               1 個のファイル                 137 バイト
               3 個のディレクトリ  134,112,964,608 バイトの空き領域

C:\javacode\com\hpe\kevin>dir

 C:\javacode\com\hpe\kevin のディレクトリ

2019/05/17  13:22    <DIR>          .
2019/05/17  13:22    <DIR>          ..
2019/05/17  13:13               440 HelloWorld.class
               1 個のファイル                 440 バイト
               2 個のディレクトリ  134,112,964,608 バイトの空き領域

C:\javacode\com\hpe\kevin>

然后在c:\javacode目录下,运行命令java com.hpe.kevin.HelloWorld。

C:\javacode>java com.hpe.kevin.HelloWorld
Hello World!

C:\javacode>

另外一种方法:在编译时加上-d选项。这样,编译结束后,会在c:\javacode目录下生成com\hpe\kevin文件夹,并且HelloWorld.class文件在C:\javacode\com\hpe\kevin目录下。

C:\javacode>dir

 C:\javacode のディレクトリ

2019/05/17  13:38    <DIR>          .
2019/05/17  13:38    <DIR>          ..
2019/05/17  13:10               137 HelloWorld.java
               1 個のファイル                 137 バイト
               2 個のディレクトリ  134,107,607,040 バイトの空き領域

C:\javacode>javac -d . HelloWorld.java

C:\javacode>dir

 C:\javacode のディレクトリ

2019/05/17  13:38    <DIR>          .
2019/05/17  13:38    <DIR>          ..
2019/05/17  13:38    <DIR>          com
2019/05/17  13:10               137 HelloWorld.java
               1 個のファイル                 137 バイト
               3 個のディレクトリ  134,107,471,872 バイトの空き領域

C:\javacode>dir com\hpe\kevin

 C:\javacode\com\hpe\kevin のディレクトリ

2019/05/17  13:38    <DIR>          .
2019/05/17  13:38    <DIR>          ..
2019/05/17  13:38               440 HelloWorld.class
               1 個のファイル                 440 バイト
               2 個のディレクトリ  134,108,250,112 バイトの空き領域

C:\javacode>

★在java源文件以外的目录编译&运行:

HelloWorld.java放在C:\javacode目录下。

C:\javacompileotherdir>dir c:\javacode

 c:\javacode のディレクトリ

2019/05/17  13:38    <DIR>          .
2019/05/17  13:38    <DIR>          ..
2019/05/17  13:38    <DIR>          com
2019/05/17  13:10               137 HelloWorld.java
               1 個のファイル                 137 バイト
               3 個のディレクトリ  134,105,608,192 バイトの空き領域

C:\javacompileotherdir>dir

 C:\javacompileotherdir のディレクトリ

2019/05/17  13:48    <DIR>          .
2019/05/17  13:48    <DIR>          ..
               0 個のファイル                   0 バイト
               2 個のディレクトリ  134,105,608,192 バイトの空き領域

C:\javacompileotherdir>

将HelloWorld.java编译到C:\javacode\class目录下。※事先在C:\javacode下建好class目录。

C:\javacompileotherdir>javac -d c:\javacode\class c:\javacode\HelloWorld.java

C:\javacompileotherdir>dir c:\javacode\class\com\hpe\kevin

 c:\javacode\class\com\hpe\kevin のディレクトリ

2019/05/17  14:08    <DIR>          .
2019/05/17  14:08    <DIR>          ..
2019/05/17  14:08               440 HelloWorld.class
               1 個のファイル                 440 バイト
               2 個のディレクトリ  134,106,296,320 バイトの空き領域

C:\javacompileotherdir>dir

 C:\javacompileotherdir のディレクトリ

2019/05/17  13:48    <DIR>          .
2019/05/17  13:48    <DIR>          ..
               0 個のファイル                   0 バイト
               2 個のディレクトリ  134,106,296,320 バイトの空き領域

C:\javacompileotherdir>

在未设置classpath的情况下,运行HelloWorld。

C:\javacompileotherdir>SET CLASSPATH
環境変数 CLASSPATH が定義されていません

C:\javacompileotherdir>java -cp c:\javacode\class com.hpe.kevin.HelloWorld
Hello World!

C:\javacompileotherdir>

事先设置好classpath的话,可以这么运行:

C:\javacompileotherdir>SET CLASSPATH
環境変数 CLASSPATH が定義されていません

C:\javacompileotherdir>SET CLASSPATH=.;c:\javacode\class

C:\javacompileotherdir>SET CLASSPATH
classpath=.;c:\javacode\class

C:\javacompileotherdir>java com.hpe.kevin.HelloWorld
Hello World!

C:\javacompileotherdir>

或者,切换到c:\javacode\class后运行HelloWorld

C:\javacompileotherdir>cd c:\javacode\class

c:\javacode\class>java com.hpe.kevin.HelloWorld
Hello World!

c:\javacode\class>

★结论:

1. javac编译时,在没有设置任何classpath环境变量的情况下,javac可以编译全路径的.java文件(即javac认识文件系统)。如果编译时没有加-d选项指定生成后的class文件目标路径,那么,编译后,在.java同路径目录下生成class文件。

2. 默认java虚拟机要从classpath环境变量的路径中搜索class文件去执行,对于java虚拟机来说,这不是类文件,而是类。它只有类路径,而没有文件系统路径。而classpath环境变量正是为java虚拟机提供搜索类路径的环境。注意,虚拟机不会递归搜索classpath定义的路径。

3. 要明确的是javac编译器搜索的是文件路径,和环境变量classpath无关。而java虚拟机搜索的是类文件,严格地说是类,搜索路径由环境变量classpath决定,且有先后顺序。

转载于:https://my.oschina.net/u/3726099/blog/3050822

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值