Java编程思想 学习笔记6
六、访问权限控制
访问控制(或隐藏具体实现)与“最初的实现并不恰当”有关。
如何把变动的事物与保持不变的事物区分开来,这是面向对象设计中的一个基本问题。
为了解决这一问题,Java提供了访问权限修饰词,以供类库开发人员向客户端程序员指明哪些是可用的,哪些是不可用的。访问权限的等级,从最大权限到最小权限依次为:public、protetced、包访问权限(没有关键词)和private。
1.包:库单元
包内包含有一组类,它们在单一的名字空间之下被组织在了一起。
当编写一个Java源代码文件时,此文件通常被称为编译单元,每个编译单元都必须有一个后缀名.java,而在编译单元内则可以有一个public类,该类的名称必须与文件的名称相同。每个编译单元只能有一个public类,否则编译器就不会接受。
①代码组织
当编译一个.java文件时,在.java文件中的每个类都会有一个输出文件,而该输出文件的名称与.java文件中每个类的名称相同,只是多了一个后缀名.class。
Java可运行程序是一组可以打包并压缩为一个Java文档文件(JAR)的.class文件。Java解释器负责这些文件的查找、装载和解释。
类库实际上是一组文件。其中每个文件都有一个public类,以及任意数量的非public类。因此每个文件都有一个构件。如果希望这些构件从属于一个群组,就可以使用关键字package。
如果使用package语句,它必须是文件中除注释以外的第一句程序代码。
②创建独一无二的包名
package名称的第一部分是类的创建者的反顺序的Internet域名。第二部分是将package名称分解为你机器上的一个目录。所以当Java程序运行并且需要加载.class文件时,它可以确定.class文件在目录上所处的位置。
Java解释器的运行过程如下:首先,找出环境变量CLASSPATH。CLASSPATH包含一个或多个目录,用作查找.class文件的根目录。从根目录开始,解释器获取包的名称并将每个句点替换成反斜杠,以从CLASSPATH根中产生一个路径名称。得到的路径会与CLASSPATH中的各个不同的项相连接,解释器就在这些目录中查找与你所要创建的类的名称相关的.class文件。
2.Java访问权限修饰词
①包访问权限
如果不提供访问权限修饰词,则意味着它是“包访问权限”。这就意味着当前的包中的所有其他类对那个成员都有访问权限,但对于这个包之外的类,这个成员却是private的。
②public:接口访问权限
使用public,就意味着public之后紧跟着的成员声明自己对每个人都是可用的。
③private:你无法访问
关键字private的意思是,除了包含该成员的类之外,其他任何类都无法访问这个成员。
④protected:继承访问权限
关键字protected处理的是继承的概念。基类的所有派生类都可以访问protected成员,此外,proteced也提供包访问权限。
3.接口和实现
访问权限的控制常常被称为是具体实现的隐藏。把数据和方法包装进类中,以及具体实现的隐藏,常共同被称作是封装。
4.类的访问权限
如果希望某个类可以为某个客户端程序员所用,就可以通过把关键字public作用于整个类的定义。
注意:每个编译单元都只能有一个public类。
类既不可以是private的,也不可以是protected的。如果不希望其他任何人对该类拥有访问权限,可以把所有的构造器都指定为private,从而阻止任何人创建该类的对象,但是有一个例外,就是你在该类的static成员内部可以创建。
5.总结
对于Java,关键字package、包的命名和关键字import,可以使你对名称进行完全的控制,因此名称冲突的问题是很容易避免的。
控制对成员的访问权限有两个原因。第一是为了使用户不要触碰那些他们不该碰的部分。第二个原因,也是最重要的原因,是为了让类库设计者可以更改类的内部工作方式,而不必担心这样会对客户端程序员产生重大的影响。
Java编程思想 学习笔记6的更多相关文章
- [Java编程思想-学习笔记]第3章 操作符
3.1 更简单的打印语句 学习编程语言的通许遇到的第一个程序无非打印"Hello, world"了,然而在Java中要写成 System.out.println("He ...
- Java编程思想 学习笔记1
一.对象导论 1.抽象过程 Alan Kay曾经总结了第一个成功的面向对象语言.同时也是Java所基于的语言之一的Smalltalk的五个基本特性,这些特性表现了纯粹的面向对象程序设计方式 1)万物皆 ...
- [Java编程思想-学习笔记]第1章 对象导论
1.1 抽象过程 Java是一门面向对象的语言,它的一个优点在于只针对待解问题抽象,而不用为具体的计算机结构而烦心,这使得Java有完美的移植性,也即Java的口号"Write Once, ...
- Java编程思想 学习笔记11
十一.持有对象 通常,程序总是根据运行时才知道的某些条件去创建新对象.在此之前,不会知道所需对象的数量,甚至不知道确切的类型. Java实用库还提供了一套相当完整的容器类来解决这个问题,其中基本的类 ...
- Java编程思想学习笔记——类型信息
前言 运行时类型信息(RTTI:Runtime Type Information)使得我们可以在程序运行时发现和使用类型信息. Java在运行时识别对象和类的信息的方式: (1)一种是RTTI,它假定 ...
- Java编程思想 学习笔记12
十二.通过异常处理错误 Java的基本理念是“结构不佳的代码不能运行”. Java中的异常处理的目的在于通过使用少于目前数量的代码来简化大型.可靠的程序的生成,并且通过这种方式可以使你更加自信:你的 ...
- Java编程思想 学习笔记10
十.内部类 可以将一个类的定义放在另一个类的定义内部,这就是内部类. 内部类是一种非常有用的特性,因为它允许你把一些逻辑相关的类组织在一起,并控制位于内部的类的可视性.然而必须要了解,内部类和组合是 ...
- Java编程思想 学习笔记7
七.复用类 1.组合语法 在新的类中产生现有类的对象.由于新的类是由现有类的对象所组成,所以这种方法叫做组合. 类中域为基本类型时能够自动被初始化为零.对象引用被初始化为null. 编译器不是简单地为 ...
- Java编程思想 学习笔记5
五.初始化与清理 1.用构造器确保初始化 在Java中,通过提供构造器,类的设计者可确保每个对象都会得到初始化.创建对象时,如果其类具有构造器,Java就会在用户有能力操作对象之前自动调用相应的构造 ...
- Java编程思想 学习笔记4
四.控制执行流程 1.true和false 所有条件语句都利用条件表达式的真或假来决定执行路径.注意Java不允许我们将一个数字作为布尔值使用. 2.if-else 3.迭代 while.do-whi ...
随机推荐
- SQLSERVER 备份数据库的注意事项
1. SQLSERVER 有一个压缩备份集的功能,能够实现大概15%的压缩比(跟数据类型不同而不同) 之前竟然没发现...浪费了好多磁盘资源.. 多学习多思考..
- 关于miniconda的安装,配置以及包批量安装和使用
由于时间很晚了.就不写废话了. conda官方文档地址:http://conda.pydata.org/docs/ 一切其实都可以从miniconda的文档找到,这里只纪录自己操作的时候遇到的值得一说 ...
- Spring MVC @ModelAttribute注解
在一个Controller内,被@ModelAttribute标注的方法会在此controller的每个handler方法执行前被执行. 被@ModelAttribute标注的方法的参数绑定规则和普通 ...
- Lodop设置打印维护返回打印语句代码
打印设计关闭时,可以返回设计的打印代码,打印维护则返回成功打印的次数.不过打印维护也是返回打印程序代码的,方法就是加个语句,这个语句是: LODOP.SET_PRINT_MODE("PRIN ...
- 关于super的理解,三篇文章支撑起来的
1.有向图的拓扑排序https://blog.csdn.net/wp1603710463/article/details/50900892 2. Python中MRO算法 http://mp.weix ...
- BZOJ3159决战——树链剖分+非旋转treap(平衡树动态维护dfs序)
题目描述 输入 第一行有三个整数N.M和R,分别表示树的节点数.指令和询问总数,以及X国的据点. 接下来N-1行,每行两个整数X和Y,表示Katharon国的一条道路. 接下来M行,每行描述一个指令或 ...
- BZOJ1001 BJOI2006狼抓兔子(最小割+最短路)
显然答案就是最小割.直接跑dinic也能过,不过显得不太靠谱. 考虑更正确的做法.作为一个平面图,如果要把他割成两半,那么显然可以用一条曲线覆盖且仅覆盖所有割边.于是我们把空白区域看成点,隔开他们的边 ...
- Dapper 连表查询
实体类: UserInfo: public partial class UserInfo { public UserInfo() { this.Persion = new HashSet<Per ...
- Fire Net ZOJ - 1002
题意: 一个n * n 的棋盘 上面有些障碍物 放棋子 棋子不能在同一行 同一列 但可以在同一行或同一列隔着障碍物放 这题与poj1321 的思想差不多 对于一个位置 有两种状态放还是不放 参数i ...
- hdu 3727 Jewel (可持久化线段树+bit)
链接: http://acm.hdu.edu.cn/showproblem.php?pid=3727 题意: 对一段序列进行四种操作: Insert x :在序列尾部插入一个x: Query_1 s ...