用命令行如何编译package中的java文件?

我写了两个源文件一个有main函数的记做A.java另一个是B.javaA.java开头不加package***;的时候是可以成功的单独编译运行的。现在我想在A中使用B的... 我写了两个源文件 一个有main函数的 记做A.java 另一个是B.java

A.java 开头不加package ***; 的时候是可以成功的单独编译运行的。

现在我想在A中使用B的内容 所以在AB前面都加了 package ***; 的语句

可是这样编译的时候只有B.java能通过编译,

A.java提示Exception in thread "main" java.lang.NoClassDefFoundError

请问这是怎么一回事,我怎样做才能使AB都能通过编译并运行?

另外是只要在包中文件头都加上package 包名; 就行吗?还是要写import之类的?
编译的时候用的是这样的命令:
javac -d.B.java
javac A.java
两个编译都通过
运行java A 的时候 提示Exception in thread "main" java.lang.NoClassDefFoundError
展开
 我来答
朵朵聊财经
推荐于2017-10-02 · TA获得超过1194个赞
知道小有建树答主
回答量:950
采纳率:0%
帮助的人:406万
展开全部
其实解决方案很简单,既然编译器不能根据包名找到A类,那我们就把A类的绝对路径直接告诉编译器不就可以了吗?事实上就是这么做的,具体操作为:在命令行模式下进入F:\test目录,然后运行编译命令javac F:\test\edu\main\A.java,可以成功编译生成A.class文件。(注意:如果不在此目录下执行编译命令的话,就要将f:\test加入到当前的classpath中为make工具提供B.java的位置信息)
接下来就要运行这个class文件了,运行仍然在F:\test目录下执行(注意:如果不在此目录下执行运行命令的话,一定要把F:\test加入到当前的classpath中),命令为:java edu.main.A,很显然,这里就是根据输入的package名称找到对应的class文件,并检验找到的class文件的与输入的包名是否匹配(例如:如果你在edu目录下新建一个test目录,将A.class文件拷贝进去,输入java edu.test.A 的话还是会报错:找不到class文件)。可能有人要问:为什么运行的时候又可以根据包名找到相应的class文件呢?因为运行的时候默认是从当前路径开始搜索的,如果当前路径找不到的话,就在系统的classpath中找,如果再找不到就会报错。
由上面的分析我们可以得出:
(1)在命令行模式下编译java文件时,如果cmd不在该java文件所在的目录下,就要直接指定文件
的绝对路径(javac F:\test\edu\main\A.java),如果在java文件所在的目录下,可以不指定
路径,但是要设置classpath让编译器的make工具找到其他import的类
(2)运行的时候要指出包路径(java edu.main.A),并且一定要在class文件名前带上完整的包名
(edu.main.A),而且该包所在的文件夹(即edu所在的文件夹)一定要在classpath中,这样才
能找到对应的class文件(在包所在的文件夹目录下运行cmd程序或者将该目录加入到classpath
中均可)。
(3)在命令行模式下非直接编译的java,编译器使用make工具根据java文件中的import信息间接找
到引用的java文件,所以一定要注意文件的配置,以及相互之间的位置关系。当然也可以通过
设置classpath提供给make工具,但是如果文件比较多而且相互之间的引用关系比较复杂的话会
比较麻烦。
(4)classpath只能供make工具以及运行class文件时使用,在直接编译的时候不使用classpath信
息,必须在要编译的java文件前带上其绝对的路径名。
静静的想念_
2009-09-09
知道答主
回答量:2
采纳率:0%
帮助的人:0
展开全部
一、先建立一个包,把两个类放到放进里面,然后调用编译。
二、如果两个类不在同一个包内,需要导入包名,用import 导入,
important 后面跟包的名称,试试看。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hycic
2009-09-10 · TA获得超过110个赞
知道答主
回答量:37
采纳率:0%
帮助的人:51.3万
展开全部
汗 NoClassDefFoundError异常 说明你A类里面不知道B类 我看是你的B类没有public吧 一个类要能够被另外一个类import必须的public 而不是default,你把B类的写成如下在试试:
package ***;
public class B{

}

A类使用:
package **;// a的包名
import ***.B; //导入B
public class A{//your fun}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友5476a41
2009-09-10 · TA获得超过883个赞
知道小有建树答主
回答量:1251
采纳率:0%
帮助的人:696万
展开全部

找不到指定的类文件!

package  是说你的类文件在那个包下

import   是说你需要引用的类文件路径

package是每个类不可缺少的东西

import是你想用其他类,导入此类的路径

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hannover100
推荐于2017-09-06
知道答主
回答量:2
采纳率:0%
帮助的人:0
展开全部
Exception in thread "main" java.lang.NoClassDefFoundError
这个错误的出现是与A.java文件所在的目录有关系

例如:在没有加package的时候,A.java,B.java放在在根目录下E:\A.java
这个时候在dos E:\下,是可以编译执行A.java的

当加入package以后,这个就行不通了:java认为在建立package的时候也同时应该建立对应的目录,java文件应该放在这个目录下。
例如: A.java B.java 你用的package a.b;
这个时候,就应该把文件放在目录E:\a\b下
然后在dos E:\ 进行如下的编译
javac a\b\A.java
然后运行 java a/b/A
就能正常运行了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式