知识大全 再议package包的问题

Posted 文件

篇首语:枕上从妨一夜睡,灯前读尽十年诗。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 再议package包的问题相关的知识,希望对你有一定的参考价值。

   通常package包会把很多人搞糊涂 于是我翻阅资料发现 java编程思想 中有比较详尽  的解释于是与大家分享 希望能祝你一臂之力     package解析自己为机器上的一个目录 这样一来 Java程序运行并需要装载 class文件的时候 它就可以找到 class文件驻留的那个目录   Java解释器的工作程序如下 首先 它找到环境变量CLASSPATH(将Java或者具有Java解释能力的工具——如浏览器——安装到机器中时 通过操作系统进行设定) CLASSPATH包含了一个或多个目录 它们作为一种特殊的 根 使用 从这里展开对 class文件的搜索 从那个根开始 解释器会寻找包名 并将每个点号(句点)替换成一个斜杠 从而生成从CLASSPATH根开始的一个路径名(所以package foo bar baz会变成foo\\bar\\baz或者foo/bar/baz 具体是正斜杠还是反斜杠由操作系统决定) 随后将它们连接到一起 成为CLASSPATH内的各个条目(入口) 以后搜索 class文件时 就可从这些地方开始查找与准备创建的类名对应的名字 此外 它也会搜索一些标准目录——这些目录与Java解释器驻留的地方有关   为进一步理解这个问题 下面以我自己的域名为例 它是 将其反转过来后 bruceeckel就为我的类创建了独一无二的全局名称( edu net等扩展名以前在Java包中都是大写的 但自Java 以来 这种情况已发生了变化 现在整个包名都是小写的) 由于决定创建一个名为util的库 我可以进一步地分割它 所以最后得到的包名如下   package bruceeckel util;  现在 可将这个包名作为下述两个文件的 命名空间 使用     //: Vector java  // Creating a package  package bruceeckel util;    public class Vector    public Vector()     System out println(     bruceeckel util Vector );      ///:~    创建自己的包时 要求package语句必须是文件中的第一个 非注释 代码 第二个文件表面看起来是类似的     //: List java  // Creating a package   package bruceeckel util;    public class List    public List()     System out println(     bruceeckel util List );      ///:~    这两个文件都置于我自己系统的一个子目录中   C:\\DOC\\JavaT\\\\bruceeckel\\util  若通过它往回走 就会发现包名 bruceeckel util 但路径的第一部分又是什么呢?这是由CLASSPATH环境变量决定的 在我的机器上 它是   CLASSPATH= ;D:\\JAVA\\LIB;C:\\DOC\\JavaT  可以看出 CLASSPATH里能包含大量备用的搜索路径 然而 使用JAR文件时要注意一个问题 必须将JAR文件的名字置于类路径里 而不仅仅是它所在的路径 所以对一个名为grape jar的JAR文件来说 我们的类路径需要包括   CLASSPATH= ;D:\\JAVA\\LIB;C:\\flavors\\grape jar  正确设置好类路径后 可将下面这个文件置于任何目录里(若在执行该程序时遇到麻烦 请参见第 章的 小节 赋值 )     //: LibTest java  // Uses the library  package c ;  import bruceeckel util *;    public class LibTest    public static void main(String[] args)     Vector v = new Vector();    List l = new List();      ///:~    编译器遇到import语句后 它会搜索由CLASSPATH指定的目录 查找子目录\\bruceeckel\\util 然后查找名称适当的已编译文件(对于Vector是Vector class 对于List则是List class) 注意Vector和List内无论类还是需要的方法都必须设为public   恋灳   自动编译  为导入的类首次创建一个对象时(或者访问一个类的static成员时) 编译器会在适当的目录里寻找同名的 class文件(所以如果创建类X的一个对象 就应该是X class) 若只发现X class 它就是必须使用的那一个类 然而 如果它在相同的目录中还发现了一个X java 编译器就会比较两个文件的日期标记 如果X java比X class新 就会自动编译X java 生成一个最新的X class   对于一个特定的类 或在与它同名的 java文件中没有找到它 就会对那个类采取上述的处理      冲突  若通过*导入了两个库 而且它们包括相同的名字 这时会出现什么情况呢?例如 假定一个程序使用了下述导入语句   import bruceeckel util *;  import java util *;  由于java util *也包含了一个Vector类 所以这会造成潜在的冲突 然而 只要冲突并不真的发生 那么就不会产生任何问题——这当然是最理想的情况 因为否则的话 就需要进行大量编程工作 防范那些可能可能永远也不会发生的冲突   如现在试着生成一个Vector 就肯定会发生冲突 如下所示   Vector v = new Vector();  它引用的到底是哪个Vector类呢?编译器对这个问题没有答案 读者也不可能知道 所以编译器会报告一个错误 强迫我们进行明确的说明 例如 假设我想使用标准的Java Vector 那么必须象下面这样编程   java util Vector v = new java util Vector();  由于它(与CLASSPATH一起)完整指定了那个Vector的位置 所以不再需要import java util *语句 除非还想使用来自java util的其他东西      cha138/Article/program/Java/JSP/201311/19626

相关参考

知识大全 java经典问题大集合

  作用域publicprivateprotected以及不写时的区别  答区别如下  作用域当前类同一package子孙类其他package  public√√√√  protected√√√×  

知识大全 Java包的停用

Java包的停用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!    大家应注意这样一个问题每次创

知识大全 Annotation之ElementType.PACKAGE

Annotation之ElementType.PACKAGE  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 Java 中的 ClassPath 和 Package

Java中的ClassPath和Package  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 Java的ClassLoader与Package机制

Java的ClassLoader与Package机制  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 Oracle的Package的作用及用法

Oracle的Package的作用及用法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  公司需求

含有小棕包的处方

小棕包(别名小天蒜、细毒蒜、牛挣药、绿葱、小毒蒜、披麻草),辛;微苦;寒;有毒,散瘀止痛;敛疮杀虫。主跌打损伤;骨折;外伤出血;褥疮;疥癣,本文介绍了含有小棕包的处方1个。处方1、葱粥处方绿葱根(即黄

含有网纹灰包的处方

网纹灰包(别名马勃),辛,平。消肿,止血,清肺,利喉,解毒。本文介绍了含有网纹灰包的处方54个。处方1、僵蚕散别名三白散处方僵蚕1条,马勃拳大者(瓦上揩成末),白矾皂子大(生),天南星1个(炮)。制法

家庭防震包的基本物品不包括()。

家庭防震包的基本物品不包括()。A.矿泉水B.保鲜食品C.半导体收音机D.贵重的首饰【参考答案】D[拓展知识]避雷击时正确的姿势是()。A.站立或快速跑动B.手拉手站在一起C.双手抱膝并蹲下尽量低头注

家庭防震包的基本物品不包括()。

家庭防震包的基本物品不包括()。A.矿泉水B.保鲜食品C.半导体收音机D.贵重的首饰【参考答案】D[拓展知识]避雷击时正确的姿势是()。A.站立或快速跑动B.手拉手站在一起C.双手抱膝并蹲下尽量低头注