package与import的区别与联系(原创)

我只是一个java菜鸟,对package与import的理解还不是很透彻,刚刚翻了一些资料查了一下,终于请出了,写出来给大家看看,不对的地方请批评指正!

我们在写代码的时候,通常会这么写

package com.companyname.classname;

import java.lang.String;

ok,在现实生活中,我们会有很多朋友,每个朋友都有自己的名字,刘德华、张学友、欧阳震华(我认识他他不认识我,哈哈~),我们互相称呼的时候,有时候会叫全名,比如“刘德华,明天请我吃饭啊”,或者“学友,下一场演唱会在那里开啊”。

同理,package就是类的姓名。让我们看看上面的语句-“package com.companyname.classname;”,当然我们也可以写成“package companyname.classname;”。package中有“.”,那么在这里“com.companyname”或者“companyname”就是姓,或者可以这么理解,“com.companyname”是复姓,“companyname”是单姓。

在JAVA中,我们可以随意定义package,这样子就不会发生冲突。

那么import呢?刚才也说了,我们和朋友互相称呼的时候,可以呼其全名,也可以省去姓名。来看看这段代码:
java.lang.StringBuffer myBuffer = new java.lang.StringBuffer("213");在这里,我们就称StringBuffer这个类的全名java.lang.StringBuffer,但是每次都这么写是不是很累而且很麻烦啊,没错,你想到了,sun也想到了,该import闪亮登场了。我们可以在代码头部写上"import java.lang.String;",那刚才的那段代码就可以写成
StringBuffer myBuffer = new StringBuffer("213");为什么呢?因为import已经告诉编译器StringBuffer 是姓java.lang.的。

当然也存在刘德华,马德华、张德华,这个时候如果你只是说“德华,你过来一下”,那他们就不知道到底是叫谁了(在java中编译器就报错了)

packageimport

06-26

package 名称就像是我们的姓,而 class 名称就像是我们的名字。package 名称有很多 . 的,就好像是复姓。比如说 java.lang.String,就是复姓 java.lang,名字为 String 的类别;java.io.InputStream 则是复姓 rn  java.io,名字为 InputStream 的类别。 rnrn  Java 会使用 package 这种机制的原因也非常明显,就像我们取姓名一样,光是一间学校的同一届同学中,就有可能会出现不少同名的同学,如果不取姓的话,那学校在处理学生数据,或是同学彼此之间的称呼,就会发生很大的困扰。相同的,全世界的 Java 类别数量,恐怕比台湾人口还多,而且还不断的在成长当中,如果类别不使用套件名称,那在用到相同名称的不同类别时,就会产生极大的困扰。幸运的是,Java 的套件名称我们可以自己取,不像人的姓没有太大的选择 ( 所以有很多同名同姓的 ),如果依照 Sun 的规范来取套件名称,那理论上不同人所取的套件名称不会相同 ( 请参阅 "命名惯例"的相关文章 ),也就不会发生名称冲突的情况。 rnrn  可是问题来了,因为很多套件的名称非常的长,在写程序时,会多打好多字,花费不少时间,比如说: rnrn   java.io.InputStream is = java.lang.System.in; rn   java.io.InputStreamReader isr= new java.io.InputStreamReader(is); rn   java.io.BufferedReader br = new java.io.BufferedReader(isr); rnrn  实在是不美观又麻烦。于是,Sun 想了一个办法,就是 import。 rnrn  这个 import 就是在程序一开头的时候,先说明程序中会用到那些类别的 rn  简称,也就是只称呼名字,不称呼他的姓。首先,在档案开头写: rnrn   import java.lang.System; rn   import java.io.InputStream; rn   import java.io.InputStreamReader; rn   import java.io.BufferedReader; rnrn  这几行说明了这四个姓名的类别,在程序中只用他的名字来称呼,所以当程序中提到 System 就是指 java.lang.System,而 InputStream 就是指 java.io.InputStream,依此类推。于是原来的程序就变成: rnrn   InputStream = System.in; rn   InputStreamReader isr = new InputStreamReader(is); rn   BufferedReader br = new BufferedReader(isr); rnrn  这样看起来是不是清爽多了呢?如果这些类别用的次数很多,那就更能体会到import 的好处了。可是这样还是不够,因为懒是人的天性,还是会有人觉得打太多 import 了也很浪费时间,于是 Sun 又提供了一个方法: rnrn   import java.lang.*; rn   import java.io.*; rnrn  意思就是,等一下程序中提到的没有姓名的类别,不是姓 java.lang,就是姓java.io,如果这两个里面有同样名字的类别,而不幸的你又只用名字称呼这个类别,那编译器仍然会跟你抱怨,因为它还是不知道你说的这个类别指那一 rn  个姓的类别。那可不可以再懒一点呢,只写: rnrn   import java.*; rnrn  历史告诉我们,人可以懒,但不能太懒,这样是不行的。因为那些类别是姓 java.io 而不是姓 java。就像姓『诸葛』的人应该不会喜欢你称他为『诸』先生吧。 rnrn  为甚么我一开始说 import 跟 #include 不同呢?因为 import 的功能到此为止,它不像 #include 一样,会将档案内容载入进来。import 只是请编译器帮你打字,让编译器把没有姓的类别加上姓,并不会把别的文件的程式码写进来。如果你想练习打字,可以不要使用 import,只要在用到类别的时候,用它的全部姓名来称呼它就行了(就像例子一开始那样),跟使用 import 完全没有甚么两样。 rnrn  另外,虽然人不可以太懒,但是 Sun 还是帮我们多偷了一点懒。因为java.lang 这个套件实在是太常太常太常用到了,几乎没有程序不用它的,所以不管你有没有写 import java.lang;,编译器都会自动帮你补上,也就是说编译器只要看到没有姓的类别,它就会自动去 java.lang 里面找找看,看这个类别是不是属于这个套件的。所以我们就不用特别去 rn  import java.lang 了。 rn 感觉介绍的不错,分享给大家

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试

关闭