【包:库单元】

编译单元的概念。

一个.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】访问权限控制的更多相关文章

  1. Java基础—访问权限控制

    Java中访问权限控制的作用: 为了使用户不要触碰那些他们不该触碰的部分,这些部分对于类内部的操作时必要的,但是它并不属于客户端程序员所需接口的一部分. 为了让类库设计者可用更改类的内部工作方式,而不 ...

  2. 【Java_基础】Java的访问权限控制

    1.类成员的访问权限控制 Java中类成员的访问权限分为四类:private,无(默认情况下),protected和public.其权限控制如下表所示: 修饰词 本类 同一个包的类 继承类 其他类 p ...

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

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

  4. java 的访问权限控制

    package test06; public class PermissionModel { private int age; public String name; public int getAg ...

  5. JAVA访问权限控制[zhuan]

    Java的访问权限控制修饰符,从最大权限到最小权限依次是:public.protected.包访问权限(默认,没有关键字)和private.对于类的访问权限只能是:public和包访问权限(但内部类可 ...

  6. 论Java访问权限控制的重要性

    人在什么面前最容易失去抵抗力? 美色,算是一个,比如说西施的贡献薄就是忍辱负重.以身报国.助越灭吴:金钱,算是另外一个,我们古人常说“钱乃身外之物,生不带来死不带去”,但我们又都知道“有钱能使鬼推磨” ...

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

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

  8. [THINKING IN JAVA]访问权限控制

    6 访问权限控制 6.1 包:库单元 package.import.import *.import static: 修改classpath环境变量可以将自己写的类库添加至环境变量并在任何java程序中 ...

  9. Java成员的访问权限控制

    Java中的访问权限控制包含两个部分: 类的访问权限控制 类成员的访问权限控制 对类来说,访问权限控制修饰符可以是public或者无修饰符(默认的包访问权限): 对于类成员来说,访问权限控制修饰符可以 ...

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

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

随机推荐

  1. jQuery源码分析-each函数

    本文部分截取自且行且思 jQuery.each方法用于遍历一个数组或对象,并对当前遍历的元素进行处理,在jQuery使用的频率非常大,下面就这个函数做了详细讲解: 复制代码代码 /*! * jQuer ...

  2. php做图片上传功能

    今天来做一个图片上传功能的插件,首先做一个html文件:text.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transition ...

  3. Map中存放数组

    Map<String,Object> map = new HashMap<String, Object>(); Map<String,String> agentMa ...

  4. Linux系统时间快8个小时

    1.vi /etc/sysconfig/clock   #编辑文件ZONE="Asia/Shanghai"UTC=false                          #设 ...

  5. ZOJ 3932 Handshakes

    Last week, n students participated in the annual programming contest of Marjar University. Students ...

  6. 20165330 2017-2018-2 《Java程序设计》第3周学习总结

    课本知识总结 第四章 类与对象 类:包括类声明和类体 基本格式: class 类名 { 类体的内容 } 类声明: class+类名(注意:类名首字母需大写) 类体:类声明之后的一对"{&qu ...

  7. Javascript 香港身份证号校验

    <!DOCTYPE html> <html> <head> <title>香港身份证校验码计算</title> </head> ...

  8. 解决IOS7在TableView 被导航栏挡住的BUG!!

    self.edgesForExtendedLayout = UIRectEdgeNone; 就这么简单!

  9. [已解决]centos6.4 php连接mysql和memcache提示权限不允许

    昨天新安装了64位系统,所以就重新安装了一个centos的虚拟机,配置了一个测试环境,刚开始是页面打不开,这个确定是selinux规则没有设置好使用如下命令解决: chcon -R -h -t htt ...

  10. 前端开发 - JavaScript - 上

    1.js引入 <!DOCTYPE html> <html lang="cn"> <head> <meta charset="UT ...