Java中包的机制

随着程序代码撰写越来越多,程序内容越来越大,您会发现管理程序中的变量名称、函式名称、类别名称也会是一件麻烦的事,尤其是一些同名问题的发生,例如在程序中,您也许会定义一个Point类别代表2维空间的点,也许在程序的某个地方,您也会定义一个 Point类别来表示一个3维空间的点,其它像函式同名、共享变量同名的情况也可能发生,当这种情况发生时,其中一个定义就可能将另一个定义给覆写掉了。 

Java提供package机制,它就像是一个管理容器,可以将您所定义的名称区隔管理在package下,而不会有相互冲突的发生,例如您定义了一个 dimension2d与dimension3d的package,在它们之下都有一个Point类别,但由于属于不同的package,所以这两个名称并不会有所冲突。 

Java平台的classes是被储存在Java安装目录的jre/lib/下的rt.jar,另外额外的第三组件(third-party)可以放在/jre/lib/ext/中,在我们之前的例子中,使用import就是在告知编译器我们的类别位于哪一个package下,这些类别必须设定好CLASSPATH才可以被编译器找到,预设上是jre/lib/下的rt.jar、jre/lib/ext/中相关扩充组件与现行工作目录。 

Java的package被设计为与档案系统结构相对应,如果您的package设定是caterpillar.demo,则该类别应该在指定目录的caterpillar/demo/下可以找到,为了要能建立与package相对应的档案系统结构,我们在编译时可以加入-d参数,并指定要建立在哪一个目录之下。 

下面这个程序使用package关键词来建立package以管理我们所定义的类别: 
代码: 
package caterpillar.demo; 
                                                                                
public class UsePackage { 
    public static void main(String[] args) { 
        System.out.println("Hello! World!"
    } 



在编译时我们使用以下的指令: 
代码: 
$ javac -d . UsePackage.java 


我们在编译时使用-d参数,并指定在现行目录 "." 中建立档案与系统结构,则编译完成之后,在现行目录中会出现caterpillar/demo/目录,而当中有一个UsePackage.class档案,在编译完成之后,package的指定就成为class名称的一部份了,我们在执行时可以这么下指令: 
代码: 
$ java caterpillar.demo.UsePackage 
Hello! World! 


我们可以为类别建立package管理,我们举下面的例子来说: 
代码: 
package caterpillar.demo; 
                                                                                
public class Point2D { 
    private int x, y; 
                                                                                
    public Point2D() {x = 0; y = 0;} 
    public Point2D(int x, int y) {this.x = x; this.y = y;} 
    public int getX() {return x;} 
    public int getY() {return y;} 



这个类别建立在Point2D.java档案中,我们可以先用以下的指令来编译它: 
代码: 
$ javac -d .  Point2D.java 


我们之前说过,package名称为类别名称的一部份,除非您重新编译类别,否则的话无法改变这个名称,为了要使用这个类别,方法之一是使用完全描述(fully qualified)名称,也就是完整的指出package与类别名称,例如: 
代码: 
public class UsePackage { 
    public static void main(String[] args) { 
        caterpillar.demo.Point2D p1 = new 
            caterpillar.demo.Point2D(10, 20); 
                                                                                
        System.out.println("p1: (x, y) = (" + 
            p1.getX()+ ", " + p1.getY() + " "
    } 



当然这个方法在使用上不是很方便,我们可以使用import关键词,告知我们要使用的类别是位于哪一个package之下,例如: 
代码: 
import caterpillar.demo.*; 
                                                                                
public class UsePackage { 
    public static void main(String[] args) { 
        Point2D p1 = new Point2D(10, 20); 
                                                                                
        System.out.println("p1: (x, y) = (" + 
            p1.getX()+ ", " + p1.getY() + " "
    } 



上面两个程序的执行结果都是相同的: 
代码: 
$ java UsePackage 
p1: (x, y) = (10, 20) 


注意如果您提供的类别若不位于相同的package中,您的类别必须宣告为public,若不宣告则类别预设只能于同一个package中被存取,例如将之前Point2D类别的public拿掉,则编译UsePackage.java档案时,会出现以下的错误: 
代码: 
$ javac UsePackage.java 
UsePackage.java:5: caterpillar.demo.Point2D is not public in caterpillar.demo; cannot be accessed from outside package 


要存取package的class也与CLASSPATH的设定有关,建议您也看看官方有关于设定CLASSPATH的文章,您对package的了解会更深入: 
http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/classpath.html 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用介绍 9-2 StringBuffer和String Builder 9-3 Rintime的使用 9-4 日期简介 9-5 java程序国际化的实现 9-6 Random和Math 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分 10-8 自定义异常 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现 11-4 List接口实现 11-5 Map接口 11-6 Collections 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合的同步问题 12-6 用Timer调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注型 16-3 自定义标注型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值