【包:库单元】

编译单元的概念。

一个.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. vue2.0中子组件通过v-modal改变父组件中的值

    父组件代码: <template lang="pug"> div p this is father child(v-model="data") &l ...

  2. 【BZOJ4295】[PA2015]Hazard 乱搞

    [BZOJ4295][PA2015]Hazard Description 有n个人在轮流玩赌博机,一开始编号为i的人有a[i]元钱.赌博机可以抽象为一个长度为m的仅包含1和-1的序列,若抽到1,那么你 ...

  3. 【BZOJ2565】最长双回文串 Manacher

    [BZOJ2565]最长双回文串 Description 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc的顺序为“abc”,逆序为“cba”,不相同).输入长度为 ...

  4. if...else if...else和switch语句的注意点

    java if...else if...else 语句 if 语句后面可以跟 elseif…else 语句,这种语句可以检测到多种可能的情况. 使用 if,else if,else 语句的时候,需要注 ...

  5. uid-datepicker

    $("#txtPODate").daterangepicker({singleDatePicker: true,showDropdowns: true,minDate:'01/01 ...

  6. Struts2---输入验证

    1. Struts2 的验证 1). 验证分为两种: > 声明式验证* 需要解决的问题如下: >> 确定对哪个 Action 或 Model 的那个字段进行验证 >> 使 ...

  7. Windows配置MinGW环境变量

    先安装MinGW 1.添加3个系统变量(根据自己的实际路径) MinGW_INCLUDE_PATH MinGW_LIBRARY_PATH MinGW_PATH 2.将MinGW_PATH添加到Path ...

  8. 解决存储过程中拼接的SQL字符串超长导致sql语句被截取的问题

    今天遇到了一个奇葩的问题:存储过程中的sql字符串拼接的太长,超出了分页存储过程执行sql参数的nvarchar(4000)的长度. 没办法,只能修改自己的存储过程,因为分页存储过程是不能动的. 开始 ...

  9. combined with the Referer header, to potentially build an exhaustive data set of user profiles and browsing habits Client Identification

    w https://www.zhihu.com/question/35307626 w 0-客户端(附加用户信息)首次请求服务端--->服务端生成session(有唯一性).session_id ...

  10. 小程序 Expecting 'EOF','}',',',']', got INVALID

    修改了app.json中的东西,做了注释操作,报如下错误: 修改了好一阵,一直报错,原来是json文件中无法使用注释惹的祸,具体查看:官方文档