德国世界杯_2012年世界杯 - fyycdq.com

德国世界杯_2012年世界杯 - fyycdq.com

为什么要用Getters/Setters方法

为什么要用Getters/Setters方法

Getters/Setters的特征

​ ​ Getters/Setters通常用来保护你的数据,特别是在创建类时。

​ ​ 对于每个实例的属性,getter方法来返回它的值,而setter方法去设置或更新它的值,所以它们分别是访问器(accessors)和调整器(mutators)。

​ ​ 一般,getter以单词“get”开头,setter以单词“set”开头,后面跟着变量名。一般,getter以单词“get”开头,setter以单词“set”开头,后面跟着变量名。在这两种情况下,变量名的首字母都是大写的:

public class Vehicle {

private String color;

// Getter

public String getColor() {

return color;

}

// Setter

public void setColor(String c) {

this.color = c;

}

}

​ getter方法返回属性的值。setter方法接受一个参数并将其分配给属性。

​ 一旦定义了getter和setter,我们就在main中使用它:

public static void main(String[] args) {

Vehicle v1 = new Vehicle();

v1.setColor("Red");

System.out.println(v1.getColor());

}

// 输出 "Red"

​ getter和setter允许对值进行控制。在实际设置值之前,可以在setter中验证给定的值。

为什么要用Getters/Setters方法

​ getter和setter允许控制在代码中访问和更新重要变量的方式。例如,这个setter方法:

public void setNumber(int number) {

if (number < 1 || number > 10) {

throw new IllegalArgumentException();

}

this.number = num;

}

​ 通过使用' setNumber '方法,可以确保' number '的值始终在1到10之间。这比直接更新“number”变量要好得多:

obj.number = 13;

​ ​ 如果直接更新“number”,可能会在代码的其他地方产生意想不到的副作用。在这里,将“number”设置为13违反了我们想要建立的1到10的约束。

​ ​ 将' number '设置为私有变量并使用' setNumber '方法可以防止这种情况发生。

​ ​ 另一方面,读取' number '值的唯一方法是使用getter方法:

public int getNumber() {

return this.number;

}

​ 简而言之,使用Getter 和 Setter 函数有两个原因:

​1. 语法(syntax)原因。更轻松、更快速地读取使用访问器函数创建的代码

2.封装(Encapsulation)。可以使用访问器函数创建更安全的代码。这允许以后更容易地添加额外的功能(如验证)。

​ 隐藏属性的内部表示,同时使用替代表示公开属性。

​ ​ 如果private 是不让别人用, public 是让别人用,

​ ​ 但是有一种需求是让有的人用而让另外一些人不能用. 这时private/public的功能就出现短板了. 这时就有了set/get方法的用武之地了. 我们可以在set/get方法是设置, 如下:

public set(Object sth){

if(你满足权限条件){

你可以设置

}else{

对不起, 你没有设置的权限.

}

}

​ 下面是两个简单的例子:

例 1

// Java Program to Illustrate Getter and Setter

//导入输入输出类

import java.io.*;

// Class 1

// 助手类

class GetSet {

// 该类的成员变量

private String name;

// 方法 1 - Getter

public String getName() { return name; }

// 方法 2 - Setter

public void setName(String N)

{

// 这个关键字指的是当前实例本身

this.name = N;

}

}

// Class 2

// Main 方法

class GS {

public static void main(String[] args)

{

// 在 main() 方法中创建 Class1 的对象

GetSet obj = new GetSet();

// 通过调用 setter 方法设置名称

obj.setName("GetSet's name");

// 通过调用 getter 方法获取名称

System.out.println(obj.getName());

}

}

输出

GetSet's name

​ ​ Getter和Setter可以根据代码的要求方便地输入任何数据类型的变量值。getter和setter允许管理如何访问和修改代码中的关键变量。

例2

// Java Program to Illustrate Getter and Setter

// 导入输入输出类

import java.io.*;

class GetSet {

// 该类的成员变量

private int num;

// 方法 1 - Setter

public void setNumber(int number)

{

// 检查数字是否在 1到10 之间

if (number < 1 || number > 10) {

throw new IllegalArgumentException();

}

num = number;

}

// 方法 2 - Getter

public int getNumber() { return num; }

}

// Class 2

// Main class

class GS {

public static void main(String[] args)

{

GetSet obj = new GetSet();

// 在 main() 方法中调用 Class1

obj.setNumber(5);

// 打印上述设定的数字

System.out.println(obj.getNumber());

}

}

输出

5

​ ​ 这里我们可以看到,如果我们取一个大于10的值,那么它会显示错误。通过使用setNumber()方法,可以确保数字的值总是在1到10之间。这比直接更新number变量要好得多。

注意: 这可以通过将数字设置为私有变量并使用setNumber方法来避免。另一方面,使用getter方法是读取数字值的唯一方法。