【Thinking in Java, 4e】访问权限控制
【包:库单元】
编译单元的概念。
一个.java文件就是一个编译单元,一个编译单元只能有一个public类,编译单元中的非public类一般是用于为public类提供支持的,这些类在包外不可见。
import语句。
当编译器碰到import语句的时候,就开始在CLASSPATH所指定的目录中查找对应的package。
【Java访问权限修饰词】
包访问权限
1、当某个类没有添加访问修饰符的时候,这个类默认在包内可见(可见的含义就是可以随意使用这个类来创建对象),但对于包外的类而言,这个类是private的(不可见的)。
2、取得某个类的信任的方式:将该类改成public、将该类与想使用该类的类放在同一个包内、继承自这个类(前提是这个类不是private)
public:接口访问权限
1、如果一个方法没有加上访问修饰符号,那么同样是默认包内可见,这意味其他类(非本包的类)即便创建了这个类的对象(这个类假设是public的),也无法通过这个对象调用这个方法。
2、即使没有明确写出“package+包名”,同一目录下的类仍属于同一个包!
private:你无法访问
1、默认包访问权限通常提供了足够充足的隐藏措施。不要不加考虑的将类声明为public!!!
例如,用如下结构创建类:
其中package com.xkfx中的A是具有默认包访问权限的,而B是public的:
可以看到,“同胞”类B是可以访问A的,但是如果尝试在packageTest(包外类)中尝试new B:
结果是无法访问的,所以,不要不加考虑的将类声明为public!!!
protect:继承访问权限
1、方法没有添加访问修饰符也默认设置为“包访问权限”,即便所属类是public的。
2、包访问权限可以理解为:同包可见。
3、一旦某个类的属性设置为private,即使是子类也无法直接访问(“super.属性”等一切途径都不可访问)。子类继承父类,子类具备private属性,但是却无法直接访问(可以通过父类的public方法间接访问),然而如果将父类的private属性修改为protect,那么子类就可以通过“.属性”直接访问这个属性。protect的缺点就是一旦设置为protect,除了子类同包类也可随便new 该类,然后通过“.属性”访问该属性。
【接口和实现】
将public(接口)放在前面,private放在后面会让代码好读一些。
【类的访问权限】
1、类的访问权限仅有两种 选择 :包访问权限 或 public。
2、可以通过将构造器指定为private来阻止直接创建类的实例,然后通过静态方法调用这个构造器。(这对限制数量,记录数量大有裨益)
3、单例(singleton)将对象作为一个static private成员,通过静态方法返回它的引用,这样创建的对象有且仅有一个。(例如可以通过这样创建管理一个固定数组)
4、相同目录下所有不具备package声明的文件,都被视为该目录下默认包的一部分。
【小结】
访问权限的设定主要从类创建者和类使用者的角度考虑(常常需要扮演两种角色),哪些东西是需要暴露给类使用者的?
【Thinking in Java, 4e】访问权限控制的更多相关文章
- Java基础—访问权限控制
Java中访问权限控制的作用: 为了使用户不要触碰那些他们不该触碰的部分,这些部分对于类内部的操作时必要的,但是它并不属于客户端程序员所需接口的一部分. 为了让类库设计者可用更改类的内部工作方式,而不 ...
- 【Java_基础】Java的访问权限控制
1.类成员的访问权限控制 Java中类成员的访问权限分为四类:private,无(默认情况下),protected和public.其权限控制如下表所示: 修饰词 本类 同一个包的类 继承类 其他类 p ...
- JAVA笔记 -- 访问权限控制
访问权限控制 没有权限控制的时候,由于所有的接口都是可以访问的.当一个类库部分代码,发现有更好的方法解决的时候,可能其他接口会发生改动.这会导致另一个地方的引用该类库的程序发生崩溃.为了解决这种问题, ...
- java 的访问权限控制
package test06; public class PermissionModel { private int age; public String name; public int getAg ...
- JAVA访问权限控制[zhuan]
Java的访问权限控制修饰符,从最大权限到最小权限依次是:public.protected.包访问权限(默认,没有关键字)和private.对于类的访问权限只能是:public和包访问权限(但内部类可 ...
- 论Java访问权限控制的重要性
人在什么面前最容易失去抵抗力? 美色,算是一个,比如说西施的贡献薄就是忍辱负重.以身报国.助越灭吴:金钱,算是另外一个,我们古人常说“钱乃身外之物,生不带来死不带去”,但我们又都知道“有钱能使鬼推磨” ...
- (转)浅析Java中的访问权限控制
原文地址: http://www.cnblogs.com/dolphin0520/p/3734915.html 今天我们来一起了解一下Java语言中的访问权限控制.在讨论访问权限控制之前,先来讨论一下 ...
- [THINKING IN JAVA]访问权限控制
6 访问权限控制 6.1 包:库单元 package.import.import *.import static: 修改classpath环境变量可以将自己写的类库添加至环境变量并在任何java程序中 ...
- Java成员的访问权限控制
Java中的访问权限控制包含两个部分: 类的访问权限控制 类成员的访问权限控制 对类来说,访问权限控制修饰符可以是public或者无修饰符(默认的包访问权限): 对于类成员来说,访问权限控制修饰符可以 ...
- 浅析Java中的访问权限控制
浅析Java中的访问权限控制 今天我们来一起了解一下Java语言中的访问权限控制.在讨论访问权限控制之前,先来讨论一下为何需要访问权限控制.考虑两个场景: 场景1:工程师A编写了一个类ClassA,但 ...
随机推荐
- 多线程sshd爆破程序代码
不多说了,直接上手代码,也没有啥练手的,都是很熟悉的代码,水一篇,方便作为工作的小工具吧.试了一下,配合一个好点的字典,还是可以作为个人小工具使用的. #!/usr/bin/env python # ...
- ios 开发环境,证书和授权文件
一.成员介绍1. Certification(证书)证书是对电脑开发资格的认证,每个开发者帐号有一套,分为两种:1) Developer Certification(开发证书)安装在电脑上 ...
- spring的@Transactional注解详细用法(转载)
概述 事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性.Spring Framework对事务管理提供了一致的抽象,其特点如下: 为不同的事务API提供一致的编程模型, ...
- 160303、js加密跟后台加密对应
md5.js var hexcase = 0; var b64pad = ""; var chrsz = 8; function hex_md5(s){ return binl2h ...
- Ubuntu安装谷歌输入法或者搜狗
1.进入系统先更软件更新器这个在系统计算机中搜索,点击就好了 2.先添加以下源sudo add-apt-repository ppa:fcitx-team/nightly 3.添加源之后需要更新一下系 ...
- 【MongoDB】从入门到精通mongdb系列学习宝典,想学mongodb小伙伴请进来
最近一段时间在学习MongoDB,在学习过程中总共编写了四十余篇博客.从mongodb软件下载到分片集群的搭建. 从理论讲解到实例练习.现在把所有博客的内容做个简单目录,方便阅读的小伙伴查询. 一. ...
- Whether to hide the cookie from JavaScript
w禁用js访问特定cookie. https://codeigniter.com/userguide3/helpers/cookie_helper.html $this->load->he ...
- windows中根据进程PID查找进程对象过程深入分析
这里windows和Linxu系列的PID 管理方式有所不同,windows中进程的PID和句柄没有本质区别,根据句柄索引对象和根据PID或者TID查找进程或者线程的步骤也是一样的. 句柄是针对进 ...
- MySQL行(记录)的详细操作
一 介绍 MySQL数据操作: DML ======================================================== 在MySQL管理软件中,可以通过SQL语句中的 ...
- 小技巧-如何加快github下载代码的速度(转)
作为开发人员,github是大家的标配了,常常会苦恼于gitclone某个项目的时候速度太慢,看着控制台那几K十几K的龟速,吐血!! 原因很简单:github的CDN被伟大的墙屏蔽所致. 所以解决方案 ...