JAVA的getter与setter方法

目录

前言

为什么需要Getter与Setter方法?

getter与setter方法

getter与setter的定义

问题的提入︰

程序举例一

getter与setter中代码处理

对输入数据进行检验的Setter方法

对读出数据进行处理的getter方法

getter与setter的选择使用

异常的处理

声明异常

抛出异常

捕获异常

总结


前言

当我们谈论Java编程和面向对象编程(OOP)的基本概念时,封装是一个不可避免的话题。而在封装的过程中,getter和setter方法扮演了非常重要的角色。这些方法允许我们安全地访问和修改对象的内部状态,同时隐藏了实现的细节。

为什么需要Getter与Setter方法?

在Java中,类的属性通常被声明为私有的(private),以确保数据的封装和隐藏。这样做的好处是,我们可以控制对类内部数据的访问和修改,从而确保数据的完整性和安全性。但是,如果我们想要从类的外部访问或修改这些私有属性,该怎么办呢?这就是getter和setter方法发挥作用的地方。

getter与setter方法

1、Java不提倡将成员变量的保护级别设为public,而使用户在类外任意操作,对所有有必要在类外可见的成员变量,Java推荐采用“方法”来处理。
2、Java通过方法用于读取和写入成员变量值,而不是直接读取和写入,以此来提供对类中成员变量的保护。
3、使用方法,还可以对输入的数据进行检验。

getter与setter的定义

getter(获取器)和setter(设置器)是一种用于访问和修改对象属性的方法。getter方法用于获取对象的属性值,而setter方法用于设置对象的属性值。可以通过getter和setter方法来实现对属性的封装,隐藏属性的具体实现细节,以及对属性值进行控制和验证。通过getter和setter方法,可以更安全地访问和修改对象的属性


getter方法

Getter方法是一种公开的方法,用于返回私有属性的值。通常,getter方法的命名遵循一定的规范,即“get”+属性名(首字母大写)。例如,对于一个名为“name”的私有属性,其getter方法可能如下所示:

返回对象内部的成员变量的值

格式:

[访问修饰符] 成员变量类型 getXxx(){

        return 成员变量;

}


public String getName() {  
    return name;  
}

setter方法

与getter方法类似,setter方法也是一种公开的方法,用于设置私有属性的值。setter方法的命名规范通常是“set”+属性名(首字母大写),并且它接受一个参数,该参数的类型与要设置的属性相同。例如,对于一个名为“name”的私有属性,其setter方法可能如下所示:

public void setName(String name) {  
    this.name = name;  
}

问题的提入︰

1.长方形类中所有成员变量都是公有的,不利于对成员变量的保护。

2.长方形类中的width、height除了可以输入正数外,还可以输入负数。

程序举例一

public class Rectangle{    //定义长方形类,类名Rectangle
    private int width;    //成员变量,宽
    private int height;    //成员变量,高
        //读width的值
    public int getWidth(){
        return width;
    }
        //读height
    public int getHeight(){
        return height;
    }
     //对width进行赋值
    public void setWidth(int width){
        this.width=width;
    }
        //对height进行赋值
    public void setHeight(int height){
        this.height=height;
    }

}

注意:当方法的参数与成员变量名相同时,使用this来引用成员变量名。
使用getter与setter之前

Rectangle rect1=new Rectangle();    //创建Rectangle类的对象
rect1.width=12;    //赋值长方形rect1的宽
rect1.height=5;    //赋值长方形rect1的高
System.out.println("长方形的宽为:"rect1.width+",长方形的高为:"+rect1.height);

使用getter与setter之后

Rectangle rect1=new Rectangle();    //创建Rectangle类的对象
rect1.setWidth(12);    //赋值长方形rect1的宽
rect1.setHeight(5);
System.out.println("长方形的宽为:"+rect1.getWidth());
System.out.println("长方形的高为:"+rect1.getHeight());

getter与setter中代码处理

getter、setter用于读取和写入成员变量值,可在方法中增加代码进行数据处理。

使用setter可以对输入的数据进行检验

使用getter可以对读出的数据进行处理

对输入数据进行检验的Setter方法

public class Student{
    private String name;//姓名
    private int age;//年龄,在15-30岁之间
    private String sex;//性别
    
    public String getName(){
        reutrn name;
    }
    public int getAge(){
        return age;
    }
    public String getSex(){
        return sex;
    }
    public void setName(String name){
        this.name=name;
    }
    public void setAge(int age) throws Exception {//方法头中声明异常
        if(age<15||age>30){
            throw new Exception("年龄不符合要求");//抛出异常
        }else{
            this.age=age;
        }
    }
    public void setSex(String sex) throws Exception {//方法头中声明异常
        if("男".equals(sex)||"女".equals(sex)){
            this.sex=sex;
        }else{
            throw new Eception("性别输出错误");//抛出异常
        }
    }
   
}

思考︰如果增加成员变量电话号码,如何对输入的电话号码进行检验?(要求长度为11位,且只能是数字)

 

public class TextStudent{
    public static void main(String[] args){
        Student s1=new Student();
        try{
            //可能出现异常的代码
             s1.setName("李明");
             s1.setAge(30);
             s1.setSex("男");
             System.out printh("姓名为%s,年龄为%d,性别为%s\n",s1.setName(),s1.setAge(),s1.setSex());
        }catch(Exception e){
            //异常代码处理
            System.out.println(e.getMessage())
        }
    }

}

注意:
System.out.printf():按指定的格式输出。

%d:格式化为十进制整数

%s:格式化为字符串


对读出数据进行处理的getter方法

public class Person{
    private String name;//姓名
    private String phone;//电话号码
    public String gerName(){
        return name;
    }
    public String getPhone(){
        //隐藏电话号码的中间四位
        return phone.substring(0,3)+"****"+phone.substring(7);
    }
    public void setName(String name){
        this.name=name;
    }
    public void setPhone(String phone){
        this.phone=phone;
    }
}
public class TestPerson {
    public static void main(String[] args){
        Person p1=new Person();
        p1.setName("李明");
        p1.setPhone("13711028365");
        System.out.println("姓名,"+p1.getName());
        System.out.println("电话号码,"+p1.getName());
    }
}

说明:

substring方法实现从当前字符串中取子字符串
substring(a,b):取出下标a到下标b-1之间的子字符串

substring(a):取出下标a到结束的子字符串

代码实现:

getter与setter的选择使用

getter与setter可根据需要只有其中一个。

如果只需要读取成员变量的值,可以只编写getter方法;

如果只需要对成员变量赋值,可以只编写setter方法。
 

//  读height
//  public int getHeight(){
        return height;
    }
//  对height进行赋值,并对传入的数值进行检验
public void setHeight(int height) throws Exception{
    if (height<0){
        thows new Exception("高度不能小于0");
    }else{
        this.height=height;
    }
}

异常的处理
 

声明异常

public void setAge(int age) throws Exception

抛出异常

throws new Exception("年龄不符合要求");

捕获异常

try{
    //可能出现异常的代码
    s1.setAge(30);
    s1.setSex("男");
    Syetem.out.printf("年龄为%d,性别为%s\n",s1.setAge(),s1.getSex());
} catch(Exception e){
    //异常处理代码
    System.out.println(e.getMessage())
}

总结

Getter和setter方法是Java编程中封装数据的基本工具。通过使用这些方法,我们可以安全地访问和修改对象的内部状态,同时隐藏实现的细节。在编写Java类时,建议始终为私有属性提供getter和setter方法,以确保数据的完整性和安全性。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值