非常教程

JAVA参考手册

Java 封装

Java 封装

Java 封装


在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。

封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。

要访问该类的代码和数据,必须通过严格的接口控制。

封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。

适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。

封装的优点

  • 1. 良好的封装能够减少耦合。

  • 2. 类内部的结构可以自由修改。

  • 3. 可以对成员变量进行更精确的控制。

  • 4. 隐藏信息,实现细节。


实现Java封装的步骤

1. 修改属性的可见性来限制对属性的访问(一般限制为private),例如:

public class Person { private String name; private int age; }

这段代码中,将 nameage 属性设置为私有的,只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏。

2. 对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问,例如:

public class Person{ private String name; private int age; ​ public int getAge(){ return age; }public String getName(){ return name; }public void setAge(int age){ this.age = age; }public void setName(String name){ this.name = name; } }

采用 this 关键字是为了解决实例变量(private String name)和局部变量(setName(String name)中的name变量)之间发生的同名的冲突。


实例

让我们来看一个java封装类的例子:

EncapTest.java 文件代码:

/* 文件名: EncapTest.java */ public class EncapTest{ private String name; private String idNum; private int age; public int getAge(){ return age; } public String getName(){ return name; } public String getIdNum(){ return idNum; } public void setAge( int newAge){ age = newAge; } public void setName(String newName){ name = newName; } public void setIdNum( String newId){ idNum = newId; } }

以上实例中public方法是外部类访问该类成员变量的入口。

通常情况下,这些方法被称为getter和setter方法。

因此,任何要访问类中私有成员变量的类都要通过这些getter和setter方法。

通过如下的例子说明EncapTest类的变量怎样被访问:

RunEncap.java 文件代码:

/* F文件名 : RunEncap.java */ public class RunEncap{ public static void main(String args[]){ EncapTest encap = new EncapTest(); encap.setName("James"); encap.setAge(20); encap.setIdNum("12343ms"); System.out.print("Name : " + encap.getName()+ " Age : "+ encap.getAge()); } }

以上代码编译运行结果如下:

Name : James Age : 20
Java 封装

JAVA目录

1.Java 简介
2.Java 变量类型
3.Java StringBuffer 和 StringBuilder 类
4.Java String 类
5.Java Character 类
6.Java 条件语句 – if…else
7.Java 循环结构 – for, while 及 do…while
8.Java 运算符
9.Java File类
10.Java DataOutputStream类
11.Java ByteArrayOutputStream类
12.Java DataInputStream类
13.Java ByteArrayInputStream类
14.Java 正则表达式
15.Java 日期时间
16.Java Enumeration接口
17.Java 包(package)
18.Java 接口
19.Java 封装
20.Java 抽象类
21.Java FileWriter类
22.Java FileReader类
23.Java 数据结构
24.Java Properties 类
25.Java Hashtable 类
26.Java Map 接口
27.Java Dictionary 类
28.Java Stack 类
29.Java Vector 类
30.Java Bitset类
31.Java Applet 基础
32.Java 网络编程
33.Java URL处理
34.Java 序列化
35.Java 泛型
36.Java 文档注释
37.Java 实例 – 删除字符串中的一个字符
38.Java 实例 – 查找字符串最后一次出现的位置
39.Java 实例
40.Java 实例 – 字符串比较
41.Java 实例 – 如何查看当前 Java 运行的版本?
42.Java 实例 – 如何执行指定class文件目录(classpath)
43.Java 实例 – 如何执行编译过 Java 文件
44.Java 实例 – 如何编译 Java 文件
45.Java 实例 – 连接字符串
46.Java 实例 – 字符串格式化
47.Java 实例 – 字符串优化
48.Java 实例 – 字符串性能比较测试
49.Java 实例 – 测试两个字符串区域是否相等
50.Java 实例 – 字符串小写转大写
51.Java 实例 – 字符串分割
52.Java 实例 – 字符串查找
53.Java 实例 – 字符串反转
54.Java 实例 – 字符串替换
55.Java 实例 – 查找数组中的重复元素
56.Java 实例 – 数组扩容
57.Java 实例 – 数组填充
58.Java 实例 – 数组合并
59.Java 实例 – 数组获取最大和最小值
60.Java 实例 – 数组输出
61.Java 实例 – 数组反转
62.Java 实例 – 获取数组长度
63.Java 实例 – 数组添加元素
64.Java 实例 – 数组排序及元素查找
65.Java 实例 – 时间戳转换成时间
66.Java 实例 – 获取年份、月份等
67.Java 实例 – 获取当前时间
68.Java 实例 – 格式化时间(SimpleDateFormat)
69.Java 实例 – 数组并集
70.Java 实例 – 判断数组是否相等
71.Java 实例 – 在数组中查找指定元素
72.Java 实例 – 数组交集
73.Java 实例 – 数组差集
74.Java 实例 – 删除数组元素
75.Java 实例 – 标签(Label)
76.Java 实例 – continue 关键字用法
77.Java 实例 – break 关键字用法
78.Java 实例 – instanceof 关键字用法
79.Java 实例 – 方法覆盖
80.Java 实例 – 阶乘
81.Java 实例 – 斐波那契数列
82.Java 实例 – 汉诺塔算法
83.Java 实例 – 输出数组元素
84.Java 实例 – 方法重载
85.Java 实例 – 检测文件是否存在
86.Java 实例 – 在指定目录中创建文件
87.Java 实例 – 获取文件修改时间
88.Java 实例 – 创建文件
89.Java 实例 – 文件路径比较
90.Java 实例 – 重载(overloading)方法中使用 Varargs
91.Java 实例 – Varargs 可变参数使用
92.Java 实例 – for 和 foreach循环使用
93.Java 实例 – Enum(枚举)构造函数及方法的使用
94.Java 实例 – enum 和 switch 语句使用
95.Java 实例 – 文件写入
96.Java 实例 – 读取文件内容
97.Java 实例 – 删除文件
98.Java 实例 – 将文件内容复制到另一个文件
99.Java 实例 – 向文件中追加数据
100.Java 实例 – 创建临时文件