2012-04-27
142-149/913
Java编程思想第四版——第十八天
第6章 访问权限控制
访问控制(或隐藏具体实现)与“最初的实现并不恰当”有关。
重构即重写代码,以使得它更可读、更易理解,并因此而更具可维护性。
面向对象设计中需要考虑的一个基本问题:如何把变动的事物与保持不变的事物区分开来。
访问权限从最大到最小:public、protected、包访问权限(没有关键词)、private。
C语言访问事物不受任何限制。
访问权限因类是存在于一个相同的包,还是存在于一个单独的包而受到影响。
理解访问权限修饰词的全部含义,要学习如何将类库构件置于包中。
6.1 包:库单元
包内包含有一组类,它们在单一的名字空间之下被组织在了一起。
使用全名使程序变得冗长,可以使用import关键字导入类。使用*适配,可以导入包下所有的类。
之所以要导入,是要提供一个管理名字空间的机制。所有类成员的名称都是彼此隔离的。
编写一个java源代码文件,此文件通常称为编译单元(有时也被称为转译单元)。每个编译单元都必须有一个后缀名.java,而在编译单元内则可以有一个public类,该类的名称必须与文件的名称相同(包括大小写,但不包括文件的后缀名.java)。每个编译单元只能有一个public类,否则编译器就不会接受。如果该编译单元之中还有额外的类的话,在包之外的世界是无法看见这些类的,它们不是public类,它们主要用来为主public类提供支持。
6.1.1代码组织
编译一个.java文件,在java文件中的每个类都会有一个输出文件,该输出文件的名称与.java文件中每个类的名称相同,只是多了一个后缀名.class。编译少量.java文件,可能会得到大量的.class文件。
编译型语言:编译器产生一个中间文件(通常是一个obj文件),然后再与通过链接器(用以创建一个可执行文件)或类库产生器(librarian,用以创建一个类库)产生的其他同类文件捆绑在一起。
这不是java的工作方式,java可运行程序是一组可以打包并压缩为一个java文档文件(JAR,使用java的jar文档生成器)的.class文件。Java解释器负责这些文件的查找、装载和解释。
类库实际上市一组类文件,其中每个文件都有一个public类,以及任意数量的非public类。每个文件都有一个构件,如果希望这些构件(每一个都有它们自己的独立的.java和.class文件)从属于同一个群组,可以使用关键字package。Package语句必须是文件中除注释以外的第一句程序代码。
例如:package access;声明该编译单元是名为access的类库的一部分。
Java包的命名规则全部使用小写字母,包括中间的字也是如此。
Package和import关键字允许做的,是将单一的全局名字空间分割开,使得无论多少人使用internet以及java开始编写类,都不会出现名称冲突问题。
6.1.2 创建独一无二的包名
将特定包的所有.class文件都置于一个目录下,利用操作系统的层次化的文件结构来解决混乱问题一种方式,另一种方式是通过jar工具。
将所有的文件收入一个子目录还可以解决另外两个问题:创建独一无二的名称以及怎样查找有可能隐藏于目录结构中某处的类。这些任务是通过将.class文件所在的路径位置编码成package的名称来实现的。
把package名称分解为机器上的一个目录,当java程序运行并且需要加载.class文件的时候,就可以确定.class文件在目录上所处的位置。
Java解释器的运行过程:首先,找出环境变量CLASSPATH(可以通过操作系统来设置,有时也可通过安装程序-用来在机器上安装java或基于java的工具-来设置)。CLASSPATH包含一个或多个目录,用作查找.class文件的根目录。从根目录开始,解释器获取包的名称并将每个句点替换成反斜杠,以从CLASSPATH根中产生一个路径名称(.转换正斜杠还是反斜杠取决于操作系统)。得到的路径会与CLASSPATH中的各个不同的项相连接,解释器就在这些目录中查找所要创建的类名称相关的.class文件。(解释器还会去查找某些涉及java解释器所在位置的标准目录。)
CLASSPATHk可以包含多个可供选择的查询路径:
CLASSPATH=.;D\JAVA\LIB;C:\DOC\javaT
使用JAR文件时会有一点变化,必须在类路径中将JAR文件的实际名称写清楚,而不仅指明它所在位置的目录:
CLASSPATH=.;D\JAVA\LIB;C:\flavors\grape.jar
编译器碰到import语句,就开始在CLASSPATH所指定的目录中查找,让后从已编译的文件中找出名称相符者。
冲突:有时候import使用*适配时,可能引起冲突,两个不同的包下有相同名字的类。所以除非还要使用一个包中的其他东西,否则就没有必要使用*通配。
6.1.3 定制工具库
可以创建自己的工具库来减少或消除重复的程序代码。
创建了有用的新工具,都可以添加到自己的类库中,形成一个积累。
6.1.3 用import改变行为
Java没有C的条件编译功能,该功能可以不必更改任何程序代码,就能切换开关并产生不同的行为。Java去掉此功能的原因可能是因为C在绝大多数情况下是用此功能来解决跨平台问题的,即程序代码的不同部分是根据不同的平台来编译的。Java自身可以自动跨越不同的平台,这个功能对java而言没有必要。
条件编译的的用途:调试。调试功能在开发过程中是开启的,而在发布的产品中是禁用的。可以通过修改被导入的package的方法来实现这一目的,修改的方法是将程序中用到的代码从调试版改为发布版。这一技术可以适用于任何种类的条件代码。
6.1.5 对使用包的忠告
务必记住,无论何时创建包,都已经在给定包的名称的时候隐含地指定了目录结构。这个包必须位于其名称所指定的目录之中,而该目录必须是在以CLASSPATH开始的目录中可以查询到的。
编译过的代码通常放置在与源代码的不同目录中,但是必须保证JVN使用CLASSPATH可以找到该路径。
142-149/913
Java编程思想第四版——第十八天
第6章 访问权限控制
访问控制(或隐藏具体实现)与“最初的实现并不恰当”有关。
重构即重写代码,以使得它更可读、更易理解,并因此而更具可维护性。
面向对象设计中需要考虑的一个基本问题:如何把变动的事物与保持不变的事物区分开来。
访问权限从最大到最小:public、protected、包访问权限(没有关键词)、private。
C语言访问事物不受任何限制。
访问权限因类是存在于一个相同的包,还是存在于一个单独的包而受到影响。
理解访问权限修饰词的全部含义,要学习如何将类库构件置于包中。
6.1 包:库单元
包内包含有一组类,它们在单一的名字空间之下被组织在了一起。
使用全名使程序变得冗长,可以使用import关键字导入类。使用*适配,可以导入包下所有的类。
之所以要导入,是要提供一个管理名字空间的机制。所有类成员的名称都是彼此隔离的。
编写一个java源代码文件,此文件通常称为编译单元(有时也被称为转译单元)。每个编译单元都必须有一个后缀名.java,而在编译单元内则可以有一个public类,该类的名称必须与文件的名称相同(包括大小写,但不包括文件的后缀名.java)。每个编译单元只能有一个public类,否则编译器就不会接受。如果该编译单元之中还有额外的类的话,在包之外的世界是无法看见这些类的,它们不是public类,它们主要用来为主public类提供支持。
6.1.1代码组织
编译一个.java文件,在java文件中的每个类都会有一个输出文件,该输出文件的名称与.java文件中每个类的名称相同,只是多了一个后缀名.class。编译少量.java文件,可能会得到大量的.class文件。
编译型语言:编译器产生一个中间文件(通常是一个obj文件),然后再与通过链接器(用以创建一个可执行文件)或类库产生器(librarian,用以创建一个类库)产生的其他同类文件捆绑在一起。
这不是java的工作方式,java可运行程序是一组可以打包并压缩为一个java文档文件(JAR,使用java的jar文档生成器)的.class文件。Java解释器负责这些文件的查找、装载和解释。
类库实际上市一组类文件,其中每个文件都有一个public类,以及任意数量的非public类。每个文件都有一个构件,如果希望这些构件(每一个都有它们自己的独立的.java和.class文件)从属于同一个群组,可以使用关键字package。Package语句必须是文件中除注释以外的第一句程序代码。
例如:package access;声明该编译单元是名为access的类库的一部分。
Java包的命名规则全部使用小写字母,包括中间的字也是如此。
Package和import关键字允许做的,是将单一的全局名字空间分割开,使得无论多少人使用internet以及java开始编写类,都不会出现名称冲突问题。
6.1.2 创建独一无二的包名
将特定包的所有.class文件都置于一个目录下,利用操作系统的层次化的文件结构来解决混乱问题一种方式,另一种方式是通过jar工具。
将所有的文件收入一个子目录还可以解决另外两个问题:创建独一无二的名称以及怎样查找有可能隐藏于目录结构中某处的类。这些任务是通过将.class文件所在的路径位置编码成package的名称来实现的。
把package名称分解为机器上的一个目录,当java程序运行并且需要加载.class文件的时候,就可以确定.class文件在目录上所处的位置。
Java解释器的运行过程:首先,找出环境变量CLASSPATH(可以通过操作系统来设置,有时也可通过安装程序-用来在机器上安装java或基于java的工具-来设置)。CLASSPATH包含一个或多个目录,用作查找.class文件的根目录。从根目录开始,解释器获取包的名称并将每个句点替换成反斜杠,以从CLASSPATH根中产生一个路径名称(.转换正斜杠还是反斜杠取决于操作系统)。得到的路径会与CLASSPATH中的各个不同的项相连接,解释器就在这些目录中查找所要创建的类名称相关的.class文件。(解释器还会去查找某些涉及java解释器所在位置的标准目录。)
CLASSPATHk可以包含多个可供选择的查询路径:
CLASSPATH=.;D\JAVA\LIB;C:\DOC\javaT
使用JAR文件时会有一点变化,必须在类路径中将JAR文件的实际名称写清楚,而不仅指明它所在位置的目录:
CLASSPATH=.;D\JAVA\LIB;C:\flavors\grape.jar
编译器碰到import语句,就开始在CLASSPATH所指定的目录中查找,让后从已编译的文件中找出名称相符者。
冲突:有时候import使用*适配时,可能引起冲突,两个不同的包下有相同名字的类。所以除非还要使用一个包中的其他东西,否则就没有必要使用*通配。
6.1.3 定制工具库
可以创建自己的工具库来减少或消除重复的程序代码。
创建了有用的新工具,都可以添加到自己的类库中,形成一个积累。
6.1.3 用import改变行为
Java没有C的条件编译功能,该功能可以不必更改任何程序代码,就能切换开关并产生不同的行为。Java去掉此功能的原因可能是因为C在绝大多数情况下是用此功能来解决跨平台问题的,即程序代码的不同部分是根据不同的平台来编译的。Java自身可以自动跨越不同的平台,这个功能对java而言没有必要。
条件编译的的用途:调试。调试功能在开发过程中是开启的,而在发布的产品中是禁用的。可以通过修改被导入的package的方法来实现这一目的,修改的方法是将程序中用到的代码从调试版改为发布版。这一技术可以适用于任何种类的条件代码。
6.1.5 对使用包的忠告
务必记住,无论何时创建包,都已经在给定包的名称的时候隐含地指定了目录结构。这个包必须位于其名称所指定的目录之中,而该目录必须是在以CLASSPATH开始的目录中可以查询到的。
编译过的代码通常放置在与源代码的不同目录中,但是必须保证JVN使用CLASSPATH可以找到该路径。
发表评论
-
Java编程思想第四版——第二十一天
2012-05-04 12:56 5772012-05-04 163-170/913 Java编 ... -
Java编程思想第四版——第二十天
2012-05-03 13:45 7022012-05-03 158-163/913 Java编程思 ... -
Java编程思想第四版——第十九天
2012-05-02 11:08 8162012-05-02 149-158/913 Java编程思 ... -
Java编程思想第四版——第十七天
2012-04-25 11:18 7422012-04-25 138-142/913 Java编程思 ... -
Java编程思想第四版——第十六天
2012-04-24 13:50 7502012-04-24 131-138/913 Java编 ... -
Java编程思想第四版——第十五天
2012-04-23 17:14 7552012-04-23 121-131/913 Java编程思 ... -
Java编程思想第四版——第十四天
2012-04-19 11:28 6252012-04-19 118-121/913 Java编程思 ... -
Java编程思想第四版——第十三天
2012-04-18 12:08 6662012-04-18 108-118/913 Java编 ... -
Java编程思想第四版——第十二天
2012-04-09 10:58 7342012-04-09 102-108/913 Java编 ... -
Java编程思想第四版——第十一天
2012-04-05 12:21 8192012-04-05 Java编程思想第四版——第十一天 ... -
Java编程思想第四版——第十天
2012-03-31 12:03 5592012-03-31 97-102/913 Java编程思想 ... -
Java编程思想第四版——第九天
2012-03-30 14:59 6552012-03-30 80-97/913 Java编程思想第 ... -
Java编程思想第四版——第八天
2012-03-29 12:09 4832012-03-29 76-80/913 3.6 自动递增和 ... -
Java编程思想第四版——第七天
2012-03-28 12:24 6572012-03-28 70-76/913 昨天找 ... -
Java编程思想第四版——第六天
2012-03-27 13:02 5292012-03-27 66-70/913 最近两 ... -
Java编程思想第四版——第五天
2012-03-23 15:09 9452012-03-23 60-66/913 2.5 方法、参数 ... -
Java编程思想第四版——第四天
2012-03-22 12:41 5892012-03-22 54-60/913 第二章 ... -
Java编程思想第四版——第三天
2012-03-21 12:40 5702012-03-21 47-54/913 1.12 并 ... -
Java编程思想第四版——第二天
2012-03-20 13:54 730今天本来以为进度可以 ... -
Java编程思想第四版——第一天
2012-03-19 15:57 784Java已经丢手一年了 ...
相关推荐
- **第四章:树** —— 深入讨论了树的各种类型(如二叉树、平衡树等)及其操作,如遍历、插入和删除。 - **第五章:散列** —— 介绍了散列表的工作原理、散列函数的设计以及处理冲突的方法。 - **第六章:优先队列...
提高部分从第十一章至第十六章,重点关注Java语言在实际编程中的高级应用,旨在帮助读者掌握更复杂的编程技巧,以便进行大型Java应用程序的开发。这部分包括: 1. **对象容器类**:第十一章讲解了如何使用Java提供...
- **1996年1月:** 第一个Java开发工具包(JDK)——JDK 1.0发布,开启了Java编程的新纪元。 - **1996年4月:** 主要的操作系统供应商宣布支持Java技术,增强了Java的影响力。 - **1997年2月18日:** JDK 1.1发布,...
《Android源码——Tools4U源码_new_18.zip》是针对Android系统的一个开源项目,其中包含了Android应用开发中的工具集。这个压缩包主要由三部分组成:两张图片资源和一个源码文件,让我们逐一解析这些内容。 首先,...
2. **加权图**:第十四章重点讨论了加权图的特性以及基于加权图的最短路径算法,如迪杰斯特拉算法、弗洛伊德算法等。 #### 六、综合运用 1. **何时使用何种数据结构**:最后一部分总结了在不同情况下选择合适的...
* [美]埃克尔 著.Java 编程思想 * 柏亚军.JSP 编程基础及应用实例集锦 * 周影.网络编程语言 JSP 实例教程 * [美]范斯瓦尼(Vasani,V)著 徐小青.路晓村 译,MySQL 完全手册 * [美]吉尔费伦(Glifillan,I)著 王军 ...
根据提供的文件信息,我们可以归纳出该书《数据结构与算法分析_java语言描述》的主要知识点及其相关内容。本书由Mark Allen Weiss撰写,是计算机科学领域内学习数据结构与算法的经典教材之一。接下来,我们将按照各...
5.8 版本 6:第四次优化:缓存(Caching) 5.9 从故事中学到的 第6章 集成测试框架:脆弱之美 6.1. 三个类搞定一个验收测试框架 6.2. 框架设计的挑战 6.3. 开放式框架 6.4. 一个HTML解析器可以简单到什么程度? 6.5. ...
**第十天:创建视图和索引** - **使用视图**:介绍了视图的概念及其用途。 - **列的重命名**:教授了如何更改视图中列的名称。 - **SQL对视图的处理过程**:解释了SQL引擎如何处理包含视图的查询请求。 以上内容...
第十八章 高 级 话 题 .235 18.1 注册表编程 .235 18.2 在 C #代码中调用 C++和 VB 编写的组件 .240 18.3 版 本 控 制 .249 18.4 代 码 优 化 .252 18.5 小 结 .254 第五部分 附 录 .255 附录 A 关 键 ...
##### 第十八章:高级话题 - **18.1 注册表编程** 介绍如何使用C#来访问和修改Windows注册表。 - **18.2 在C#代码中调用C++和VB编写的组件** 讨论了如何在C#中调用其他语言编写的组件。 - **18.3 版本控制** ...
#### 第十八章:高级话题 - **18.1 注册表编程** - 如何使用C#操作Windows注册表。 - **18.2 在C#代码中调用C++和VB编写的组件** - 使用P/Invoke调用未托管代码。 - **18.3 版本控制** - 如何使用版本控制系统...