A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 袁培育 中级黑马   /  2012-4-20 09:10  /  2406 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如题,我知道在自己要调用那些包里的类时就要导入该类所在的包,这些都是自己编写的包,那么jdk自带的包什么时候导入呢?学习String、StringBuffer时都没有导入java.lang.*,为什么在学习collection时要导入java.util.*呢?他们不都是jdk提供的包吗?

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

2 个回复

倒序浏览
其实String、StringBuffer也导入了java.lang.*,因为java.lang.*包是默认导入的,是一个例外。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
不管什么情况下只要用到了别的包中的类,都是需要到如相应的包的,只是String类是个常用的类,这里java官方就在你使用String类时,默认的导入了java.lang.*包。
在其他情况下,需要导入包时,你可以在编写完相应的类后,然后按快捷键:ctrl+shift+O,Eclipse就会自动的导入相应的包的。
另外在发个关于java包的:java中有两种包的导入机制, 总结如下:
  单类型导入(single-type-import), 例如import java. io. File;
  按需类型导入(type-import-on-demand), 例如 import java. io. *;
  关于这两种导入类型大家各有所爱, 众说纷纭。 这里分析一下这两种导入类型的大致工作原理供大家参考。
  单类型导入比较好理解, 仅仅导入一个public类或许接口。 而对于按需类型导入, 有人曲解为导入一个包下的所有类, 其实不然, 看名字就知道, 他只会按需导入, 也就是说它并非导入整个包, 而仅仅导入当前类需要运用的类。
  既然如此是不是就可以放心的运用按需类型导入呢?非也, 非也。 由于单类型导入和按需类型导入对类文件的定位算法是不一样的。 java编译器会从启动目录(bootstrap), 扩展目录(extension)和用户类途径下去定位需要导入的类, 而这些目录进仅仅是给出了类的顶层目录。 编译器的类文件定位方法大致可以理解为如下公式:
  顶层途径名 \ 包名 \ 文件名. class = 绝对途径
  对于单类型导入很简单, 由于包明和文件名都曾经确定, 所以可以一次性查找定位。
  对于按需类型导入则比较复杂, 编译器会把包名和文件名停止陈列组合, 然后对所有的可能性停止类文件查找定位。 例如:
  packagecom;   importjava. io. *;   importjava. util. *;
  当你的类文件中用到了File类, 那么可能出现File类的地方如下
  File \\ File类属于无名包, 就是说File类没有package语句, 编译器会首先搜索无名包
  com. File \\ File类属于当前包
  java. lang. File \\编译器会自动导入java. lang包
  java. io. File
  java. util. File
  需要注意的地方就是, 编译器找到java. io. File类之后并不会中止下一步的寻觅, 而要把所有的可能性都查找完以确定是否有类导入抵触。 假定此时的顶层途径有三个, 那么编译器就会停止3*5=15次查找。
  注意:假设在查找完成后, 编译器发现了两个同名的类, 那么就会报错。 要删除你不用的那个类, 然后再编译。
  理解以上原理之后, 我们可以得出这样的结论:按需类型导入是绝对不会降低Java代码的执行效率的, 但会影响到Java代码的编译速度。
  查看JDK的源代码就知道SUN的软件工程师一般不会运用按需类型导入。 由于运用单类型导入至多有以下两点益处:
  1。 提高编译速度。
  2。 避免命名抵触。 (例如:当你import java. awt. *;import java. util. *后, 运用List的时分编译器将会出编译错误)
  当然,运用单类型导入会运用你的import语句看起来很长。文章由Gainreel内衣旗舰店整理,收集辛苦,希望能保留出处。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马