java - Java 中的 Get 和 Set 方法。它们是如何工作的?

标签 java oop

我正在努力获得比目前所能理解的更好的理解……它是为了帮助我上课,而不是帮助我布置任何特定的家庭作业;我正在寻找我在教科书或教程中没有找到的更多概念性信息。在纯理论层面上,我明白为什么封装对 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/

相关文章:

java - LinkedHashMap 是如何工作的?

java - 调用 setDataPreSorted(true) 后 DynamicReports 交叉表报告列分组中断

java - 在 Java 中定义一些特定的日期格式化程序作为枚举的成员

java - 为什么 HashMap 在达到不需要的 TREEIFY_THRESHOLD 值时会调整大小?

java - 在 Java 和 C 文件中创建属性

java - 为方法设置时间限制/超时

python - 从 self var python 获取正确的输出

java - 从 ArrayList Java 获取实例变量值

oop - Kotlin 中的 OVERRIDE_BY_INLINE

c++ - 使用来自不同类的对象时出错