《 Java 编程思想》CH06 访问权限控制
- 访问控制(或隐藏具体实现)与“最初的实现并不恰当”有关。
- 重构即重写代码,以使得它更可读,更容易理解,并因此而更具维护性。
- 在面向对象设计中需要考虑一个基本问题:“如何把变动的事物与保持不变的事物区分开来”
- 应该尽可能将一切方法都定为
private,而仅向客户端程序员公开你愿意让他们使用的方法。
包:库单元
- 包内包含有一组类,它们在单一的名字空间之下被组织在一起
- 为了解决潜在的名字冲突问题,Java使用 package 对名称空间进行完全控制并为每一个类创建唯一的标识符组合。
- 每一个编译单元(.java 文件)只能有一个 public 类。
- 当编译一个 Java 文件时,.java 文件中的每一个类都会生成一个与其类名相同的 .class 文件
- Java 可运行程序是一组可以打包并压缩为一个 Java 文档文件(JAR)的 .class 文件,Java解释器负责这些文件的查找、装载和解释。
- 类库实际上一组类文件。其中每个文件都有一个 public 类,以及任意数量的非 public 类。因此每个文件都有一个构件,如果希望他们都属于同一个群组,则可以使用关键词 package。
- package 语句必须是文件中除了注释外的第一行代码。如
packgae access;表示当前文件是 access 类库的一部分,标识符为access.ClassName; - package 名称的第一部分应该是域名的逆序。
- package 名称会被分解为一个目录路径,这个包的所有文件都应该放在该文件夹中,例如包名为
fun.wuxiaobai24.access,则被解释成$CLASSPATH/fun/wuxiaobai24/access,其中$CLASSPATH为环境变量,CLASSPATH 可以指定多个目录。 - 在使用JAR文件时,需要在 CLASSPATH 中指明JAR文件的真实路径,如
CLASSPATH = .;~/jar/access.jar - 如果将两个包含相同名称的类库用
*形式导入时,在使用重名的类时,需要指明是那个包中的,如fun.wuxiaobai24.access.ClassName c = new fun.wuxiaobai24.access.ClassName() - 使用
import static语句进行静态导入,将某个包中的所有静态方法导入,这样可以直接用静态方法名进行方法调用,而不用在前面加类名,如调用某个类中的 main() 方法时,静态导入可以直接main();,而普通的导入而需要ClassName.main(); - Java 中 没有 C 中的条件编译,但是可以用 import 来间接实现某些功能。
Java 访问权限修饰词
- 包访问权限允许将包内所有相关的类组合在一起,以使得它们彼此之间可以相互访问作用。
- 继承而来的类可以访问
public和protected,只有当两个类在同一个包中时才能访问包访问权限的成员。 - 对于OOP而言,提供访问器和变异器(getter/setter),以读取或改变数值是最优雅的方法,而是 JavaBean 的基本原理。
- 如果没有给文件指定包,Java 将这些文件视为该目录的默认包中,于是给该目录中所有其他的文件提供包访问权限。
- 不能因为在类中某个对象的引用是 private,就认为其他对象就不能拥有该对象。
- protected 成员除了继承的子类可以访问外,它也有包访问权限,即同一个包下的类可以访问它。
- private 可以用来实现单例子模式:
class Soup {
private Soup() {}
private static Soup soup = new Soup();
public static Soup access() {
return soup;
}
}
接口和实现
访问权限的控制常被称为具体实现的隐藏。把数据和方法包装进类中,以及具体的实现的隐藏,常共同被称为封装。其结果是一个同时带有特征和行为的数据类型。
访问权限控制将权限的边界划在数据类型的内部的原因:
- 不用担心客户端程序员偶然地将内部机制当作他们可以使用的接口的一部分。
- 接口和具体实现的分离
类的访问权限
为了控制类的访问权限,修饰词必须出现在关键词 class 之前,如public class ClassName。同时有一些额外的限制:
- 每个编译单元(文件)都只能有一个 public 类。每个编译单元都有单一的公共接口,同 public 类实现
- public 类的名称必须与文件名相同,包括大小写。
- 编译单元(文件)中可以完全不带 public 类,此时可以随意对文件命名。
类的访问权限只有 public 和包访问权限。如果希望其他任何人对该类有访问权限,可以将所有的构造器都指定为 private,但是该类中 static 成员仍然可以创建和访问。
首发与Code & Fun
《 Java 编程思想》CH06 访问权限控制的更多相关文章
- Java编程思想之六访问权限控制
访问控制(或隐藏具体实现)与"最初的实现并不恰当"有关. 访问权限控制的等级,从最大权限到最小权限依次为:public,protected,包访问权限(没有关键字)和private ...
- Java之封装与访问权限控制(二)
目录 Java之封装与访问权限控制(二) 包:库单元 import import static Java常用包 Java之封装与访问权限控制(二) 访问权限控制是具体实现的隐藏,是封装性的一部分体现. ...
- Java之封装与访问权限控制(一)
目录 Java之封装与访问权限控制(一) 封装的概念 访问控制符 属性私有化 Java之封装与访问权限控制(一) 对于封装的概念,我总觉得自己还是挺了解的,但是真要我说,还真说不出个啥来.我只能默默地 ...
- java基础-类成员访问权限控制
一 前言 这篇文章是很基础的一文,没多大深度,对于开发人员必然是熟练于心.本篇文章的主题是为什么java要设置类成员访问级别?其原因也很简单,就是为了面向对象的封装特性:将类成员使用不同的访问级别控制 ...
- Java编程思想:一个小小的控制框架
这个实验我很喜欢,学到了非常多的东西: import java.util.ArrayList; import java.util.List; public class Test { public st ...
- (转)浅析Java中的访问权限控制
原文地址: http://www.cnblogs.com/dolphin0520/p/3734915.html 今天我们来一起了解一下Java语言中的访问权限控制.在讨论访问权限控制之前,先来讨论一下 ...
- 浅析Java中的访问权限控制
浅析Java中的访问权限控制 今天我们来一起了解一下Java语言中的访问权限控制.在讨论访问权限控制之前,先来讨论一下为何需要访问权限控制.考虑两个场景: 场景1:工程师A编写了一个类ClassA,但 ...
- JAVA笔记 -- 访问权限控制
访问权限控制 没有权限控制的时候,由于所有的接口都是可以访问的.当一个类库部分代码,发现有更好的方法解决的时候,可能其他接口会发生改动.这会导致另一个地方的引用该类库的程序发生崩溃.为了解决这种问题, ...
- JAVA编程思想——分析阅读
需要源码.JDK1.6 .编码风格参考阿里java规约 7/12开始 有点意识到自己喜欢理论大而泛的模糊知识的学习,而不喜欢实践和细节的打磨,是因为粗心浮躁导致的么? cron表达式使用 设计能力.领 ...
随机推荐
- Serverless Kubernetes 入门:对 Kubernetes 做减法
作者 | 贤维 阿里巴巴高级技术专家 导读:Serverless Kubernetes 是阿里云容器服务团队对未来 Kubernetes 演进方向的一种探索,通过对 Kubernetes 做减法,降 ...
- 傅立叶变换—FFT(cuda实现)
背景: 无意间看到cuda解决FFT有一个cufft函数库,大体查看了有关cufft有关知识,写了一个解决一维情况的cuda代码,据调查知道cufft在解决1D,2D,3D的情况时间复杂度都为O(nl ...
- 【5min+】你怎么穿着品如的衣服?IEnumerable AND IEnumerator
系列介绍 简介 [五分钟的dotnet]是一个利用您的碎片化时间来学习和丰富.net知识的博文系列.它所包含了.net体系中可能会涉及到的方方面面,比如C#的小细节,AspnetCore,微服务中的. ...
- Java开发中的各种乱码问题
乱码问题 其实解决乱码问题,就是保证所有的编码格式一致,就不会出现问题. 控制台乱码 修改idea的控制台格式 修改 idea.exe.vmoptions和idea64.exe.vmoptions 在 ...
- file_get_contents函数获取不到数据的一种情况
问题: file_get_contents($url) 获取不到数据,尽管URL地址正确,函数使用正确.如下代码 $url = "https://www.baidu.com"; ...
- 【linux学习笔记】
网上看一个两小时突击linux的教程,就想补充一下linux的知识.想着一天抽出俩小时立马就能学完呢,结果乱七八糟的事情拖了四五天,实际完成某项任务的时间超出预期完成任务的两部不止.好了," ...
- vue将接口返回的日期实时转换为几分钟前、几小时前、几天前
项目开发中,各种需求都会遇到,有些需求很合理,也好实现,有些需求不能说不合理,就是太麻烦,就比如类似标题所描述这种的需求,你不能说它是不合理的需求,因为很多论坛或微博.朋友圈.QQ空间之类的这种效果还 ...
- Arrays.sort() VS Arrays.parallelSort()
英文原文地址:Arrays.sort vs Arrays.parallelSort 作者:baeldung 翻译:高行行 1. 概述 我们都使用过 Arrays.sort() 对对象或原始数据类型数组 ...
- docker 批量删除 镜像 容器
我们在docker构建和测试时,经常会产生很多无用的镜像或者容器,我们可用如下两条命令一个一个删除. docker container rm 容器id #删除容器 可简写: docker rm 容器i ...
- APICloud发布低代码开发平台
云原生的出现,致使传统IT模式正在集中向云架构.云开发转型,其中在企业业务的互联网化.数字化进程中尤为突出,并衍生出“敏捷开发”.“快速迭代”的刚性需求.面对双模IT,如何打造全新的IT团队与模式?并 ...