资讯专栏INFORMATION COLUMN

《Java编程思想》笔记6.访问权限控制

wangbjun / 3065人阅读

摘要:包命名规范使用小写字母。包访问权限为把类聚在一个包中的做法提供了意义和理由。接口访问权限使用关键字,意味着被它修饰的成员对所有类可见。继承访问权限基类的创建者希望某些特定成员,把它的访问权限赋予派生类也不是所有类。

点击进入我的博客 6.1包:库单元
import java.util.ArrayList;
import java.util.*;

当编写一个Java源代码文件(编译单元)时,每个编译单元必须有一个后缀.java,而在编译单元内则可以有至多一个public类,该类名必须和文件名相同。

如果编译单元内还有其他的类,那么在包之外是不可见的。

6.1.1 代码组织

当编译一个.java文件时,在.java文件中的每个类都会有一个输出文件,而该输出文件的名称与.java文件中的每个类名称相同,只是后缀名改为.class。

Java可运行程序是一组可以打包并压缩为一个Java文档文件(JAR)的.class文件,Java解释器负责这些文件的查找、状态和解释。

package语句必须是文件中除注释以外的第一句程序代码。

Java包命名规范使用小写字母。

packageimport关键字允许你做的,是将单一的全局名字空间分割开,防止名称冲突。

6.1.2 创建独一无二的包名

package名称的第一部分是类的创建者的反顺序域名。

package名称分解为你机器的一个目录。

Java解释器的执行过程:

找到环境变量CLASSPATH,CLASSPATH包含一个或多个目录,用于查找.class文件的根目录。

从根目录开始,解释器包的名称并将每一个.替换成/

把CLASSPATH和包路径拼接得到最终目录,并查找.class文件。

Sun公司将Java2中的JDK改造的更聪明了一些,未设置CLASSPATH也可以编译并运行Java程序。

不要错误的任务Java总是将当前目录视作查找行为的起点,CLASSPATH中的.表示当前目录

引入两个名称相同的类会引起冲突,所以尽量不要用import *的方式

6.1.3 定制工具库

6.1.4 用import改变行为

Java没有C的条件编译功能,该功能可以使你不必更改任何程序代码,就能够切换开关并产生不同的行为。(Java去掉此功能可能是因为C在绝大数情况下是用此功能来解决跨平台的问题的,即程序代码的不同部分是根据不同的平台来编译的。由于Java本身可以自动跨越不同的平台,因此这个功能对Java而言就没有必要了。)
然而,条件编译还有其他一些有价值的用途。调试就是一个很常见的用途。调试功能在开发过程中是开启的,而在发布的产品中是禁用的。可以通过修改被导入的package的方法来实现这一目的,修改的方法是将你程序中的代码从调试版改为发布版。这样的技术适用于任何种类的条件代码。

6.1.5 对使用包的忠告

包必须位于其名称所指定的目录中,该目录必须是在以CLASSPATH开始的目录中能找到的。

编译后的代码通常放在与源代码不同的目录中,必须保证JVM(在《Java编程思想》第四版中,此处被错误的写成类JVN!!!)使用CLASSPATH可以找到该路径。

6.2Java访问权限修饰符

publicprotected包访问权限private

取得对某成员(属性和方法)的实现方法有下面四种情况:

权限设置为public。

默认包访问权限,在同一包中的其他类,可以访问。

权限设置为public或者protected,通过继承的子类可以访问。

设置为private,提供访问器和变异器方法(get/set)

6.2.1 包访问权限

如果不提供访问权限关键词,则意味是“包访问权限(也被称作friendly)”,即默认访问权限。

包访问权限:同一个包中的所有其他类对那个成员有访问权限,包之外的无法访问。

包访问权限为把类聚在一个包中的做法提供了意义和理由

6.2.2 public:接口访问权限

使用public关键字,意味着被它修饰的成员对所有类可见。

6.2.3 private:无法访问

private的意思是,除了包含该成员的类外,其他任何类都无法访问这个成员。

如果默认构造方法被private修饰,那么这个类无法被继承。

6.2.4 protected:继承访问权限

基类的创建者希望某些特定成员,把它的访问权限赋予派生类也不是所有类。

protected也提供包访问权限

6.3 接口和实现

访问权限的控制通常被称为是具体实现的隐藏

封装:把数据和方法包进类中,以及其具体实现的隐藏共同称为封装

将接口和实现分离

6.4 类的访问权限

每个编译单元最多一个public

public类名必须和文件名完全相同

编译单元内可以没有public类,此时可以随意命名文件名,但这种方法很少用。

类的访问权限只有两种(内部类除外):public包访问权限

如果不希望其他人对该类拥有访问权限,可以把构造器设置为private单例模式中会用这种设置。

6.5 总结
控制对成员的访问权限有两个原因

第一个原因:要设定客户端程序员可以使用和不可以使用的界限。

第二个原因,也是最重要的原因,是为了让类库设计者可以更改类的工作方式,而不会影响对客户端程序员产生重大影响。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/72177.html

相关文章

  • Java编程思想》读书笔记-对象导论

    摘要:而面向对象则是向程序员提供表示问题空间中元素的工具,我们将问题空间中的元素及其在解空间中的表示称为对象。为什么要把对象看作是服务提供者呢这是将问题分解为对象集合的一种合理方式。职能太多,可能会导致对象的内聚性降低。在试图将子类对象当作其基类 计算机是头脑延伸的工具,是一种不同类型的表达媒体。本文以背景性的和补充性的材料,介绍包括开发方法概述在内的面向对象程序设计(Object-orie...

    NickZhou 评论0 收藏0
  • Java编程思想笔记10.内部类

    摘要:但远不止如此,内部类了解外部类,并能与之通信。内部类还拥有其外围类的所有元素的访问权。普通内部类内不能有域和方法。特点普通内部类对象隐式的保存了外部类对象,但嵌套类并非如此。局部内部类可以访问当前代码块内的常量,以及此外围类的成员。 点击进入我的博客 可以把一个类的定义放在另一个类的定义内部,这就是内部类。Java最晦涩的部分之一。内部类看起来就像是一种代码隐藏机制,将类只与其他类的...

    wslongchen 评论0 收藏0
  • Java编程思想笔记9.接口

    摘要:抽象类和抽象方法抽象方法这种方法是不完整的,仅有声明而没有方法。创建抽象类和抽象方法非常有用,因为他们可以使累的抽象性明确起来,并告诉用户和编译器打算怎样来使用它们。接口用于建立类于类之间的协议。与抽象类相同,防止客户端程序员创建该类对象。 点击进入我的博客 接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法。 9.1抽象类和抽象方法 抽象方法:这种方法是不完整的,仅有...

    JessYanCoding 评论0 收藏0
  • Java编程思想笔记01------一切都是对象

    摘要:一引用操纵对象在的世界里,一切都被视为对象。特点创建程序时,需要知道存储在栈内所有数据的确切生命周期,以便上下移动堆栈指针。因为,指向同一块内存空间除了通过对象引用静态变量,我们还可以通过类直接引用静态变量 一、引用操纵对象 在Java的世界里,一切都被视为对象。操纵的标识符实际上是对象的引用, 例如:遥控器与电视的关系。 可以在没有对象关联的情况下,拥有一个引用。没有电视机,也可以拥...

    yuanxin 评论0 收藏0
  • Java编程思想笔记8.多态

    摘要:多态的作用是消除类型之间的耦合关系。编写构造器准则用尽可能简单的方法使对象进入正常状态,如果可以的话,避免调用其他方法。 点击进入我的博客 在面向对象的程序设计语言中,多态是继数据抽象(封装)和继承之后的第三种基本特征。多态通过分离做什么和怎么做,从另一角度将接口和实现分离开来。多态的作用是消除类型之间的耦合关系。 8.1 再论向上转型 对象既可以作为它自己的本类使用,也可以作为它的...

    chinafgj 评论0 收藏0

发表评论

0条评论

wangbjun

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<