• 访问控制(或隐藏具体实现)与“最初的实现并不恰当”有关
  • 重构即重写代码,以使得它更可读,更容易理解,并因此而更具维护性。
  • 在面向对象设计中需要考虑一个基本问题:“如何把变动的事物与保持不变的事物区分开来”
  • 应该尽可能将一切方法都定为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 访问权限修饰词

  • 包访问权限允许将包内所有相关的类组合在一起,以使得它们彼此之间可以相互访问作用。
  • 继承而来的类可以访问publicprotected,只有当两个类在同一个包中时才能访问包访问权限的成员。
  • 对于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 访问权限控制的更多相关文章

  1. Java编程思想之六访问权限控制

    访问控制(或隐藏具体实现)与"最初的实现并不恰当"有关. 访问权限控制的等级,从最大权限到最小权限依次为:public,protected,包访问权限(没有关键字)和private ...

  2. Java之封装与访问权限控制(二)

    目录 Java之封装与访问权限控制(二) 包:库单元 import import static Java常用包 Java之封装与访问权限控制(二) 访问权限控制是具体实现的隐藏,是封装性的一部分体现. ...

  3. Java之封装与访问权限控制(一)

    目录 Java之封装与访问权限控制(一) 封装的概念 访问控制符 属性私有化 Java之封装与访问权限控制(一) 对于封装的概念,我总觉得自己还是挺了解的,但是真要我说,还真说不出个啥来.我只能默默地 ...

  4. java基础-类成员访问权限控制

    一 前言 这篇文章是很基础的一文,没多大深度,对于开发人员必然是熟练于心.本篇文章的主题是为什么java要设置类成员访问级别?其原因也很简单,就是为了面向对象的封装特性:将类成员使用不同的访问级别控制 ...

  5. Java编程思想:一个小小的控制框架

    这个实验我很喜欢,学到了非常多的东西: import java.util.ArrayList; import java.util.List; public class Test { public st ...

  6. (转)浅析Java中的访问权限控制

    原文地址: http://www.cnblogs.com/dolphin0520/p/3734915.html 今天我们来一起了解一下Java语言中的访问权限控制.在讨论访问权限控制之前,先来讨论一下 ...

  7. 浅析Java中的访问权限控制

    浅析Java中的访问权限控制 今天我们来一起了解一下Java语言中的访问权限控制.在讨论访问权限控制之前,先来讨论一下为何需要访问权限控制.考虑两个场景: 场景1:工程师A编写了一个类ClassA,但 ...

  8. JAVA笔记 -- 访问权限控制

    访问权限控制 没有权限控制的时候,由于所有的接口都是可以访问的.当一个类库部分代码,发现有更好的方法解决的时候,可能其他接口会发生改动.这会导致另一个地方的引用该类库的程序发生崩溃.为了解决这种问题, ...

  9. JAVA编程思想——分析阅读

    需要源码.JDK1.6 .编码风格参考阿里java规约 7/12开始 有点意识到自己喜欢理论大而泛的模糊知识的学习,而不喜欢实践和细节的打磨,是因为粗心浮躁导致的么? cron表达式使用 设计能力.领 ...

随机推荐

  1. Python 任务自动化工具 tox 教程

    在我刚翻译完的 Python 打包系列文章中,作者提到了一个神奇的测试工具 tox,而且他本人就是 tox 的维护者之一.趁着话题的相关性,本文将对它做简单的介绍,说不定大家在开发项目时能够用得上. ...

  2. SpringBoot集成Mybatis动态多数据源后,MybatisPlus的IPage失效的问题解决方案

    背景 之前做数据抽取的时候,搭了一个mybatis动态数据源切换的架子.方便他们写抽取的代码.今天同事问我,架子里面的mybatisplus的IPage失效了是什么问题.想了一下,应该是写动态数据源的 ...

  3. 2020面试还搞不懂MyBatis?快看看这27道面试题!(含答案和思维导图)

    前言 MyBatis是一个优秀的持久层ORM框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注SQL 本身,而不需要花费精力去处理例如注册驱动.创建connection.创建statem ...

  4. 扫描器是如何判定有xss漏洞的

    这个问题,看似简单,实则触及到很多人的知识盲区 我们都知道,弹窗就能判定这个页面存在xss, 那么扫描器是怎么判断的呢,或者说扫描器是怎么判断是否弹窗的呢 测试发现 当响应的头中content-typ ...

  5. 【转】Java集合框架面试问题集锦

    Java集合框架(例如基本的数据结构)里包含了最常见的Java常见面试问题.很好地理解集合框架,可以帮助你理解和利用Java的一些高级特性.下面是面试Java核心技术的一些很实用的问题. Q:最常见的 ...

  6. aliPayPlus 科普使用

    本文出自APICloud官方论坛, 感谢论坛版主City7的分享. 首先到 https://open.alipay.com/platform/manageHome.htm 申请应用上线 支付宝网关:这 ...

  7. nor flash之擦除和写入

    最近研究了下nor flash的掉电问题,对nor的掉电有了更多的认识.总结分享如下 擦除从0变1,写入从1变0 nor flash的物理特性是,写入之前需要先进行擦除.擦除后数据为全0xFF,此时写 ...

  8. ntelliJ IDEA添加注释常用的快捷键

    IDEA可以使用快捷键添加行注释Ctrl+/.块注释Ctrl+Shift+/,还可以快速生成类注释.方法注释等,下面就介绍这几种快捷键的用法

  9. 轻松理解 Kubernetes 的核心概念

    Kubernetes 迅速成为云环境中软件部署和管理的新标准. 与强大的功能相对应的是陡峭的学习曲线. 本文将提供 Kubernetes 的简化视图,从高处观察其中的重要组件,以及他们的关联. 硬件 ...

  10. Qt Installer Framework翻译(5-3)

    推广更新 创建在线安装程序,以便能够向安装产品的用户推广更新. 为了推广更新,需要执行以下步骤: 将待更新内容复制到package文件夹. 在package.xml文件中增加待更新组件的元素的值. 使 ...