访问控制

访问控制
包的使用
类的访问控制
成员的访问控制

包的使用
所谓包,指的是类的集合,包和类(接口)关系,类似文件系统中目录和文件的关系,在Java语言中,包是类的组织结构,Java语言提供了许多包,例如java.io, java.lang等,Java语言提供的包中存放了一些Java语言基础类,如在前面使用的System, String类等,一个好的Java程序,结构必然是严谨的,包的结构尤为重要.

将类放入一个包内后,对包的引用可以替代对类的引用,此外,包这个概念也为使用类的成员变量与方法提供了很多方便,包结构往往与Java语言访问控制符结合一起使用, 最终达到数据封装的目的,为了更好的理解访问控制级别,需要深入理解包这一重要概念.

JDK官方包介绍
java.lang: Java语言基础包,为Java语言的基本结构提供了各种基础类,如Object类,String类等.
java.tuil: Java语言工具包, 提供了编码,解码,哈西表, 向量, 堆栈之类的工具类.
java.io: Java语言I/O包,提供了标准的输入流,输出流及文件访问相关的工具类
java.applet: Java语言小应用程序包, 提供了与支持Java的浏览器进行交互的类.
java.awt包,Java语言容器工具包,提供了字体,基础事件,监听器,面板,窗体,按钮,滚动条等图形用户界面工具类.
java.net: Java语言网络包, 提供了支持网络通信的类,如Socket类等,支持telnet, FTP, www等协议访问网络.

包的声明与创建:
包名一般为小写,而类名的第一个字母一般为大写,这样在引用时,可以明显的分辨出包名和类名,如果在类的定义之前没有使用package定义包名, 那么类就属于缺省的包.
Java语言中通过关键字package来声明一个包,在Java程序的最前面添加包的定义,如下所示:
package dangdang;

包名可以是包含”.”字符分隔的字符串,如下所示
package com.zmxlh.demo;

请看示例PagckageDemo.java, 在建立文件前必须先建立一个包目录结构,然后将Java文件放入对应的目录中.
运行时:
1. 先还是用EditPlus编译
2. 运行命令时先用CMD进入控制台,再定义到最顶层包的目录,运行命令
java com.dangdang.chapter2.PagckageDemo

使用包的好处:
1. 可以更好的组织类,包与文件夹结构类似,
2. 减少类名的冲突问题, 与文件夹类似,同一文件夹中的文件不能重名, 不同文件中的文件可以重名,同一包中类名不能重复, 不同包中的类名可以重复.
3. 对包中的类起了一定的保护作用, 即访问控制的内容.

引入包资源
当Java程序中需要引用其他包内的类时,需要使用import 关键字来声明引用的包或类资源,需要注意的是如果使用的类属于java.lang包,那么可以直接使用类名来引用指定的类,而不需要加上包名,这是因为java.lang包叫被默认引用.

引用方式:
1. 直接 包名+类名 的书写方式
2. import ..*导入指定包下面的全部类方式
3. import ..** 导入指定包下面的指定类方式
4. 静态引入
a) import static java.lang.Math.PI;
b) import static java.lang.Math.*;
静态引用相当于被引用资源类具有了和被引入资源类相同的资源,

示例: Student.java Test.java
打包命令:
jar -cvf my.jar *.*
编译命令
javac Test.java -classpath d:\chapter2.jar


类的访问控制
Java语言是面向对象的语言,封装是面向对象的一个重要特性,封装将数据和处理数据的代码连接起来,同时,封装也提供了另一个重要属性,即访问控制,通过封装可以控制类,接口相互间的可见性,以及方法的可见性,通过控制访问,可以阻止对象的滥用,例如,只允许通过特殊定义的一系列方法来访问类的数据,可以阻止乱用类的数据,从而保证类淘汰的可靠性和安全性.

Java语言的访问控制符有公共的,私有的,保护的,默认的(public,private,protected,default)四种,这四个控制符可以用在属性和方法上,方法内部变量是不能用控制符修饰的.
访问控制符 同一类中 同一包中 同一子类中 其他
public 是 是 是 是
private 是 否 否 否
protected 是 是 是 否
default 是 是 否 否

public 公共访问级别:
公共访问级别是成员的最高访问级别,凡是声明为公共访问级别的成员都可以被同一包中的类,子类或是其他包中的类所访问.

protected 保护访问级别
保护级别仅次于公共访问级别, 定义为保护级别的成员除了可以在同一类中被访问,还可以被同一包中的类和子类访问,

private 私有访问级别
最严格的访问级别,凡是用private声明的成员变量或方法只能在类内部访问,其他任何地方都不能访问.

默认访问级别
默认访问级别定义的成员变量或方法除了在类内部访问,只能在包内的类中被调用.


访问级别与数据封装
 数据封装是面向对象语言的重要特性之一,所谓数据封装,是指隐藏类的属性和实现细节,仅仅对外公开访问接口,使用数据封装能带来以下优点.
 更加方便理解和使用类,防止因为误操作而随意修改属性.
 只将少数几个公共接口暴露,将大部分数据和实现细节隐藏在内部,不论内部实现是如何的复杂,在使用者角度却是很简单的.
 有效的提高了软件的征用性,每个子系统,模块,组件都是一个相对独立,完整的有机体,可以在其他各种环境中被重复使用.
 有利于降低各子系统,模块,组件间的耦合关系,提高子系统,模块,组件的独立性,如当某一组件内部实现发生变化时,只要保持接口不变,就不会对其他组件产生影响.
 有效的降低了设计开发大型系统的风险,即使整个系统不成功,个别独立子系统,模块,组件仍旧可能是有价值的.
总之,一个设计良好的系统会封装所有的实现细节,将接口与实现进行明确的分隔,各模块,组件间仅通过定义良好的接口进行信息通信.面向对象语言主要是通过访问控制机制来进行数据封装,包括类的访问控制与成员的访问控制两个层次.

在数据封装方面有两个主要原则:
1. 隐藏所有属性,
2. 尽可能隐藏一切内部实现细节,只保留简洁的接口方法.

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值