JavaSE基础之封装
JavaSE基础之封装
一、Java中的封装
1、字面意思:
包装;
2、专业含义:
面向对象的三大特征之一;
指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。
二、封装的目的
1、隐藏类的实现细节;
2、让使用者只能通过事先预定的方法来访问数据,从而可以在该方法里加入控制逻辑,限制对成员变量的不合理访问;
3、可进行数据检查,从而有利于保证对象信息的完整性;
4、便于修改,提高代码的可维护性;
三、如何实现良好的封装
1、将对象的成员变量和实现细节隐藏起来,不允许外部直接访问;
2、把方法暴露出来,让方法来控制对这些成员变量进行安全的访问和操作。
四、封装的实现
1、Java提供3个访问控制符:
private、protected和public;
2、4个访问控制级别:(访问范围越来越大)
private->default->protected->public;
3、访问控制级别表
| 同一个类 | 同一个包 | 不同包 | 不同包的非子类 | |
| public | 可以 | 可以 | 可以 | 可以 |
| default | 可以 | 可以 | 可以 | |
| protected | 可以 | 可以 | ||
| private | 可以 |
五、代码实现
1、实现封装的实体类:Person.java
package cn.com.zfc.lesson04.object.encapsulation; /**
*
* @title Person
* @describe 实现封装:注意 age 的 setter()方法
* @author 张富昌
* @date 2017年4月9日下午4:24:38
*/
public class Person { // 属性私有化
private String name;
private String sex;
private int age; // 提供一个无参的构造器
public Person() {
} // 提供私有成员变量的访问方法
public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
} public int getAge() {
return age;
} // 在给年龄赋值的时候,得判断当前年龄是否合法
public void setAge(int age) throws RuntimeException {
if (age < 0) {
throw new RuntimeException("年龄不能小于 0 啊");
} else if (age > 200) {
throw new RuntimeException("你是老妖怪吗?都有200多岁了");
} else {
this.age = age;
}
} // 重写 toString()方法,便于测试
@Override
public String toString() {
return "Person [name=" + name + ", sex=" + sex + ", age=" + age + "]";
} }
2、测试封装:TestEncapsulation.java
package cn.com.zfc.lesson04.object.encapsulation; /**
*
* @title TestEncapsulation
* @describe 测试封装
* @author 张富昌
* @date 2017年4月9日下午4:25:40
*/
public class TestEncapsulation {
public static void main(String[] args) {
// 创建 Person 对象
Person person = new Person(); // 给 Person 对象的 name 属性赋值
person.setName("张富昌"); // 获取 Person 的 name 属性值
String name = person.getName();
System.out.println("Person's name:" + name); // 给 Person 对象的 age 成员变量赋值,这是可以检验数据的合法性
person.setAge(300);
}
}
测试结果:

JavaSE基础之封装的更多相关文章
- javaSE基础07
javaSE基础07 一.static静态修饰符 用了static修饰的变量就会变成共享的属性,只会初始化一次,在内存中只存在一个,并且每个对象都可以访问,存放在方法区(数据共享区) 1.1 stat ...
- javaSE基础05
javaSE基础05:面向对象 一.数组 数组的内存管理 : 一块连续的空间来存储元素. Int [ ] arr = new int[ ]; 创建一个int类型的数组,arr只是一个变量,只是数组的一 ...
- javase基础复习攻略《十》
按照计划本篇为大家总结JAVA的网络编程,什么叫网络编程呢?网络编程!=网站编程,对于这一点大家一定要注意,很多小朋友都曾经这么认为.既然谈到网络编程,咱们先了解一下网络的基础知识,什么是计算机网络? ...
- 基础1 JavaSe基础
JavaSe基础 1. 九种基本数据类型的大小,以及他们的封装类 boolean 无明确指定 Boolean char 16bits Character byte 8bits Byte short 1 ...
- JavaSE基础之JDBC
JavaSE基础之JDBC 1.JDBC 的步骤: ①加载数据库驱动: a.MySQL:com.mysql.jdbc.Driver: b.SQLServer:com.microsoft.jdbc.sq ...
- 巩固JavaSE基础--IDEA完成实战项目
PS:学习完JavaSE基础后,需要有一个项目来测试自己的学习成果,并加以巩固.所以在这里,就让我们来学习下“一本糊涂账”项目吧.(此项目来源于Java自学网站) 项目完成效果图一览
- javaSE基础06
javaSE基础06 一.匿名对象 没有名字的对象,叫做匿名对象. 1.2匿名对象的使用注意点: 1.我们一般不会用匿名对象给属性赋值的,无法获取属性值(现阶段只能设置和拿到一个属性值.只能调用一次方 ...
- javaSE基础04
javaSE基础04 一.三木运算符 <表达式1> ? <表达式2> : <表达式3> "?"运算符的含义是: 先求表达式1的值, 如果为真, ...
- javaSE基础03
javaSE基础03 生活中常见的进制:十进制(0-9).星期(七进制(0-6)).时间(十二进制(0-11)).二十四进制(0-23) 进制之间的转换: 十进制转为二进制: 将十进制除以2,直到商为 ...
随机推荐
- Hibernate5笔记8--Hibernate事务相关内容
Hibernate事务相关内容: (1) 事务四大特性(简称ACID): (1)原子性(Atomicity) 事务中的全部操作在数据库中是不可分割的,要么全部完成,要么均不执行. (2)一致性(Con ...
- margin-bottom无效问题以及div里内容动态居中样式!
最近调前端样式时候,遇到一个需求,在中间文字不对等的情况下想让下面的操作文字距离底部对齐,如图: , 刚开始觉得使用margin-bottom就可以,后来发现只有margin-top是管用的,查了资料 ...
- Python标准库笔记(11) — Operator模块
Operator--标准功能性操作符接口. 代码中使用迭代器时,有时必须要为一个简单表达式创建函数.有些情况这些函数可以用一个lambda函数实现,但是对于某些操作,根本没必要去写一个新的函数.因此o ...
- Linux下如何在进程中获取虚拟地址对应的物理地址【转】
转自:http://blog.csdn.net/kongkongkkk/article/details/74366200 如果让你编写一个程序,来获取虚拟地址对应的物理地址..你会试着操作MMU吗.. ...
- kworker内核工作队列详解
工作队列是另一种将工作推后执行的形式,它可以把工作交给一个内核线程去执行,这个下半部是在进程上下文中执行的,因此,它可以重新调度还有睡眠. 区分使用软中断/tasklet还是工作队列比较简单,如 ...
- linux sigaction 函数 用法释义
使用 sigaction 函数: signal 函数的使用方法简单,但并不属于 POSIX 标准,在各类 UNIX 平台上的实现不尽相同,因此其用途受 到了一定的限制.而 POSIX 标准定义的信号处 ...
- Android 抽屉导航
原文地址 http://developer.android.com/training/implementing-navigation/nav-drawer.html 创建抽屉导航 导航抽屉是在 屏幕左 ...
- window.print打印方法实现
vue中使用window.print打印效果 项目要求 打印每页有10行表格,如果接口数据没有十个显示10行 效果图 第一页 第二页 子组件 <template> <div> ...
- [HBase] 服务端RPC机制及代码梳理
基于版本:CDH5.4.2 上述版本较老,但是目前生产上是使用这个版本,所以以此为例. 1. 概要 说明: 客户端API发送的请求将会被RPCServer的Listener线程监听到. Listene ...
- 使用免安装压缩包安装MySQL
OS:Windows 10家庭中文版 MySQL:mysql-5.7.20-winx64.zip 作者:Ben.Z 参考链接: Installing MySQL on Microsoft Window ...