java import   这个问题已经困扰我一下午了,现在把自己在网上找到的几个答案呈现一下,请求大牛相助啊,感激不尽!!!观点一:和C++,C中的include差不多~~~(我认为是错的吧····不过貌似很多人都这么以为)
观点二: import 的功能到此为止,它不像 #include 一样,会将档案内容载入进来。import 只是 请编译器帮你打字(这里用了“只是”),让编译器把没有姓的类别加上姓(即命名空间),并不会把别的文件的程式码写进来。(注:个人感觉就像是C++里面的 using namespace std一样,不加他的话就必须写std::cout,加了他就只需要写cout了。)
观点三:我看网上还有一些说import可以什么定位啊,寻找什么的···
以上的观点哪个是对的呢?或者都错了?
另外,还有个疑惑,请大牛们相助啊:
即: java没有头文件,也没有预编译吧,那么他是怎么处理类声明的呢?比如:我在文件夹a中写了A.java,文件夹b中写了B.java.(注:2个文件属于不同的文件夹)其中A.java中,我调用了B.java里面的某些类。    如果在C++中,这个时候我只需要在A文件中添加include“B.h”就是了。那么相应的在java中,怎么去实现呢? 也就是说A.java在编译的时候怎么去找到B.java里面的相关类的声明和信息?

解决方案 »

  1.   

    java虚拟机会根据import的包路径去查找到那个类然后加载到内存
      

  2.   

    import 只是用来节省输入的。
    javac / classloader 会根据你设置/传入的classpath定位.java/.class文件。
    javac 会在 classpath 寻找对应的 .class 文件,找不到的话,会继续寻找对应的 .java 文件,再找不到就错误退出了。javac 自动将当前路径加到classpath,而java不会自动加上。
      

  3.   

    A.java和B.java不在一个包中时,需要通过import 定位,或者用全限定名.
      

  4.   

    观点一:和C++,C中的include差不多~~~(我认为是错的吧····不过貌似很多人都这么以为)
    作用差不多,语义、用法和编译处理方法上差很多。观点二: import 的功能到此为止,它不像 #include 一样,会将档案内容载入进来。import 只是 请编译器帮你打字(这里用了“只是”),让编译器把没有姓的类别加上姓(即命名空间),并不会把别的文件的程式码写进来。(注:个人感觉就像是C++里面的 using namespace std一样,不加他的话就必须写std::cout,加了他就只需要写cout了。)
    基本正解,但关于C++,标准里面是没有using的,这是M$为受控代码的C++做的扩展。观点三:我看网上还有一些说import可以什么定位啊,寻找什么的···
    这个内容是关于classloader的,和import没太大关系
      

  5.   

    "也就是说A.java在编译的时候怎么去找到B.java里面的相关类的声明和信息?"
    java解析时类与类之间的关联全部是通过常量池来做的,常量池有11中类型,类信息的常量池为CONSTANT_Class_info表,里面存储了符号引用,即某个类的名称,解析这个常量池的时候,java就从classpath中加载这个符号引用所表示的类,于是就关联起来了
      

  6.   


    LZ问的是编译的时候怎样怎样? 结果想要的是程序运行时java解释字节码阶段的知识。晕倒!