APP下载

Cmd模式下带有package的Java程序的编译和运行

2017-10-21张亚利

科技风 2017年12期

摘要:Java中采用package来对类进行统一管理,从而有效避免类名冲突的问题。多数开发工具习惯性地把程序放在不同package里。然而,在cmd模式下,编译和运行带有package的程序时,往往找不到类,本文针对该问题,进行分析并给出解决方法。

关键词:Java;Package;编译器;完全路径

在开发复杂的Java项目时,程序员很难确保自己选用的类名和其他程序员选择的类名完全不同。为避免类名的冲突,Java使用包(package)对类进行统一管理。

Java中的包,相当于文件中的目录,目录名即是包名,如目录结构为ch5/bean,包名即为ch5.bean;在bean目录中创建java类,并在文件的开头添加package ch5.bean;工程根目录中的java类文件未特别指定包名的情况下,即不使用package语句时,该程序默认放在缺省包中。事实上,我们在做开发的时候,习惯性地把每个类都放在不同功能的package里。

于是,常常有这样的问题出现:“为什么在MyEclipse下能够正在编译和运行的带有package的程序,在cmd模式下总是提示找不到类呢?”。今日,我们将针对“带有package的Java程序的编译和运行的问题”进行详细的剖析。

举例说明,Demo1位于缺省包,Demo2_1(有包)和Demo2_2(有包,同时还调用其他包中的类)位于包ch5当中,Demo3位于ch5.bean当中,接下来我们对以下四段代码进行分析。

第一个类Demo1:

public class Demo1 {

public static void main(String[] args) {

System.out.print(“我在缺省包下....”); }

}

第二个类Demo2_1:

package ch5;

public class Demo2 {

public static void main(String[] args) {

System.out.print(“我在package ch5....”);}}

第三个类Demo2_2:

package ch5;

import ch5.bean.Demo3;

public class Demo2 {

public static void main(String[] args) {

System.out.println(“我在package ch5下....”);

Demo3 td = new Demo3(); //调用Demo3

td.show();}}

第四个类Demo3:

package ch5.bean;

public class Demo3 {

public void show()

{System.out.print(“我是Demo3,位于ch5.bean下......”);}}

现在,假设我们将项目TestPackage放置在D盘,目录结构如下:

图1 文件目录

下面我们将在cmd模式下对程序进行编译和运行:

1)按下列命令编辑和运行Demo1,将得到正常的结果。

D:\TestPackage>javac Demo1.java

D:\TestPackage>java Demo1

我在缺省包下....

分析:该例子,不属于任何包中,也没有相互的调用关系,可以独立编译和运行。

登录APP查看全文