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. 61.volatile关键字

    volatile作用 volatile的作用是可以保持共享变量的可见性,即一个线程修改一个共享变量后,另一个线程能够读取到这个修改后的值. 先来看一个问题: 定义一个Task类 package com ...

  2. Python练习-不知道弄个什么鬼

    Alex大神,今天丢过来一个PDF,结果就成了这个样子! 1.  执行 Python 脚本的两种方式 交互方式:                   命令行 文件方式:                 ...

  3. 系统学习(javascript)_基础(语法)

    1.分类 ECMAScript  javascript的标准 DOM  Document object Model文档对象模型 BOM  Browser object Model 浏览器对象模型 ti ...

  4. 系统学习(javascript)_基础(数据类型一)

    五种基本数据类型:Number,String,Boolean,Null,Undefind: 三种引用数据类型:Object,Array,Symbol: Symbol为ECMAScript6新增的数据类 ...

  5. 20165230 2017-2018-2 《Java程序设计》第7周学习总结

    20165230 2017-2018-2 <Java程序设计>第7周学习总结 教材学习内容总结 第十一章 JDBC与MySQL数据库 本周了解了如何在Java程序中使用JDBC语提供的AP ...

  6. Linux内核跟踪之ring buffer的实现【转】

      转自:http://blog.chinaunix.net/uid-20543183-id-1930845.html ---------------------------------------- ...

  7. 深度解析:python之浅拷贝与深拷贝

    深度解析python之浅拷贝与深拷贝 本文包括知识点: 1.copy与deepcopy 2.可变类型与不可变类型 1.copy与deepcopy 在日常python编码过程中,经常会遇见变量的赋值.这 ...

  8. jQuery基本筛选器-表单筛选器-关系筛选器

    一.基本筛选器 :first // 第一个 :last // 最后一个 :eq(index)// 索引等于index的那个元素 :even // 匹配所有索引值为偶数的元素,从 0 开始计数 :odd ...

  9. 牛x的JavaScript编辑器你知道几个

    英文:Martin Heller  译文:葡萄城控件 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入学习交流群343599877,我们一起学前端! 对于JavaScript程序员来说,目前有很 ...

  10. performance 判断页面是以哪种方式进入的

    if (window.performance) { console.info("window.performance is supported"); console.log(per ...