Java从零开始学十三(封装)
一、什么是封装,为什么要封装
对面向对象而言:封装就是将方法和属性包装到一个程序单元中,并且这个单元以类的形式实现。
简单讲:封闭就是将属性私有化,提供公有方法来访问私有属性
封装的作用:
- 封装反映和事物的相对独立性,封装在编程中的作用就是:使对象以外的部分不能随意更改对象的属性,从而有效避免了外部错误操作对此对象的影响
- 提高松耦合性,代码重用性
松耦合:把对象想象成一个电池,这个电池不仅可以在相机中使用,也可以在遥控器,吹风机和剃须发等中使用, 我们说电池的松耦合性是非常好,而实现如此好的松耦合的前提就是对象有很好的封装性
二、封装的实现
- 属性私有化private
- 设置get/set方法
- 对属性设置必要的限制
package com.pb.demo3; public class Person {
private String name; //姓名
private String sex; //性别
private int age;//年龄 //设置getter和setter方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
if(sex.equals("男") || sex.equals("女")){
//设置性别限制,不合法的值将提示错误
this.sex = sex;
}else{
System.out.println("性别不合法,性别只能是:男或者女");
}
}
public int getAge() {
return age;
}
public void setAge(int age) {
if(age>0 && age<=150){
//设置年龄限制
this.age = age;
}else{
System.out.println("年龄只能在1-150岁之间");
}
}
public Person() { }
public Person(String name, String sex, int age) {
this.name = name;
this.sex = sex;
this.age = age;
} public void say(){
System.out.println("自我介绍:");
System.out.println("姓名:"+this.name);
System.out.println("性别:"+this.sex);
System.out.println("年龄:"+this.age);
} }
测试类:
package com.pb.demo3; public class PersonTest { public static void main(String[] args) {
Person person=new Person();
person.setName("韩冰");
//传入不合法的值
person.setSex("中性");
//传入不合法的值
person.setAge(200);
//调用普通方法输出
person.say(); } }
结果:将提示错误
性别不合法,性别只能是:男或者女
年龄只能在1-150岁之间
自我介绍:
姓名:韩冰
性别:null
年龄:0
从结果可以看出,不合法的值,将为该数据类型的初始值String 为null,int 为0
也可以在构造方法中为值进行初始化,这样,设置值为不合法时,就会使用初始化的值
public Person() {
this.name = "无名氏";
this.sex = "男";
this.age = 22;
}
再执行错误的值传入时
package com.pb.demo3; public class PersonTest { public static void main(String[] args) {
Person person=new Person();
person.setName("韩冰");
//传入不合法的值
person.setSex("中性");
//传入不合法的值
person.setAge(200);
//调用普通方法输出
person.say(); } }
结果:
性别不合法,性别只能是:男或者女
年龄只能在1-150岁之间
自我介绍:
姓名:韩冰
性别:男
年龄:22
Java从零开始学十三(封装)的更多相关文章
- Java从零开始学三十三(JAVA IO- File类)
一.简述 在整个io包中,唯一表示与文件本身有关的类就是File类.使用File类可以进行创建或删除文件等常用操作.要想使用File类,则首先要观察File类的构造方法,此类的常用构造方法如下所示: ...
- Java从零开始学二十三(集合Map接口)
一.Map接口 Collection.Set.List接口都属于单值的操作,即:每次只能操作一个对象,而Map与它们不同的是,每次操作的是一对对象,即二元偶对象,Map中的每个元素都使用key à v ...
- Java从零开始学四十三(DOM4j解析XML)
一.创建XML // 建立XML public static void gernatorXML() { // 创建Document对象 Document doc = DocumentHelper.cr ...
- Java从零开始学四十五(Socket编程基础)
一.网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...
- Java从零开始学二十六(包装类)
一.包装类 包装类是将基本类型封装到一个类中.也就是将基本数据类型包装成一个类类型. java程序设计为每一种基本类型都提供了一个包装类.这些包装类就在java.lang包中.有8个包装类 二.包装类 ...
- Java从零开始学四十七(注解简述)
一.Java中注解Annotation 什么是注解:用来描述数据的数据(元数据). Java代码里的特殊标记.它为代码中添加用Java程序无法表达的额外信息提供一种形式化的方法,使用我们可以在未来的某 ...
- Java从零开始学四十四(多线程)
一.进程与线程 1.1.进程 进程是应用程序的执行实例. 进程是程序的一次动态执行过程,它经历了从代码加载.执行到执行完毕的一个完整过程,这个过程也是进程本身从产生.发展到最终消亡的过程 特征: 动态 ...
- Java从零开始学四十二(DOM解析XML)
一.DOM解析XML xml文件 favorite.xml <?xml version="1.0" encoding="UTF-8" standalone ...
- Java从零开始学四十一(反射简述二)
一.实例化Class类对象 实例化Class类对象的方法有三种: 第一种:通过forName()方法 第二种:类.class 第三种:对象.getClass() 二.Class类的常用方法 No. 方 ...
随机推荐
- hdu 4452 Running Rabbits 模拟
Running RabbitsTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- PHP获取数组中奇偶数
获取PHP数组中的奇偶数,可通过数组过滤函数array_filter(),看定义:该函数把输入数组中的每个键值传给回调函数.如果回调函数返回 true,则把输入数组中的当前键值返回结果数组中.数组键名 ...
- TeamViewer运行在Windows Server 2008下连接时错误提示:正在初始化显示参数
这个是使用远程桌面安装和使用Teamviewer的问题,解决方法: 实际上安装完成后TeamViewer有两个ID,一个是个人ID(就是上面卡住的780 567 914),另一个是服务器ID,我们通过 ...
- Mac使用自带的屏幕共享实现VNC连接KVM时需要输入密码的问题解决
别试了,下载这个软件VNC-Viewer,苹果自带的那个不行!!! https://www.realvnc.com/en/connect/download/viewer/macos/
- FolderSync Instant sync 即时同步
Folderpairs - Edit folderpair - Sync options - Instant sync Select this for instant sync on change. ...
- VS增强插件 Supercharger破解教程
Supercharger 破解教程:步骤:1.打开Supercharger的options; 2.点击Pricing & Registration 3.复制 license tt4e2HN4X ...
- [转载] 为Visual Studio添加默认INCLUDE包含路径的方法
原文地址 你是否曾经也有过这样的问题: 用VS的时候,有时会用到一些非自带的库,例如WTL.Boost.DX等,每次需要用到时都要在项目属性里添加相应的include目录,久而久之觉得有点麻烦.是否有 ...
- 理解与学习linux 文件系统的目录结构
1. linux文件系统的结构 linux文件系统是以一种树形结构存在,Linux的文件系统的入口就是/,所有的目录.文件.设备都在/之下,/就是Linux文件系统的组织者,也是最上级的领导者. 2. ...
- 一个VLAN配置的实际例子
背景很简单,和一般的eth-switch通过VLAN做成路由的方式一样. 首先看一种硬件效率较高的方法: Port1~4作为access口,同时在硬件上作为用户模式,即从PC发往这些端口的数据 ...
- Android之使用picker打开相应的app
Android之使用picker打开相应的app,如果是music则可以选择是否使用相应打开的app进行播放. 在Manifest中设置,则可在选择音频文件的时候使用配置了以下的app打开 <i ...