| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1102 人关注过本帖
标题:package问题
只看楼主 加入收藏
tgnian
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-4-13
收藏
 问题点数:0 回复次数:14 
package问题

// c05:local:PackagedClass.java
package c05.local;
public class PackagedClass {
public PackagedClass() {
System.out.println(
"Creating a packaged class");
}
}

//Foreign.java
public class Foreign {
public static void main (String[] args) {
PackagedClass pc = new PackagedClass();
}
}
Foreign.java文件和PackagedClass.java文件同在文件夹D:\Java\c05\local里
把package c05.local;注释掉可以编译
为什么加上package c05.local; 后 编译不过
出现错误:
D:\Java\c05\local>javac Foreign.java
Foreign.java:6: 无法访问 PackagedClass
错误的类文件: .\PackagedClass.java
文件不包含类 PackagedClass
请删除该文件或确保该文件位于正确的类路径子目录中。
PackagedClass pc = new PackagedClass();
^
1 错误

D:\Java\c05\local>

搜索更多相关主题的帖子: package 
2007-11-03 14:38
canyue
Rank: 1
等 级:新手上路
威 望:1
帖 子:159
专家分:0
注 册:2007-10-4
收藏
得分:0 
以下是引用tgnian在2007-11-3 14:38:55的发言:

// c05:local:PackagedClass.java
package c05.local;
public class PackagedClass {
public PackagedClass() {
System.out.println(
"Creating a packaged class");
}
}

//Foreign.java
public class Foreign {
public static void main (String[] args) {
PackagedClass pc = new PackagedClass();
}
}
Foreign.java文件和PackagedClass.java文件同在文件夹D:\Java\c05\local里
把package c05.local;注释掉可以编译
为什么加上package c05.local; 后 编译不过
出现错误:
D:\Java\c05\local>javac Foreign.java
Foreign.java:6: 无法访问 PackagedClass
错误的类文件: .\PackagedClass.java
文件不包含类 PackagedClass
请删除该文件或确保该文件位于正确的类路径子目录中。
PackagedClass pc = new PackagedClass();
^
1 错误

D:\Java\c05\local>

把红色的去掉就行 ,不是包的问题!


别看我现在只有这么亮,总有一天会月圆的!
2007-11-03 17:13
tgnian
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-4-13
收藏
得分:0 
sorry 你说的是不是把public去掉
但我试过还是不行

2007-11-03 18:20
guoxhvip
Rank: 8Rank: 8
来 自:聖西羅南看臺
等 级:贵宾
威 望:44
帖 子:4052
专家分:135
注 册:2006-10-8
收藏
得分:0 
javac -d d:\ PackagedClass.java

愛生活 && 愛編程
2007-11-03 20:13
canyue
Rank: 1
等 级:新手上路
威 望:1
帖 子:159
专家分:0
注 册:2007-10-4
收藏
得分:0 
以下是引用tgnian在2007-11-3 18:20:06的发言:
sorry 你说的是不是把public去掉
但我试过还是不行

怎么我的可以,是不是你的环境变量设错了???


别看我现在只有这么亮,总有一天会月圆的!
2007-11-03 22:14
hjlwlyhjl
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2006-12-6
收藏
得分:0 

这是由于你对classpath中的 . 理解不深的原因.它表示:当编译某个.java文件时,java虚拟机会搜索该文件所在目录下的所有.class文件以得到在.java文件中所使用的.class文件.而在此所说的所有的.class文件并不是真正意义上的所有.class文件,它有两种含义:1)与.java文件定义了相同包路径的的所有.class文件。比如:正在编译的.java文件中定义在包com.mypack中(即在程序开头定义package com.mypack;),则它只能在当前目录下搜索定义了同一个包(com.mypack)的.class文件。2) 假如A.java中没有定义任何包,并且它被放到了某个.java文件所定义的包路径中。比如把A.java放到了1)中定义的com\mypack中,此时的A只能通过classpath中的 . 搜索com\mypack目录下所有未定义任何包的.class文件,而不能搜索到定义了com.mypack的.class文件了。
有了上面的解释后,再回来看看你的程序:
1) 你将PackagedClass和Foreign都定义在包c05.local中(即都定义了"package c05.local;"语句)时:这就是上面介绍的第一种情况了,由于两个.java文件都定义了同一个包中,所以在编译的时候,Foreign.java能够根据classpath中的 . 找到PackagedClass.class文件(前提是PackagedClass.java必须先被编译PackagedClass.class文件),所以编译能够通过。
2)假如你在PackagedClass.java中定义了"package c05.local;"语句,但没有在Foreign.java定义"package c05.local"语句,并且把它们都放到了c05.local(表示相对目录)目录下时,这就是上面所说的第二中情况了。也就是说,Foreign.java文件只能通过classpath中的 . 搜索到所有的没有任何包定义的.class文件了,所以它就不能搜索到PackageClass.class文件,所以会报错。

解决方法:
1)就像上面的第一种情况,在两个源程序中都定义同一个包。
2)就是上面说的第二种情况,即在PackagedClass.java中定义包c05.local,而在Foreign.java中不定义任何包,此时应该在Foreign中添加这么一句:import c05.local; ,再将c05所在目录添加到classpath中,再编译也就没问题了。


2007-11-04 09:36
tgnian
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-4-13
收藏
得分:0 
以下是引用canyue在2007-11-3 22:14:58的发言:

怎么我的可以,是不是你的环境变量设错了???

classpath=.;D:\java\jdk1.6.0_02\lib;D:\java\jdk1.6.0_02\lib\tools.jar;D:\java


2007-11-07 00:27
tgnian
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-4-13
收藏
得分:0 
以下是引用hjlwlyhjl在2007-11-4 9:36:58的发言:

这是由于你对classpath中的 . 理解不深的原因.它表示:当编译某个.java文件时,java虚拟机会搜索该文件所在目录下的所有.class文件以得到在.java文件中所使用的.class文件.而在此所说的所有的.class文件并不是真正意义上的所有.class文件,它有两种含义:1)与.java文件定义了相同包路径的的所有.class文件。比如:正在编译的.java文件中定义在包com.mypack中(即在程序开头定义package com.mypack;),则它只能在当前目录下搜索定义了同一个包(com.mypack)的.class文件。2) 假如A.java中没有定义任何包,并且它被放到了某个.java文件所定义的包路径中。比如把A.java放到了1)中定义的com\mypack中,此时的A只能通过classpath中的 . 搜索com\mypack目录下所有未定义任何包的.class文件,而不能搜索到定义了com.mypack的.class文件了。
有了上面的解释后,再回来看看你的程序:
1) 你将PackagedClass和Foreign都定义在包c05.local中(即都定义了"package c05.local;"语句)时:这就是上面介绍的第一种情况了,由于两个.java文件都定义了同一个包中,所以在编译的时候,Foreign.java能够根据classpath中的 . 找到PackagedClass.class文件(前提是PackagedClass.java必须先被编译PackagedClass.class文件),所以编译能够通过。
2)假如你在PackagedClass.java中定义了"package c05.local;"语句,但没有在Foreign.java定义"package c05.local"语句,并且把它们都放到了c05.local(表示相对目录)目录下时,这就是上面所说的第二中情况了。也就是说,Foreign.java文件只能通过classpath中的 . 搜索到所有的没有任何包定义的.class文件了,所以它就不能搜索到PackageClass.class文件,所以会报错。

解决方法:
1)就像上面的第一种情况,在两个源程序中都定义同一个包。
2)就是上面说的第二种情况,即在PackagedClass.java中定义包c05.local,而在Foreign.java中不定义任何包,此时应该在Foreign中添加这么一句:import c05.local; ,再将c05所在目录添加到classpath中,再编译也就没问题了。

解决方法 2)中在什么路径编译
D:\java\c05\local>javac Foreign.java
还是编译不了


2007-11-07 00:56
tgnian
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-4-13
收藏
得分:0 

d:\java\c05\local目录下有PackagedClass.java Foreign.java
为什么编译不了,
D:\java\c05\local>javac Foreign.java
Foreign.java:6: 无法访问 PackagedClass
错误的类文件: .\PackagedClass.java
文件不包含类 PackagedClass
请删除该文件或确保该文件位于正确的类路径子目录中。
PackagedClass pc = new PackagedClass();
^
1 错误

还有为什么
D:\java\c05>javac local\Foreign.java
D:\java>javac c05\local\Foreign.java
D:\>javac java\c05\local\Foreign.java
这几句能编译成功,而

D:\java\c05\local>javac Foreign.java
编译不了
D:\>set classpath
classpath=.;D:\java\jdk1.6.0_02\lib;D:\java\jdk1.6.0_02\lib\tools.jar;D:\java


2007-11-07 00:57
tgnian
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-4-13
收藏
得分:0 

// c05:local:PackagedClass.java
package c05.local;
public class PackagedClass {
public PackagedClass() {
System.out.println(
"Creating a packaged class");
}
}

//c05:local:Foreign.java
import c05.local.*;
public class Foreign {
public static void main (String[] args) {
PackagedClass pc = new PackagedClass();
}
}


2007-11-07 00:58
快速回复:package问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029467 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved