想把两个文件中的类放到一个包中,结果编译后没有生成包结构的目录,也无法访问同包中的其他文件中的类
源文件:
//Src.java
package same1.Src;
public class Src{
  public class C{}
}//StaticImport.java
package same1.Src1;
import same1.Src1.*;//同一个包是不用import的,这里是测试一下,可以过,就是说可以找到这两层public class StaticImport{
  public static void main(String[] args){
   Src.C c = new Src.C();
   /*
StaticImport.java:6: 软件包 Src 不存在
        Src.C c = new Src.C();
           ^
StaticImport.java:6: 软件包 Src 不存在
        Src.C c = new Src.C();
                         ^
2 错误
    */  
  
   same1.Src1.Src.C c = new same1.Src1.Src.C();
   /*
StaticImport.java:7: 软件包 same1.Src1.Src 不存在
        same1.Src1.Src.C c = new same1.Src1.Src.C();
                      ^
StaticImport.java:7: 软件包 same1.Src1.Src 不存在
        same1.Src1.Src.C c = new same1.Src1.Src.C();
                                               ^
2 错误  
   */
  
   same1.Src1.Src s = new same1.Src1.Src();
   /*
     StaticImport.java:28: 找不到符号
符号: 类 Src
位置: 软件包 same1.Src1
        same1.Src1.Src s = new same1.Src1.Src();
                  ^
StaticImport.java:28: 找不到符号
符号: 类 Src
位置: 软件包 same1.Src1
        same1.Src1.Src s = new same1.Src1.Src();
                                         ^
2 错误
   */
  
  }
}编译信息:...\project\StaticImport>javac -g -verbose -Xlint:all Src.java
I:\LG_course\java_temp\project\StaticImport>javac -g -verbose -Xlint:all Src.jav
a
[解析开始时间 Src.java]
[解析已完成时间 109ms]
[源文件的搜索路径: J:\Java\jdk1.6.0_03\lib\tools.jar,.]
[类文件的搜索路径: J:\Java\jdk1.6.0_03\jre\lib\resources.jar,J:\Java\jdk1.6.0_0
3\jre\lib\rt.jar,J:\Java\jdk1.6.0_03\jre\lib\sunrsasign.jar,J:\Java\jdk1.6.0_03\
jre\lib\jsse.jar,J:\Java\jdk1.6.0_03\jre\lib\jce.jar,J:\Java\jdk1.6.0_03\jre\lib
\charsets.jar,J:\Java\jdk1.6.0_03\jre\classes,J:\Java\jdk1.6.0_03\jre\lib\ext\su
njce_provider.jar,J:\Java\jdk1.6.0_03\jre\lib\ext\sunmscapi.jar,J:\Java\jdk1.6.0
_03\jre\lib\ext\sunpkcs11.jar,J:\Java\jdk1.6.0_03\jre\lib\ext\dnsns.jar,J:\Java\
jdk1.6.0_03\jre\lib\ext\localedata.jar,J:\Java\jdk1.6.0_03\lib\tools.jar,.]
[正在装入 J:\Java\jdk1.6.0_03\lib\ct.sym(META-INF/sym/rt.jar/java/lang/Object.cl
ass)]
[正在检查 same1.Src.Src]
[正在装入 J:\Java\jdk1.6.0_03\lib\ct.sym(META-INF/sym/rt.jar/java/io/Serializabl
e.class)]
[已写入 Src$C.class]
[已写入 Src.class]
[总时间 1250ms]...\project\StaticImport>javac -g -verbose -Xlint:all StaticImport.java
[解析开始时间 StaticImport.java]
[解析已完成时间 78ms]
[源文件的搜索路径: J:\Java\jdk1.6.0_03\lib\tools.jar,.]
[类文件的搜索路径: J:\Java\jdk1.6.0_03\jre\lib\resources.jar,J:\Java\jdk1.6.0_0
3\jre\lib\rt.jar,J:\Java\jdk1.6.0_03\jre\lib\sunrsasign.jar,J:\Java\jdk1.6.0_03\
jre\lib\jsse.jar,J:\Java\jdk1.6.0_03\jre\lib\jce.jar,J:\Java\jdk1.6.0_03\jre\lib
\charsets.jar,J:\Java\jdk1.6.0_03\jre\classes,J:\Java\jdk1.6.0_03\jre\lib\ext\su
njce_provider.jar,J:\Java\jdk1.6.0_03\jre\lib\ext\sunmscapi.jar,J:\Java\jdk1.6.0
_03\jre\lib\ext\sunpkcs11.jar,J:\Java\jdk1.6.0_03\jre\lib\ext\dnsns.jar,J:\Java\
jdk1.6.0_03\jre\lib\ext\localedata.jar,J:\Java\jdk1.6.0_03\lib\tools.jar,.]
StaticImport.java:2: 找不到符号
符号: 类 Src
位置: 软件包 same1.Src
import static same1.Src.Src.C;
                       ^
StaticImport.java:2: 仅从类和接口静态导入
import static same1.Src.Src.C;
^
[正在装入 J:\Java\jdk1.6.0_03\lib\ct.sym(META-INF/sym/rt.jar/java/lang/Object.cl
ass)]
[正在装入 J:\Java\jdk1.6.0_03\lib\ct.sym(META-INF/sym/rt.jar/java/lang/String.cl
ass)]
[正在检查 same1.Src.StaticImport]
[正在装入 J:\Java\jdk1.6.0_03\lib\ct.sym(META-INF/sym/rt.jar/java/io/Serializabl
e.class)]
[总时间 1031ms]
2 错误

解决方案 »

  1.   

    你没有建目录吧!
    文件得放到 X:\YYY\same1\Src1\ 目录下面
    然后在 X:\YYY 目录下面运行
    java -cp . same1.Src1.StaticImport
      

  2.   

    javac -d . Src
    就可以了
      

  3.   

    高啊,一眼就看出来了:)我折腾一下午才搞定,程序要多练啊哎,javac确实太不地道了,没有"-d . "参数时也不报错,直接把".class"堆在当前目录下
    一点总结,请指点:小结:
    1、有package时,编译命令一定要指 -d 选项,否则不能生成目录,.class直接堆在当前目录下,也不报错,太弱了
       ....\project\StaticImport>javac -g -d . -verbose -Xlint:all StaticImport.java
    2、import可以导入本包的类,尽管是不必要的
    3、import static一定要指到类一级,因为是要导入static方法或field
    4、在import static同包的静态方法后,不能再用全名访问,必须祼奔。包外的则没有这个限制
    5、import有显式导入   ,         可以具体到类
             隐式       , 最后一级可以具体到包 或 类,对于包只能导入这一个包,不能递归其下面所有包
               
    6、import static有显式导入   ,        必须具体到方法 或 field,它们当然是静态的
                    有隐式       ,最后一级必须具体到类           ,导入这个类的所有静态成员