我正在努力获得比目前所能理解的更好的理解……它是为了帮助我上课,而不是帮助我布置任何特定的家庭作业;我正在寻找我在教科书或教程中没有找到的更多概念性信息。在纯理论层面上,我明白为什么封装对 OO 编程很强大,但需要更好地理解具体发生了什么。我一直对数据流动的路径感到困惑,想知道我们从哪里获取和设置数据。希望这不是“没有愚蠢的问题”规则的异常(exception)。
考虑:
public class Employee
{
private int empNum;
public int getEmpNum()
{ return empNum; }
public void setEmpNum(int Emp)
{ empNum = emp; }
}
我对此的解释:使用从某处传递的 int Emp
,我们在 set...
方法中设置声明的 empNum 变量。然后,我们获取...
该变量并将其返回给调用方法。这样理解好吗?
进一步考虑:
import.javax.*
public class CreateEmp
{
public static void main(String[] args)
{
int ssn;
ssn = JOptionPane.showInputDialog(null,"enter ssn");
Employee newEmp = new Employee(123456789);
JOptionPane.showMessageDialog(null,"Employee ID " + newEmp.getEmpNum);
}
}
有了这个类,我不需要显式设置
一个变量,因为声明new Employee(123456789)
会自动将该值发送到set.. .
方法。 Employee 方法中的 return
将结果值返回给调用方法并使该变量可用,在本例中为我的对话框输出。我对此有把握吗?
这就是我感到困惑的地方。根据我上面提到的理解——这可能是错误的——我永远无法决定放置逻辑的最佳位置。例如:我会将“输入员工编号”对话框放在 Employee
类中,条件是仅当传递给方法的参数为 null 时才运行。在我看来,按照我对数据流的理解,该类的目的是获取员工编号。如果未提供默认值,则需要创建一个。我不确定这种想法是否是最佳实践,或者我以后是否会给自己带来麻烦。
我很想听听一些关于我是否正确理解正在发生的事情的想法。
最佳答案
第一,本站多用于可以具体回答的问题;与其说是理论问题。
无论如何,第一部分的“获取”和“设置”您理解得很好。现在,当您说您不需要明确设置员工编号时,因为您执行“新员工...”并不完全正确。如果您明确定义了一个构造函数,该构造函数接受一个整数作为参数,然后将“empNum”设置为等于争论的整数值,那么这将起作用。
Getter 和 setter 通常与“私有(private)”修饰符结合使用。 setter 可用于控制输入。例如,您可以检查提供的值是否大于零,如果您提供直接访问权限则不能。 Getters 只允许检索值,但要进行更改,您必须强制使用相应的 setter(如果有)。
如果未提供值,您应该如何默认设置一个值,您是对的。考虑到您检索的值(如果有)将用于不同的类。如果用户从未设置值怎么办?如果这不是您所期望的怎么办?不同的类,无论它是什么,仍然需要一个值,你仍然需要传递一些东西。通过设置默认值,不同的类可以识别“哦,这是默认值——这意味着用户可能没有提供正确的输入。”通过这样做,您创建了一个相对故障安全的应用程序;即使输入与预期不符,您也可以继续工作。
关于java - Java 中的 Get 和 Set 方法。它们是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9968682/