java的编译和导包问题,请指教!

weidu23 2013-06-13 02:38:44
在学习了很久的java之后,我突然意识到,我对java的生成过程不熟,于是,开始手动cmd编译。
但是,在手动编译的过程中,发现了几个问题,希望得到大家的指点:

问题1:---编译class文件
首先设定一个问题场景(也就是一个问题的来由):
请看程序:

package test;
public class A{
private void fun(){/*do something*/}
public void doSome(B b){/*do something*/}
public static void main(String[]args){/*do something*/}
}
---
package test;
public class B{
/*do something*/
}

此时,如果一个人是直接写了一段D:javac A.java B.java 的话,是没有问题的,可以很方便的生成出A.class和B.class文件。

但是,如果来一个先后顺序,先javac B.java生成B.class,再想直接javac A.java生成A.class,就会出问题了,如图:

然而实际上,我们经常写代码,会碰到你先在某处用了B.java(此时肯定编译好了B.class),可后面因为某种需求有不得不在另一个地方使用B.class,比如在另一处的A.java中使用了B类,那么,我先编译好了B.class,该怎么编译A.java呢?

-----------分割线1---------------

问题2:---不同包中的编译问题


package test;
public class A{
private void fun(){/*do something*/}
public void doSome(B b){/*do something*/}
public static void main(String[]args){/*do something*/}
}
---
package Auxiliary;
public class B{
/*do something*/
}


A.java和B.java在不同的包里面,怎么用cmd编译?

--------------------------分割线2--------------------------
问题3:
和问题2类似,不同之处在于,如果不是public,是别的类型,怎么编译?【此处提醒就好,我自己来试试】

--------------------------分割线3--------------------------

问题4:---导包问题
这个问题应该是我最关心的问题了,我曾经在http://bbs.csdn.net/topics/390465466提过相关问题,没有得到很好地解答,这里再次求教:
如果有一个a.jar包,我们导包只需javac -cp D://a.jar A.java来导包,
但是,如果有很多个jar包,我们不可能一个个的导包,这样不现实!,此时,肯定放在同一个文件夹里面,就比如放在AutoPackage文件夹中,那么:怎么一次性导入这个AutoPackage呢?


我是菜鸟,水平有待提供,望各位高手指教!!!!!!
...全文
1045 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
weidu23 2013-06-17
  • 打赏
  • 举报
回复
引用 11 楼 huntor 的回复:
要明白包结构和文件系统的目录的对应
额,这一点,虽说我也尝试过查看javac 的命令,依然搞不定。 你说的包结构和文件系统的目录对应关系,我没明白 ...
huntor 2013-06-14
  • 打赏
  • 举报
回复
javac -d classes test\A.java javac -d classes -cp classes test\B.java
weidu23 2013-06-14
  • 打赏
  • 举报
回复
引用 5 楼 dcxy0 的回复:
可以试试 : import Test.B; 这样貌似可以在需要调用的时候自动编译,Test是包名.
这个,貌似不行吧 ...
qingse77 2013-06-14
  • 打赏
  • 举报
回复
楼主第一个问题解决没? 反复不得其解??????? 望告知,是何原因?
huntor 2013-06-14
  • 打赏
  • 举报
回复
要明白包结构和文件系统的目录的对应
weidu23 2013-06-14
  • 打赏
  • 举报
回复
引用 7 楼 huntor 的回复:
javac -d classes test\A.java
javac -d classes -cp classes test\B.java


7楼同志,请看图:
weidu23 2013-06-14
  • 打赏
  • 举报
回复
引用 7 楼 huntor 的回复:
javac -d classes test\A.java javac -d classes -cp classes test\B.java
你会回答的很好,不过,我倒是依然碰到了点麻烦。 举例: 假设D:\test,其中test包含了classes文件夹、A.java和B.java,代码如上面提问所述,A用到了B。 此时,按照你的方法: javac -d D:\test\classes tset\B.java javac -d D:\test\classes test\A.java 编译没有错,但是 ... 生成的A.class和B.class并不是包含在classes中,而是包含在classes\test中。 我试图放入classes中,写成javac -d D:\test\classes B.java,报错,报错没找到B.java是符合逻辑的。 但是,由此推出: 我文件放在fileN文件夹里,然后指定.class存放点C_path,他就一定放在C_path/fileN里面。这个有点接受不了,因为我在不知情的情况下会因此找不到.class文件!!! 请问你有什么方法解决不?
杜仲的薄荷 2013-06-14
  • 打赏
  • 举报
回复
小白,学习了。。。。
student-ai 2013-06-13
  • 打赏
  • 举报
回复
可以试试 : import Test.B; 这样貌似可以在需要调用的时候自动编译,Test是包名.
weidu23 2013-06-13
  • 打赏
  • 举报
回复
引用 1 楼 flagiris 的回复:
javac -classpath 存放jar文件夹 com.xxx.java(带package名)
哦? 那么,前面几个问题,能否指教下?
weidu23 2013-06-13
  • 打赏
  • 举报
回复
引用 1 楼 flagiris 的回复:
javac -classpath 存放jar文件夹 com.xxx.java(带package名)
你指的是 javac D://AutoPackage test.java (假设AutoPackage包含了N个jar包) ???
Ciffer 2013-06-13
  • 打赏
  • 举报
回复
貌似在CMD中编译的话是要放在默认包下面,也就是说不能有package定义
菖蒲老先生 2013-06-13
  • 打赏
  • 举报
回复
javac -classpath 存放jar文件夹 com.xxx.java(带package名)

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧