有些人写了一阵子 Java,可是对于 Java 的 package 跟 import 还是不太了解。很多人以为原始码 .java 文件中的 import 会让编译器把所 import 的程序通通写到编译好的 .class 档案中,或是认为 import 跟 C/C++ 的 #include 相似,实际上,这是错误的观念。
    
    让我们先了解一下,Java 的 package 到底有何用处。
    
    其实,package 名称就像是我们的姓,而 class 名称就像是我们的名字。package 名称有很多 . 的,就好像是复姓。比如说 java.lang.String,就是复姓 java.lang,名字为 String 的类别;java.io.InputStream 则是复姓
    
    java.io,名字为 InputStream 的类别。
    
    Java 会使用 package 这种机制的原因也非常明显,就像我们取姓名一样,光是一间学校的同一届同学中,就有可能会出现不少同名的同学,如果不取姓的话,那学校在处理学生数据,或是同学彼此之间的称呼,就会发生很大的困扰。相同的,全世界的 Java 类别数量,恐怕比台湾人口还多,而且还不断的在成长当中,如果类别不使用套件名称,那在用到相同名称的不同类别时,就会产生极大的困扰。幸运的是,Java 的套件名称我们可以自己取,不像人的姓没有太大的选择 ( 所以有很多同名同姓的 ),如果依照 Sun 的规范来取套件名称,那理论上不同人所取的套件名称不会相同 ( 请参阅 "命名惯例"的相关文章 ),也就不会发生名称冲突的情况。
    
    可是问题来了,因为很多套件的名称非常的长,在写程序时,会多打好多字,花费不少时间,比如说:
    
    java.io.InputStream is = java.lang.System.in;
    
    java.io.InputStreamReader isr= new java.io.InputStreamReader(is);
    
    java.io.BufferedReader br = new java.io.BufferedReader(isr);
    
    实在是不美观又麻烦。于是,Sun 想了一个办法,就是 import.
    
    这个 import 就是在程序一开头的时候,先说明程序中会用到那些类别的
    
    简称,也就是只称呼名字,不称呼他的姓。首先,在档案开头写:
    
    import java.lang.System;
    
    import java.io.InputStream;
    
    import java.io.InputStreamReader;
    
    import java.io.BufferedReader;
    
    这几行说明了这四个姓名的类别,在程序中只用他的名字来称呼,所以当程序中提到 System 就是指 java.lang.System,而 InputStream 就是指 java.io.InputStream,依此类推。于是原来的程序就变成:
    
    InputStream = System.in;
    
    InputStreamReader isr = new InputStreamReader(is);

BufferedReader br = new BufferedReader(isr);
这样看起来是不是清爽多了呢?如果这些类别用的次数很多,那就更能体会到import 的好处了。可是这样还是不够,因为懒是人的天性,还是会有人觉得打太多 import 了也很浪费时间,于是 Sun 又提供了一个方法:
    
    import java.lang.*;
    
    import java.io.*;
    
    意思就是,等一下程序中提到的没有姓名的类别,不是姓 java.lang,就是姓java.io,如果这两个里面有同样名字的类别,而不幸的你又只用名字称呼这个类别,那编译器仍然会跟你抱怨,因为它还是不知道你说的这个类别指那一
    
    个姓的类别。那可不可以再懒一点呢,只写:
    
    import java.*;
    
    历史告诉我们,人可以懒,但不能太懒,这样是不行的。因为那些类别是姓 java.io 而不是姓 java.就像姓「诸葛」的人应该不会喜欢你称他为「诸」先生吧。
    
    为甚么我一开始说 import 跟 #include 不同呢?因为 import 的功能到此为止,它不像 #include 一样,会将档案内容载入进来。import 只是请编译器帮你打字,让编译器把没有姓的类别加上姓,并不会把别的文件的程式码写进来。如果你想练习打字,可以不要使用 import,只要在用到类别的时候,用它的全部姓名来称呼它就行了(就像例子一开始那样),跟使用 import 完全没有甚么两样。
    
    另外,虽然人不可以太懒,但是 Sun 还是帮我们多偷了一点懒。因为java.lang 这个套件实在是太常太常太常用到了,几乎没有程序不用它的,所以不管你有没有写 import java.lang;,编译器都会自动帮你补上,也就是说编译器只要看到没有姓的类别,它就会自动去 java.lang 里面找找看,看这个类别是不是属于这个套件的。所以我们就不用特别去import java.lang了。

摘自中国IT实验室

java中import的使用相关推荐

  1. java中import用法

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

  2. Java中import语句的作用

    Java中import语句的作用 为了能够使用某一个包的成员,我们需要在 Java 程序中明确导入该包.使用"import"语句可完成此功能.在 java 源文件中 import ...

  3. Java中import及package的用法

    有些人写了一阵子 Java,可是对於 Java 的 package 跟 import 还是不  太了解很多人以為原始码 .java 档案中的 import 会让编译器把所 import  的程式通通写 ...

  4. Java 中import的用法,以及类的种类

    问: 已经定义了一个包Human:包里定义一个类Human  1):  我在这个包外重新写个程序,import整个Human包,但是Human 不是公共的,为什么啊,不是引用了整个包后就可以使用了的么 ...

  5. java中import机制(指定import和import *的区别)

    java中有两种包的导入机制,总结如下: 单类型导入(single-type-import),              例如 import java.io.File; 按需类型导入(type-imp ...

  6. java中import两种导入类型比较

    转载地址:http://blog.sina.com.cn/s/blog_56f69c6601016erf.html import导入声明可分为两中:  1>单类型导入(single-type-i ...

  7. Java中import和import static的区别

    一.import ①.导入某个包中的任何一个声明为public的类或者接口 ②.仅导入声明目录下面的类或者接口而不导入子包下的 ③.默认会导入java.lang包下的 二.import static ...

  8. java中import一个项目时出现中文全是繁体字时的解决情况

    java的注释出来了繁体字,是Eclipse/MyEclipse编码与java文件不匹配出现乱码(繁体字)导致的.可以按如下两种方式修改: 修改java文件的编码方式,可以按以下步骤: 选中文件右键- ...

  9. 在java中使用关键字导入包_java中import关键字的使用方法

    java中import关键字的使用方法 发布时间:2020-06-26 15:05:44 来源:亿速云 阅读:96 作者:Leah 这篇文章将为大家详细讲解有关java中import关键字的使用方法, ...

最新文章

  1. python测试用例管理工具_三款开源测试管理工具推荐
  2. 怎么样处理好学科竞赛与文化课学习之间的关系,,学习下,,
  3. java分数怎么保存到文件_Java如何将控制台上的结果保存到文件
  4. OGC之路(1) 之 WMS标准学习总结
  5. 100多千克的柠檬电池车可以开吗?
  6. [Leedcode][JAVA][第56题][合并区间][数组][贪心算法]
  7. web监听器监听mysql_JavaWEB开发15——ListenerListener
  8. linux 防火墙配置命令
  9. torch.nn.Module.eval
  10. 使用generator自动生成mybatis model、mapper.xml、mapper等(转)
  11. 连续状态空间模型离散化
  12. 恒德室内智能照明控制系统电路设计
  13. python编程基础及应用 重庆大学出版社_大学计算机基础与应用
  14. 手机总是自动重启怎么处理
  15. BUUCTF [GXYCTF2019] 禁止套娃
  16. Linux中的网络服务初步---FTP服务器、Web服务器
  17. KEIL的hex与bin文件自动生成到指定目录
  18. CNS积分 全国首款基于商品交易应用场景的区块链产品
  19. 靶机渗透练习41-Empire Lupin One
  20. 2015年“10.1”假期游玩——杭州(3天2夜),上海(2天1夜)

热门文章

  1. HTTP Error 500.19 – Internal Server Error – 0x80070021 (IIS 8.5)
  2. sqlserver数据库备份
  3. 随想录(smp的一些注意事项)
  4. php 查找文件 替换内容,关于php:文件中查找和替换功能困扰
  5. cba篮球暂停次数和时间_为什么足球赛的观赏性比篮球更强?这三点是主要原因...
  6. python给用户打标签_用Python实现RFM模型——互联网产品用户分层必备技巧
  7. mysql 千万数据分页_MySQL处理千万级数据查询、分页
  8. 比较三个数大小PHP代码,php 写程序求三个数的最大值
  9. 用c语言输出魔方阵答案,如何用C语言输出一个1—16 组成的4*4的魔方阵
  10. django jsonresponse_0基础掌握Django框架(29)HttpResponse对象