假如有一个类,直接不加package,也就是属于默认包:
public class ClassInDefaultPackage { public void doSomething(){
System.out.println("I am in default package.");
}
}
另外一个类,处于com包(或者任何非默认包),如何使用上面这个属于默认包的类?
package com;import ??;
public class ClassInComPackage { public static void main(String[] args){
ClassInDefaultPackage obj=new ClassInDefaultPackage();
obj.doSomething();
}
}我试了,
import *;
import *.*;
import ClassInDefaultPackage;
都不行,Eclipse也无法自动引入。是java特性规定无法引用默认包的类吗?

解决方案 »

  1.   

    搜索了一下 好像在最新的几个Jdk版本有包名的类是不能用缺省包中的类的 但是在Jdk1.2 1.3的时候好像是可以直接用缺省包中的类的
      

  2.   

    这个倒挺有趣的,为什么新版本的JDK反而不支持import缺省包,是个什么道理啊??
      

  3.   

    取消默认包的概念 或者强制把未确定包的类放到名为default的包中 
      

  4.   

    从 J2SE 1.4 开始,Java 编译器不再支持 import 进未命包名的类、接口。详见 J2SE 1.4 与 J2SE 1.3 兼容性文档,第 8 点第二部分:http://java.sun.com/javase/compatibility_j2se1.4.htmlThe compiler now rejects import statements that import a type from the unnamed namespace. Previous versions of the compiler would accept such import declarations, even though they were arguably not allowed by the language (because the type name appearing in the import clause is not in scope). The specification is being clarified to state clearly that you cannot have a simple name in an import statement, nor can you import from the unnamed namespace.To summarize, the syntax    import SimpleName;is no longer legal. Nor is the syntax    import ClassInUnnamedNamespace.Nested;which would import a nested class from the unnamed namespace. To fix such problems in your code, move all of the classes from the unnamed namespace into a named namespace.
      

  5.   

    至于为什么 unnamed package 还没有被去除掉?因为这可以很方便地编写一些小程序,也可以方便初学者进行学习。
    http://java.sun.com/docs/books/jls/third_edition/html/packages.html#7.4.2
      

  6.   

    不过我也觉得SUN直接规定不允许默认包更好一些。
      

  7.   

    还好,从开始使用java起就已经养成了啥类都放包里的习惯,嘿嘿......
      

  8.   

    要是能这样就好了:
    import default.XxxClass;
      

  9.   

    搜索了一下 好像在最新的几个Jdk版本有包名的类是不能用缺省包中的类的 但是在Jdk1.2 1.3的时候好像是可以直接用缺省包中的类的
      

  10.   

    前些天也发现这个问题,后来创建包就好了,当时没想太多.
    关于有人说不如直接取消默认包或就报错之类的更好,我不这么认为这样好,首先为了监容老版本的jdk,不能这样做;再则,这样做也不科学,我自己写个没有包的程序玩玩不行吗?反正我要不是给别人用的,或者就测试用吧,如果这样不让人用,那反而会引起更大误会了.
    至于高版本不允许导入默认包,我觉得是有道理的,不然这不利于项目模块分类,类越多,越复杂,阅读代码越困难.
      

  11.   

    非默认包是可以调用到默认包里的类的。这里要用到反射。比如:
    在默认包里有个类:
    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);
    }}LZ别忘了加分哟!
      

  12.   

    如果你用 Eclipse 的话,Eclipse 在你创建一个 Class 时已经警告你了,只是你不当一回事。 ^_^
      

  13.   

    谁说不可以用?用JAVA反射就可以调用没有包的类啊。
      

  14.   

    默认包不需要导入,已经导入了,,,,其实就是一个classpath的问题