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基础之封装的更多相关文章

  1. javaSE基础07

    javaSE基础07 一.static静态修饰符 用了static修饰的变量就会变成共享的属性,只会初始化一次,在内存中只存在一个,并且每个对象都可以访问,存放在方法区(数据共享区) 1.1 stat ...

  2. javaSE基础05

    javaSE基础05:面向对象 一.数组 数组的内存管理 : 一块连续的空间来存储元素. Int [ ] arr = new int[ ]; 创建一个int类型的数组,arr只是一个变量,只是数组的一 ...

  3. javase基础复习攻略《十》

    按照计划本篇为大家总结JAVA的网络编程,什么叫网络编程呢?网络编程!=网站编程,对于这一点大家一定要注意,很多小朋友都曾经这么认为.既然谈到网络编程,咱们先了解一下网络的基础知识,什么是计算机网络? ...

  4. 基础1 JavaSe基础

    JavaSe基础 1. 九种基本数据类型的大小,以及他们的封装类 boolean 无明确指定 Boolean char 16bits Character byte 8bits Byte short 1 ...

  5. JavaSE基础之JDBC

    JavaSE基础之JDBC 1.JDBC 的步骤: ①加载数据库驱动: a.MySQL:com.mysql.jdbc.Driver: b.SQLServer:com.microsoft.jdbc.sq ...

  6. 巩固JavaSE基础--IDEA完成实战项目

    PS:学习完JavaSE基础后,需要有一个项目来测试自己的学习成果,并加以巩固.所以在这里,就让我们来学习下“一本糊涂账”项目吧.(此项目来源于Java自学网站) 项目完成效果图一览

  7. javaSE基础06

    javaSE基础06 一.匿名对象 没有名字的对象,叫做匿名对象. 1.2匿名对象的使用注意点: 1.我们一般不会用匿名对象给属性赋值的,无法获取属性值(现阶段只能设置和拿到一个属性值.只能调用一次方 ...

  8. javaSE基础04

    javaSE基础04 一.三木运算符 <表达式1> ? <表达式2> : <表达式3> "?"运算符的含义是: 先求表达式1的值, 如果为真, ...

  9. javaSE基础03

    javaSE基础03 生活中常见的进制:十进制(0-9).星期(七进制(0-6)).时间(十二进制(0-11)).二十四进制(0-23) 进制之间的转换: 十进制转为二进制: 将十进制除以2,直到商为 ...

随机推荐

  1. sklearn_k均值聚类

    # 机器学习之k均值聚类 # coding:utf-8 import sklearn.datasets as datasets from sklearn.cluster import KMeans i ...

  2. python作业模拟计算器开发(第五周)

    作业需求: 模拟计算器开发: 实现加减乘除及拓号优先级解析 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/1 ...

  3. [转]CNN目标检测(一):Faster RCNN详解

    https://blog.csdn.net/a8039974/article/details/77592389 Faster RCNN github : https://github.com/rbgi ...

  4. 关于new Handler()与new Handler(Looper.getMainLooper())区别

    如果你不带参数的实例化:Handler handler=new Handler();那么这个会默认用当前线程的Looper对象. 一般而言,如果你的Handler是要用来刷新UI的,那么就需要在主线程 ...

  5. Git 创建仓库【转】

    转自:http://www.runoob.com/git/git-create-repository.html Git 创建仓库 本章节我们将为大家介绍如何创建一个 Git 仓库. 你可以使用一个已经 ...

  6. linux快速复制大量小文件方法 nc+tar【转】

    1,在需要对大量小文件进行移动或复制时,用cp.mv都会显得很没有效率,可以用tar先压缩再解压缩的方式.  2,在网络环境中传输时,可以再结合nc命令,通过管道和tcp端口进行传输.  nc和tar ...

  7. leetcode之 两数之和

    # -*- coding: utf-8 -*- # @Time : 2018/9/27 21:41 # @Author : cxa # @File : twonum.py # @Software: P ...

  8. 众签demo

    众签demo using System; using System.Collections.Generic; using System.Linq; using System.Text; using S ...

  9. asp.net 获取音视频时长 的方法

    http://www.evernote.com/l/AHPMEDnEd65A7ot_DbEP4C47QsPDYLhYdYg/ 日志:   1.第一种方法:   调用:shell32.dll ,win7 ...

  10. oracle11g的冷热备份

    1.冷备份 如果数据库可以正常关闭,而且允许关闭足够长的时间,那么就可以采用冷备份(脱机备份),可以是归档冷备份,也可以是非归档冷备份.其方法是首先关闭数据库,然后备份所有的物理文件,包括数据文件.控 ...