最近在写java测试程序的时候突然遇到了一个问题:java默认包中的public类是不能在其他包中直接调用的
首先,总结一下默认包中类的使用范围,java默认包中的类可以实例化其它包中的public类,但是其它包中的类是不能显式实例化默认包中的类这个特性在JDK1.4以后的版本成立;
其次,可以通过反射来访问默认包中的类
------解决方案--------------------
是的,直接调用不了,要想调用,需要把该类放到有名包中去。
------解决方案--------------------
本身写无名包不是太好的一种习惯,从技术角度来讲,硬是想调用默认包的话,就要用到反射。
下面是个例子,参考一下吧。
非默认包是可以调用到默认包里的类的。这里要用到反射。比如:
在默认包里有个类:
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);
}
}
------解决方案--------------------
------解决方案--------------------
import 一个无名包下的类,
这个语法仅在 JDK1.3 下有效
可能是鼓励大家多定义包吧,以免大家都在无名包下写代码,为了区分不同的功能,把类名定义的又臭又长