Java学习之封装

本文主要介绍了Java中的封装特性,包括封装的概念、好处、实现步骤和相关实例。封装能够隐藏实现细节,保证数据的安全合理性。文章通过一个入门案例展示了如何进行属性的私有化、设置公共的setter和getter方法,并在构造器中使用set方法进行数据验证。
摘要由CSDN通过智能技术生成

**学习重点:**面向对象编程的三大特征:封装、继承、多态度

封装介绍

封装:encapsulation就是把属性和方法封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作(方法),才能对数据进行操作(理论概念)
例子:电视机,用遥控器上的开关和音量按钮控制电视机,开机、关机、音量被封装在程序里,人们通过操作遥控器按钮来调用这些程序

封装的理解和好处

1)隐藏实现细节
方法(程序员把方法写好:连接数据库)<-----调用(只需要传入参数来调用方法实现功能,不关心细节)
2)可以对数据进行验证,保证其安全合理性
Person p = new Person();
p.name = “张三”;
p.age = 1200;
1200就是不合理的数据,但是程序并不认为是错误的,需要在封装过程中人为的进行合理验证

封装的实现步骤

1)将属性进行私有化 private (只有在同一个类中才可以访问,外部不能修改属性)
2)提供一个public set方法,用于对属性判断并赋值(比如第七章作业中的十三题,设置的setRadius方法),用于对属性进行判断并赋值
语法:
public void setXxx(类型 参数名){
//加入数据验证的业务逻辑(验证年龄)
属性 = 参数名;
}
3)提供一个public get方法,用于获取属性的值
public void getXxx(){//权限判断,Xxx某个属性
return xx;
}

入门案例

题目要求:
1)不能随便查看人的年龄,工资等隐私
2)对设置的年龄进行合理的验证,年龄合理(必须在 1-120)就设置,否则给默认
3)name的长度在 2-6 字符之间
做题思路:
1) 不能随便查看人的年龄,工资等隐私:将年龄、工资两个属性设置为private;
2) 2和3需要if-else语句
代码如下:

package com.hspedu.encap;

public class Encapsulation01 {
   
    public static void main(String[] args) {
   
        Person person = new Person();
        person.setName("我是谁");
        person.setAge(30);
        person.setSalary(30000);

        //调用info方法
        //因为还没有生成Encapsulation这个类
        //第一次运行使用鼠标右键run,后面可以用alt + r
        System.out.println(person.info());
        //只能通过get查看工资和年龄
        //直接访问person.age和person.salary都会报错
        System.out.println(person.getAge());
        System.out.println(person.getSalary());
    }
}
//题目要求:1)不能随便查看人的年龄,工资等隐私
//        2)对设置的年龄进行合理的验证,年龄合理(必须在 1-120)就设置,否则给默认
//        3)name的长度在 2-6 字符之间
class Person{
   
    public String name;
    private int age;//私有化,
    private double salary;//私有化
    
    //快捷键alt + insert
    //根据要求完善代码
    public String getName() {
   

        return name;
    }

    public void setName(String name) {
   
        //加入对数据的校验,相当于增加了业务逻辑
        //name.length()指的是name这个字符串的长度
        if(name.length() >= 2 && name.length() <= 6){
   
            this.name = name;
        }else{
   
            System.out.println("名字长度有误,请输入2-6字符之间的名字,默认名字");
            this.name = "无名";
        }

    }

    public int getAge() {
   

        return age;
    }

    public void setAge(int age) {
   
        //判断
        if(age >= 1 && age <= 120){
   
            this.age = age;
        }else{
   
            System.out.println("你设置的年龄有误,需要在1-120之间,给默认年龄18");
            //否则给默认
            this.age = 18;
        }
    }

    public double getSalary() {
   
        return salary;
    }

    public void setSalary(double salary) {
   

        this.salary = salary;
    }

    //写一个方法,返回属性信息
    public String info(){
   
    
        return "信息为 name=" + name + " age=" + age + " salary=" + salary;
    }

}

运行结果
在这里插入图片描述

构造器

将构造器和setXxx结合
如果在构造器中直接指定属性,那么上述代码中的逻辑判断就没有用处了(即便数据不合理,输出时也不会提示)

package com.hspedu.encap;

public class Encapsulation01 {
   
    public static void main
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值