Java中Getter和Setter方法及主要区别

 更新时间:2024年04月15日 09:01:12   作者:我是小甘子  
这篇文章主要给大家介绍了关于Java中Getter和Setter方法及主要区别的相关资料,getter和setter方法是用于封装类中的私有属性的方法,文中通过代码介绍的非常详细,需要的朋友可以参考下

前言

Getter方法和Setter方法:

Getter方法和Setter方法是面向对象编程中常用的方法,用于访问和修改对象的属性(成员变量)。

什么是getter方法?

Getter方法(也称为访问器)用于获取对象的属性值。它通常是一个公共的非静态方法,不接受任何参数,并返回属性的值。Getter方法的命名常以"get"开头,后面跟着属性的名称。例如,如果有一个名为"age"的属性,对应的Getter方法命名为"getAge"。

格式:[访问修饰符] 成员变量类型 getXxx(){ return 成员变量;}

什么是setter方法?

Setter方法(也称为修改器)用于修改对象的属性值。它通常是一个公共的非静态方法,接受一个参数,并用参数的值来更新属性的值。Setter方法的命名常以"set"开头,后面跟着属性的名称。例如,如果有一个名为"age"的属性,对应的Setter方法命名为"setAge"。

格式:[访问修饰符] void setXxx(成员变量l类型 参数){ 成员变量=参数 }

getter方法和setter方法作用:

Getter和Setter方法的使用可以有效地控制对对象属性的访问和修改,提供了封装性和安全性。

1.通过Getter方法,其他类可以获取属性的值而不需要直接访问属性;

2.通过Setter方法,其他类可以修改属性的值而不需要直接修改属性。

这样可以控制属性的访问权限,进行必要的验证和操作。

class Person {
   private String name;//设置成员变量
   private int age;

   public String getName(){//返回对象的成员变量的值
    return name;
  }
    public int getAge() {
        return age;
    }

    //注意!当方法的参数与成员变量名相同时,使用this来引用成员变量
    public void setName(String name) {
        this.name = name;
    }
    public void setAge(int age)throws Exception {//声明异常
        if (age >= 0) {
            this.age = age;
        } else {
            throw new Exception("年龄不能为负数!");//抛出异常
        }

设置测试类: 

//捕获异常
try{  //可能出现异常的代码
Person person = new Person();
person.setName("Alice");
person.setAge(25);
System.out.println("姓名:" + person.getName());
System.out.println("年龄:" + person.getAge());

}catch(Exception e){   //处理异常代码
    System.out.println(ehetMessage();
}
}

以上示例中,通过Getter和Setter方法,外部类可以访问和修改Person对象的name和age属性,保护了属性的访问和修改。

 Getter和Setter方法的好处:

  • 封装性:通过Getter和Setter方法,可以对属性的访问和修改进行控制。
  • 验证和操作:可以在Getter和Setter方法中实现对属性的验证和操作,例如范围检查、格式转换等,确保数据的合法性。
  • 可读性和可维护性:通过Getter和Setter方法可以提供更具描述性和可读性的代码,使代码更易于理解和维护。

Getter方法和Setter方法的主要区别:

  • 访问级别:通常情况下,类的属性被声明为私有,以实现封装的概念,即防止外部直接访问和修改属性。为了让外部代码能够安全地访问和修改属性的值,在类中定义getter和setter方法。这样,外部代码就可以通过调用这些方法来获取和设置属性的值,而不需要直接访问属性本身。
  • 方法命名:getter方法通常以get开头,后面跟着属性名,属性名的第一个字母大写。setter方法通常以set开头,后面跟着属性名,属性名的第一个字母大写。
  • 参数:setter方法需要一个参数,用于设置属性的值。getter方法不需要参数。
  • 返回值:getter方法需要返回属性的值,而setter方法不需要返回

总结

Getter和Setter方法是用于访问和修改对象属性的常用方法,它们提供了封装性,检验和操作的功能,通过规范的命名和方法签名,可以提高代码的可读性和维护性。在面向对象编程中,推荐使用Getter和Setter方法来操作对象的属性

实列:

1.创建学生类,对每个成员变量,增加getter与setter,其中成员变量score1和score2的值在0~100之间,否则抛出异常

package c7_1student;

public class Student {// 定义一个类
	private String id;// 设置成员变量
	private String name;
	private String className;
	private int score1;
	private int score2;

//getter和setter的写法

public String getId() {
		return id;
	}

	public String getName() {
		return name;
	}

	public String getClassName() {
		return className;
	}

	public int getScore1() {
		return score1;
	}

	public int getScore2() {
		return score2;
	}

	public void setId(String id) {
		this.id = id;
	}

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

	public void setClassName(String className) {
		this.className = className;
	}

	public void setScore1(int score1) throws Exception {
		if (score1 < 0 || score1 > 100) {
			throw new Exception("不在分数范围内");
		} else {
			this.score1 = score1;
		}

	}

	public void setScore2(int score2) throws Exception {
		if (score2 < 0 || score2 > 100) {
			throw new Exception("不在分数范围内");
		} else {
			this.score2 = score2;
		}

	}
    	public int sumOfScore() {// 总分数
		return score1 + score2;
	}

	public int maxOfScore() {//计算出最大值
		int max;
		if (score1 > score2) {
			max = score1;
		} else {
			max = score2;
		}
		return max;
	}
}

2.创建学生类对象,使用setter为对象设置值,显示对象的相关信息。

package c7_1student;

public class TestStudent {

	public static void main(String[] args) {
	
		try {  //有可能为异常代码
			Student stu1 = new Student();// 创建对象
			stu1.setId("202322048");
			stu1.setName("张三");
			stu1.setClassName("一年级");
			stu1.setScore1(100);
			stu1.setScore2(90);
			System.out.println("学号为" + stu1.getId());
			System.out.println("姓名为" + stu1.getName());
			System.out.println("班级为" + stu1.getClassName());
			System.out.println("第一科成绩" + stu1.getScore1());
			System.out.println("第二科成绩" + stu1.getScore2());
			System.out.println("成绩之和" + stu1.sumOfScore());
			System.out.println("最大值" + stu1.maxOfScore());
			System.out.println();
		} catch (Exception e) { //如有异常则抛出异常
			System.out.println(e.getMessage());
		}

以上是用getter和setter方法的实例,希望大家不要搞混淆这两者的用法,以及它们的返回类型。

总结

到此这篇关于Java中Getter和Setter方法及主要区别的文章就介绍到这了,更多相关Java中Getter和Setter方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 深入浅析Netty 在 Dubbo 中是如何应用的

    深入浅析Netty 在 Dubbo 中是如何应用的

    国内知名框架 Dubbo 底层使用的是 Netty 作为网络通信,那么内部到底是如何使用的呢?今天通过本文给大家详细讲解,对Netty 在 Dubbo中应用相关知识感兴趣的朋友跟随小编一起看看吧
    2020-05-05
  • JAVA异常分类和处理解析

    JAVA异常分类和处理解析

    这篇文章主要介绍了JAVA异常分类和处理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • mybatis-plus id主键生成的坑

    mybatis-plus id主键生成的坑

    这篇文章主要介绍了mybatis-plus id主键生成的坑,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • springboot使用hibernate validator校验方式

    springboot使用hibernate validator校验方式

    hibernate validator提供了一套比较完善、便捷的验证实现方式。下面小编给大家介绍下springboot使用hibernate validator校验方式,感兴趣的朋友一起看看吧
    2018-01-01
  • SpringBoot实现文件上传下载的7种方法

    SpringBoot实现文件上传下载的7种方法

    文件上传下载功能是Web应用中的常见需求,从简单的用户头像上传到大型文件的传输与共享,都需要可靠的文件处理机制,下面我们来看看SpringBoot中处理文件上传下载的7种方法吧
    2025-05-05
  • Java 并发编程的可见性、有序性和原子性

    Java 并发编程的可见性、有序性和原子性

    这篇文章主要介绍了Java 并发编程的可见性、有序性和原子性的相关资料,帮助大家更好的理解和学习Java并发编程,感兴趣的朋友可以了解下。
    2020-11-11
  • IDEA maven父工程pom.xml使用及说明

    IDEA maven父工程pom.xml使用及说明

    MavenPOM是Maven工程的基本工作单元,父工程的pom文件中使用<packaging>pom</packaging>表示使用maven分模块管理,父级项目通常使用pom作为packaging,并通过<properties>和<dependencyManagement>统一管理项目的版本号和依赖
    2026-01-01
  • Java设置PDF跨页表格重复显示表头行的步骤详解

    Java设置PDF跨页表格重复显示表头行的步骤详解

    这篇文章主要给大家介绍了关于Java设置PDF跨页表格重复显示表头行的相关资料,这里使用的是Free Spire.PDF for Java的jar包,Spire.PDF for Java 是一款专门对 PDF 文档进行操作的 Java 类库,需要的朋友可以参考下
    2021-07-07
  • Java Stream中的Spliterator类概念及原理解析

    Java Stream中的Spliterator类概念及原理解析

    Spliterator是Java 8引入的一个接口,位于java.util包中,它结合了迭代器(Iterator)的遍历能力和分割器(Splitter)的分割能力,本文将详细介绍Spliterator的概念、原理、作用、类中定义的关键方法,以及它在Stream API中的实际应用,感兴趣的朋友一起看看吧
    2024-08-08
  • SpringBoot Schedule调度任务的动态管理

    SpringBoot Schedule调度任务的动态管理

    Scheduled定时任务是Spring boot自身提供的功能,所以不需要引入Maven依赖包,下面这篇文章主要给大家介绍了关于SpringBoot通过@Scheduled实现定时任务以及问题解决的相关资料,需要的朋友可以参考下
    2023-02-02

最新评论