求大神确认一下,有这回事吗?

seai 2012-06-29 04:39:35
最近在写java测试程序的时候突然遇到了一个问题:java默认包中的public类是不能在其他包中直接调用的



首先,总结一下默认包中类的使用范围,java默认包中的类可以实例化其它包中的public类,但是其它包中的类是不能显式实例化默认包中的类这个特性在JDK1.4以后的版本成立;

其次,可以通过反射来访问默认包中的类

...全文
210 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
RDroid 2012-06-29
  • 打赏
  • 举报
回复
import 一个无名包下的类,
这个语法仅在 JDK1.3 下有效

可能是鼓励大家多定义包吧,以免大家都在无名包下写代码,为了区分不同的功能,把类名定义的又臭又长
阿冷 2012-06-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

这个规则有点奇怪。因为当时,第一想法就是,无名包的类应该是项目中全局可见的,可事实且且相反,是全局不可见的,且无任何方法可以导入(imports)。
[/Quote]
呵呵,你这么理解,也不能说错。
可是java的设计者们,看中的是封装啊。
也就是说,他们不建议你去写一些无名包,也多少有点逼着你去把封装做的好一些。
seai 2012-06-29
  • 打赏
  • 举报
回复
这个规则有点奇怪。因为当时,第一想法就是,无名包的类应该是项目中全局可见的,可事实且且相反,是全局不可见的,且无任何方法可以导入(imports)。
阿冷 2012-06-29
  • 打赏
  • 举报
回复
本身写无名包不是太好的一种习惯,从技术角度来讲,硬是想调用默认包的话,就要用到反射。
下面是个例子,参考一下吧。

非默认包是可以调用到默认包里的类的。这里要用到反射。比如:
在默认包里有个类:
public class DefaultPackage {
public void disp(){
System.out.println("Hello World!");
}
}

而如果你想再包test下的类中调用disp()方法可以这样:
package test;

import java.lang.reflect.*;

public class TestDefaultPackage {

public static void main(String[] args) throws Exception{
Class c = Class.forName("DefaultPackage");
Method m = c.getDeclaredMethod("disp", null);
m.invoke(c.newInstance(), null);
}

}
阿冷 2012-06-29
  • 打赏
  • 举报
回复
是的,直接调用不了,要想调用,需要把该类放到有名包中去。

62,621

社区成员

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

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