Java编程思想 学习笔记6

Wesley13
• 阅读 499

六、访问权限控制

访问控制(或隐藏具体实现)与“最初的实现并不恰当”有关。

如何把变动的事物与保持不变的事物区分开来,这是面向对象设计中的一个基本问题。

为了解决这一问题,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,可以使你对名称进行完全的控制,因此名称冲突的问题是很容易避免的。

控制对成员的访问权限有两个原因。第一是为了使用户不要触碰那些他们不该碰的部分。第二个原因,也是最重要的原因,是为了让类库设计者可以更改类的内部工作方式,而不必担心这样会对客户端程序员产生重大的影响。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
MySQL系列:2021Java高级进阶学习资料
阶段一:筑基Java基础掌握不牢,对于一个开发人员来说无疑是非常致命的。学习任何一个技术知识无疑不是从基础开始;在面试的时候,面试官无疑不是从基础开始拷问。内容包括:Java概述、Java基本语法、Java执行控制流程、面向对象、访问控制权限、接口和抽象类、异常、内部类、集合、泛形、反射、枚举、I/O、关于null的几种处理方式、思维导图。1、Jav
Wesley13 Wesley13
3年前
RBAC模型
RBAC基于角色的访问控制(RoleBasedAccessControl)作为传统访问控制(自主访问,强制访问)的有前景的代替受到广泛的关注。在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。在一个组织中,角色是为了完成各种工作而创造,用户则依据它的责任和资格来被指派相应的角色,用
Wesley13 Wesley13
3年前
java入门第三篇
java是一门面向对象的语言。所谓面向对象也就是:专注于由什么来解决问题,即将解决问题的事物归纳为一个对象,这个对象通过某些方法来解决问题。例如:做一个关于简单图书管理系统的练习。   要求:根据账号、密码登录。登陆后检索权限。      总管理进入成员管理界面。实现对注册用户的操作,包括:新增用户、删除用户、查询用户列表、更改用户权限。
Stella981 Stella981
3年前
RocketMQ ACL 使用指南
1、什么是ACL?ACL是accesscontrollist的简称,俗称访问控制列表。访问控制,基本上会涉及到用户、资源、权限、角色等概念,那在RocketMQ中上述会对应哪些对象呢?用户用户是访问控制的基础要素,也不难理解,RocketMQACL必然也会引入用户的概念,即支持用户名、密码。资源资源,需
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
3年前
PostgreSQL学习手册(十) 角色和权限
 PostgreSQL是通过角色来管理数据库访问权限的,我们可以将一个角色看成是一个数据库用户,或者一组数据库用户。角色可以拥有数据库对象,如表、索引,也可以把这些对象上的权限赋予其它角色,以控制哪些用户对哪些对象拥有哪些权限。    一、数据库角色:   1\.创建角色:   CREATEROLE
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
小万哥 小万哥
8个月前
深入理解 Java 修饰符与封装:访问权限、行为控制与数据隐藏
Java修饰符Java修饰符用于控制类、属性、方法和构造函数的访问权限和行为。它们可以分为两组:1.访问修饰符:public:意味着代码对所有类可访问。private:意味着代码只能在声明的类内部访问。default:意味着代码只能在同一包中访问。prot