import java.awt.Frame;   //为什么这里一定会import?
public class bbbb
{
  public static void main(String args[])
   {
     Frame jf=new Frame();
     System.out.println("bbbb");
   }
}前几天有朋友说,只要classpath下的类,JVM会自动调用.
而Frame在...\lib\tools.jar里边
我的classpath已经包括.可为什么还要import java.awt.Frame呢?
import的是*.java源文件,还是*.class字节码文件.而大家看我这个源文件:
public class A
{
public static void main(String args[])
        {    
B xx = new B();   //b.class 我建在其中一个classpath目录下
System.out.println("wwww ");
}
}这个文件可以被译正确执行的.困惑中...

解决方案 »

  1. 此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【sure2003】截止到2008-07-15 13:32:42的历史汇总数据(不包括此帖):
    发帖的总数量:239                      发帖的总分数:10173                    每贴平均分数:42                       
    回帖的总数量:205                      得分贴总数量:6                        回帖的得分率:2%                       
    结贴的总数量:232                      结贴的总分数:9963                     
    无满意结贴数:2                        无满意结贴分:50                       
    未结的帖子数:7                        未结的总分数:210                      
    结贴的百分比:97.07 %               结分的百分比:97.94 %                  
    无满意结贴率:0.86  %               无满意结分率:0.50  %                  
    值得尊敬
      

  2. import 的是字节码.jar里有包结构的,也就是目录结构.你用winrar解压一下就看到了.所以你只在classpath添加了jar包没用,必须还要告诉编译器你要用这个jar包里哪个目录下的哪个类.(准确来说是哪个包下的哪个类.)比如import java.awt.Frame;就表示你要用那个jar包里的java目录下的awt目录下的Frame类.java.awt.Frame被翻译成java/awt/Frame就是一个路径.
      

  3. 如:
    想使用java.awt.Frame
    你可以在classpath这样设置,tool.jar/java/awt/Frame
    我想这样就不需要import了。不过类有好多多。import就好了。
      

  4. 可以去看看深入java虚拟机那本书。
      

  5. 应该是导入class文件,但是找相关文件的时候是按名字来查找的,不管后缀名,比如本来你要找Test.class ,你却在这个目录下放一个 Test.java,会出现比较有意思的错误。
    其实这些东西对开发用处不是很大,ide可以让你避免这些问题,把精力放在开发上。先用java开发一些大的项目,一些小的问题慢慢积累。
      


  6. //import java.awt.Frame;   为什么这里一定会import?不导入照样用只要你classpath路径正确
    public class bbbb
    {
      public static void main(String args[])
       {
         java.awt.Frame jf=new java.awt.Frame();  //这里就要这么写,麻烦!
         System.out.println("bbbb");
       }
    }
      

  7. 到3楼:
    我改了classpath:
    C:\Program Files\Java\jdk1.6.0\lib\tool.jar\java\awt\Frame
    但是还是无法在去掉import的情况下,编译正确,您试试
      

  8. 说的不客气一点 这就是瞎搞
    -------------------------------public class bbbb
    {
      public static void main(String args[])
       {
         java.awt.Framejf=new java.awt.Frame();
         System.out.println("bbbb");
       }
    }这样就可以在去掉import了import 命令 只是告诉当程序中出现一个类名时 去哪个包下面找这个类
      

  9. 这个跟 tools.jar 有关系吗???哪个不负责任的家伙告诉你的?你把 tools.jar 路径加 ClassPath 里想干吗???
      

  10. public class A
    {
        public static void main(String args[])
            {    
            B xx = new B();   //b.class 我建在其中一个classpath目录下
            System.out.println("wwww ");
        }
    }是在同一个包下吧!
      

  11. 把tools.jar解压开
    再把classpath
    C:\Program Files\Java\jdk1.6.0\lib\tool.jar\java\awt\Frame 换成C:\Program Files\Java\jdk1.6.0\lib\tool\java\awt\Frame 
    试试
      

  12. 你B.class不是处于狭义有包结构 而是default package
      

  13. 我来说两句吧
    "前几天有朋友说,只要classpath下的类,JVM会自动调用,
    而Frame在...\lib\tools.jar里边 我的classpath已经包括.  "
    这句话里面注意:classpath下的“
    对于JVM来说在classpath下的“类”是可见的。“而Frame在...\lib\tools.jar里边 我的classpath已经包括.
    可为什么还要import java.awt.Frame呢? ”
    Frame并没有在classpath的目录下面,而是在tools.jar包里面。换言之Frame是在classpath下tools.jar包"java\awt\Frame"子目录下面,因此要让JVM知道Frame类在哪里必须增加一个classpath到这个目录,在*.java文件中写为“import java.awt.Frame;”“import的是*.java源文件,还是*.class字节码文件. ”import的是字节码
      


  14. public class A
    {
        public static void main(String args[])
            {    
            B xx = new B();   //b.class 我建在其中一个classpath目录下
            System.out.println("wwww ");
        }
    }这样写必须A 和B在一个包下(同一目录下).
      

  15. //import java.awt.Frame;   //为什么这里一定会import?
    public class bbbb
    {
      public static void main(String args[])
       {
         //Frame jf=new Frame();
         java.awt.Frame jf = new java.awt.Frame();//如果不import java.awt.Frame类,则应该在此指明用的哪个类。
         System.out.println("bbbb");
       }
    }
    而你给出的下述java代码,
    public class A
    {
        public static void main(String args[])
            {    
            B xx = new B();   //b.class 我建在其中一个classpath目录下
            System.out.println("wwww ");
        }
    }
    可以成功编译并可以运行,因为类B在B.class文件中,并且已经被你加入到classpath变量中。
      

  16. 不在同一个包下的类就要用import倒入的。加入到classpath内是指你用import倒入一个类,如果这个类不在classpath下那么jvm找不到.class文件,会报错。而对于同一个目录下的类,就不用import导入,编译时候会自动导入的。这个没有为什么,java语言就是这么设计的。并且与执行类在同一个目录下的类默认就在当前classpath下。所以也不用手动加入到classpath下了
      

  17. ..........我先问你一句,你用的那些类属于你当前的这个类吗??
    不属于吧,那么就好比你这个类是个人,其他的类是工具,你要去用它,那你是不是该
    告诉这个人,工具在哪儿??
    你不找到它怎么用他???当你在cmd下的时候,如果执行java xxx当你要用别的类的时候,为什么还要用
    -classpath??java -cp  xxx/xxx;lib/xxx.jar 包名.类名
    为什么要这么用,import就是为了你方便,是一种生明那你学过c语言吧
    为什么要#include ”stdio.h“都是告诉你到哪儿去找,如果你不import,那么你每次在用的时候就要写完整的包路径+类的名称,麻烦不麻烦?人家提供了个import给你用,你竟然还质疑他。
    没人会说你笨,但是肯定你没有理解java一些思想以上是我的理解,希望可以帮到你
      

类似问题 »