Java包访问权限问题

锦瑟six 2014-03-10 11:55:44
放在同一个包中的两个类:
package packages.testpackage;

public class ClassOfProtected{
protected void printMe(){
System.out.println("I'm protected!");
}
public void printOthers(){
System.out.println("I'm public!");
}
}

package packages.testpackage;

public class Test1{
public static void main(String[] args){
ClassOfProtected cop = new ClassOfProtected();
cop.printOthers();
}
}


Test1运行时提示错误信息:Exception in Thread "main" java.lang.NoClassDefFoundError:Test1(wrong name:packages/testpackage/Test1)

求教
...全文
359 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
锦瑟six 2014-03-13
  • 打赏
  • 举报
回复
引用 20 楼 popjj2004 的回复:
带package语句的类运行时需要在包名的上一层目录中运行: java packages.testpackage.Test1 才是正确的,估计你在Test1.java所在目录直接执行 java Test1,就会出现你说的错误。
可以了,这么做确实是正确的,而且只能在classpath里面设置的那个路径下运行,再往里进一层都不行。 能不能告诉我是为什么? 还有,问一个比较傻的问题,用package语句放在同一个包里的两个类的.class文件必须在同一目录下吧?
a825395336 2014-03-12
  • 打赏
  • 举报
回复
javac ****.java -d ./ java ****.****
锦瑟six 2014-03-12
  • 打赏
  • 举报
回复
引用 16 楼 a825395336 的回复:
[quote=引用 14 楼 zhangyang_freedom 的回复:] [quote=引用 10 楼 u014029584 的回复:] 一个包中的类最多只能有一个public class 把第一个类的public关键字去掉应该可以的
啊 有这种事 我试试[/quote] ,,,,,,你用命令行编译带包名的java要用-d参数再指定路径生成class文件,再包名.类名运行程序[/quote] 具体应该怎么写 给个范例
锦瑟six 2014-03-12
  • 打赏
  • 举报
回复
引用 13 楼 mashining1988111 的回复:
我这能跑完 两个方法都能调到
啊。。。这到底是为什么 为什么我这里一直不行 反倒是不同包之间可以访问到public的方法,同一个包中连类都找不到
a825395336 2014-03-12
  • 打赏
  • 举报
回复
引用 14 楼 zhangyang_freedom 的回复:
[quote=引用 10 楼 u014029584 的回复:] 一个包中的类最多只能有一个public class 把第一个类的public关键字去掉应该可以的
啊 有这种事 我试试[/quote] ,,,,,,你用命令行编译带包名的java要用-d参数再指定路径生成class文件,再包名.类名运行程序
锦瑟six 2014-03-12
  • 打赏
  • 举报
回复
引用 14 楼 zhangyang_freedom 的回复:
[quote=引用 10 楼 u014029584 的回复:] 一个包中的类最多只能有一个public class 把第一个类的public关键字去掉应该可以的
啊 有这种事 我试试[/quote] 不行的 还是一样的错误
锦瑟six 2014-03-12
  • 打赏
  • 举报
回复
引用 10 楼 u014029584 的回复:
一个包中的类最多只能有一个public class 把第一个类的public关键字去掉应该可以的
啊 有这种事 我试试
锦瑟six 2014-03-12
  • 打赏
  • 举报
回复
引用 20 楼 popjj2004 的回复:
带package语句的类运行时需要在包名的上一层目录中运行: java packages.testpackage.Test1 才是正确的,估计你在Test1.java所在目录直接执行 java Test1,就会出现你说的错误。
我操 请允许我讲脏话 你的提示勾起了我大学时对于这一知识的记忆!我想是对的,回家试一下!!谢谢!!!
popjj2004 2014-03-12
  • 打赏
  • 举报
回复
带package语句的类运行时需要在包名的上一层目录中运行: java packages.testpackage.Test1 才是正确的,估计你在Test1.java所在目录直接执行 java Test1,就会出现你说的错误。
mashining1988111 2014-03-11
  • 打赏
  • 举报
回复
我这能跑完 两个方法都能调到
Magician-CH 2014-03-11
  • 打赏
  • 举报
回复
引用 10 楼 u014029584 的回复:
一个包中的类最多只能有一个public class 把第一个类的public关键字去掉应该可以的
你确定?
锦瑟six 2014-03-10
  • 打赏
  • 举报
回复
引用 6 楼 akon405 的回复:
把classpath加为这个路径再试试
唉 都加了 已经把包前面的那条路径添加到classpath了
巫巫巫 2014-03-10
  • 打赏
  • 举报
回复
把classpath加为这个路径再试试
锦瑟six 2014-03-10
  • 打赏
  • 举报
回复
引用 1 楼 akon405 的回复:
NoClassDefFoundError:Test1 没有class文件,请编译
编译了 .class文件就在同一个目录下
锦瑟six 2014-03-10
  • 打赏
  • 举报
回复
如果去掉Test1的package语句 把它放在默认包中就可以正确运行 但不能访问protected方法。 我想做的其实就是测试一下,在同一个包中的两个类,其中一个可以访问另一个的protected方法
锦瑟six 2014-03-10
  • 打赏
  • 举报
回复
引用 楼主 zhangyang_freedom 的回复:
放在同一个包中的两个类: package packages.testpackage; public class ClassOfProtected{ protected void printMe(){ System.out.println("I'm protected!"); } public void printOthers(){ System.out.println("I'm public!"); } } package packages.testpackage; public class Test1{ public static void main(String[] args){ ClassOfProtected cop = new ClassOfProtected(); cop.printOthers(); } } Test1运行时提示错误信息:Exception in Thread "main" java.lang.NoClassDefFoundError:Test1(wrong name:packages/testpackage/Test1) 求教
编译了 .class是有的
yueyuexiong 2014-03-10
  • 打赏
  • 举报
回复
嗯,如果是dos编的话 是需要javac编译的
巫巫巫 2014-03-10
  • 打赏
  • 举报
回复
NoClassDefFoundError:Test1 没有class文件,请编译
我是菜鸟阿水 2014-03-10
  • 打赏
  • 举报
回复
一个包中的类最多只能有一个public class 把第一个类的public关键字去掉应该可以的
锦瑟six 2014-03-10
  • 打赏
  • 举报
回复
引用 8 楼 shuipinglp 的回复:
估计你的编译或者路径有问题把,我这里可以跑出来的
哥,你确定?我其他都可以正确运行的,包外访问可以,你确定你在Test1这个类中使用了package语句?
加载更多回复(1)

62,614

社区成员

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

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