`
hch1011
  • 浏览: 49939 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java import的机制

    博客分类:
  • java
阅读更多

java中有两种包的导入机制,总结如下:

单类型导入(single-type-import),              例如 import java.io.File;
按需类型导入(type-import-on-demand),例如 import java.io.*;

这里分析一下这两种导入类型的大致工作原理供大家参考。

单类型导入比较好理解,仅仅导入一个public类或者接口。
对于按需类型导入(  import java.io.*;   ),有人误解为导入一个包下的所有类,其实不然,看名字就知道,他只会按需导入,也就是说它并非导入整个包,而仅仅导入当前类需要使用的类。

既然如此是不是就可以放心的使用按需类型导入呢?非也,非也。
因为单类型导入和按需类型导入对类文件的定位算法是不一样的。java编译器会从启动目录(bootstrap),扩展目录(extension)和用户类路径下去定位需要导入的类,而这些目录进仅仅是给出了类的顶层目录。编译器的类文件定位方法大致可以理解为如下公式:
顶层路径名 \ 包名 \ 文件名.class = 绝对路径
对于单类型导入很简单,因为包明和文件名都已经确定,所以可以一次性查找定位。
对于按需类型导入则比较复杂,编译器会把包名和文件名进行排列组合,然后对所有的可能性进行类文件查找定位。例如:

package com;
import java.io.*;
import java.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语句看起来很长。

以上引用自 http://yuquan-nana.iteye.com/blog/83986

分享到:
评论
1 楼 bingyingao 2012-02-15  
不错,长知识了

相关推荐

    java-package与import机制

    java-package与import机制 java-package与import机制

    最全的Java import的机制JAVA语言

    最全的Java import的机制

    Java深入历险(CH_05.package_与import_机制)

    Java深入历险(CH_05.package_与import_机制)

    Java深度历险\CH_05.package与import机制

    Java深度历险\CH_05.package与import机制,看完之后,让您对加载的路径更清晰

    java的package和import机制原理解析

    主要介绍了java的package和import机制原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    package与import机制.pdf

    package与import机制 基本原则:为什么需要将Java文件和类文件切实安置到其所归属之Package所对应的相对路径下。 为什么要这样做呢?如果你在程序中,用到打包命令package,并且直接编译和执行该程序。

    JAVA2深度历险.

    对JAVA内部机制的一个介绍

    java深度历险 详细讲解了java的package机制等

    package与import机制 用Visual Studio.net来操控Java虚拟机 深入Java 2 SDK 深入类别载入器

    InsideJava(Java深度历险)

    import与package机制的探讨:撰写Java程序的人,绝对会遇到import与package机制。只要明白这个机制的运作原理,你会发现Java是一个设计优良的设计;Ant与Java;Java与Office;Visual Studio.net与Java;Java 2 SDK源...

    chatRoom 聊天室

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; import java.text....

    java Reflection 反射机制 反编译

    import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; public class ReflectionTest { public static void main(String[] args) { Class c = null; try { ...

    java多线程机制 -- 源码详解

    java多线程机制: 例子 1 public class Example1 { static Lefthand left;static Righthand right; public static void main(String args[]) { left=new Lefthand(); //创建两个线程。 right=new Righthand();...

    Java深度历险完整版

    Java深度历险 深入Java 2 SDK 深入类别载入器 Java与MS Office 用Visual Studio.net操控Java虚拟机 package与import机制 Ant 附录A.Java 2 SDK原版码概观

    java反射机制

    import java.lang.reflect.Method; public class DumpMethods { public static void main(String args[]) throws Exception { // 加载并初始化命令行参数指定的类 Class<?> classType = Class.forName(args[0])...

    Java sdk深度历险

    import与package机制的探讨:撰写Java程序的人,绝对会遇到import与package机制。只要明白这个机制的运作原理,你会发现Java是一个设计优良的设计;Ant与Java;Java与Office;Visual Studio.net与Java;Java 2 SDK源...

    java深度历险(读完之后对java会有一个非常深入的理解)

    经典java书籍,此书深入浅出地介绍java,配合大量的实验案例,读起来很轻松,读完之后对java内部机制能有深入的了解,使得java编程调试变得大为轻松。

    java基础面试笔试题及其答案

    1.在Java中,负责对字节代码解释执行的是____。  A、垃圾回收器  B、虚拟机  C、编译器  D、多线程机制  2....  A、Java语言的标识符...在 Java 中,由Java编译器自动导入,而无需在程序中用import导入的包是____。

    反射机制用Java描述下载资料

    反射机制用Java描述下载资料 import java.lang.reflect.Array; public class ArrayTest { public static void main(String[] args){ try{ //创建一个元素类型为String,长度为10的数组 Object arr=Array....

    JAVA深度历险

    import与package机制的探讨:撰写Java程序的人,绝对会遇到import与package机制。只要明白这个机制的运作原理,你会发现Java是一个设计优良的设计;Ant与Java;Java与Office;Visual Studio.net与Java;Java 2 SDK源...

    Java的内存回收机制

    在Java中,它的内存管理包括两方面:内存分配(创建Java对象的时候)和内存回收,这两方面工作都是由JVM自动完成的,降低了Java程序员的学习难度,避免了像C/C++直接操作...  import java.io.Serializable;   pub

Global site tag (gtag.js) - Google Analytics