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,直到商为 ...
随机推荐
- 运用jQuery实现动态点赞
写一个动态点赞的小案例吧! 虽然有点low,但是初学者可以看看! .Css文件 .content{ border: 1px solid black; font-size: 20px; height: ...
- 排序算法的java实现
冒泡.选择就不写了.很常见 一:插入排序: /** * 插入排序 */ public class P4_3 { static void insertSort(int[] a){ int j,t; /* ...
- 2016.5.16——leetcode:Reverse Bits(超详细讲解)
leetcode:Reverse Bits 本题目收获 移位(<< >>), 或(|),与(&)计算的妙用 题目: Reverse bits of a given 3 ...
- 【Java基础】JAVA不可变类(immutable)机制与String的不可变性
一.不可变类简介 不可变类:所谓的不可变类是指这个类的实例一旦创建完成后,就不能改变其成员变量值.如JDK内部自带的很多不可变类:Interger.Long和String(8种基本数据类型的包装类和S ...
- Strusts2笔记5--数据验证
数据验证: 输入验证分为客户端验证与服务器端验证.客户端验证主要通过JavaScript脚本进行,而服务器端验证主要是通过Java代码进行验证. 分为以下四种情况: (1)手工编写代码,对Action ...
- 在linux上安装完oracle数据库后,如何修改ORACLE_HOSTNAME
1.修改HOSTS文件,添加node2到本机IP地址的映射: [root@node2home]# gedit /etc/hosts 最后一行为添加的: 127.0.0.1 localhost loca ...
- rsync本地及远程复制备份【原创】
1.安装rsyncyum instsall rsync 2.本地复制 rsync -auq --progress --delete /tongbu1/ /tongbu2/ rsync -auq --p ...
- 转载:Google 官方应用架构的最佳实践指南 赞👍
官方给的实践指南,很有实际的指导意义, 特别是对一些小公司,小团队,给了很好的参考意义. 原文地址: https://developer.android.com/topic/libraries/ar ...
- 【Android开发日记】之入门篇(七)——Android数据存储(上)
在讲解Android的数据源组件——ContentProvider之前我觉得很有必要先弄清楚Android的数据结构. 数据和程序是应用构成的两个核心要素,数据存储永远是应用开发中最重要的主题之一,也 ...
- python随笔(三)
在对字符串的操作中,s[::-1]表示将字符串逆序输出. 字符串本身不能改变(管理者而非所有者) 列表的内容是可以改变的,且列表的内容可以不仅仅是字符串.对于一个列表,注意b=a和b=a[:]的区别. ...