Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中获取和设置方法。它们是如何工作的?_Java_Oop - Fatal编程技术网

在Java中获取和设置方法。它们是如何工作的?

在Java中获取和设置方法。它们是如何工作的?,java,oop,Java,Oop,我正在努力获得比目前为止更好的理解…这是为了帮助我上课,但不是任何具体的家庭作业;我正在寻找更多的概念性信息,这些信息在我的课本或教程中都找不到。在纯粹的理论层面上,我理解了为什么封装对于OO编程来说是强大的,但需要更好地理解具体发生了什么。我一直对数据流动的路径感到困惑,不知道我们从哪里获取和设置数据。希望这不是“没有愚蠢问题”规则的例外 考虑: public class Employee { private int empNum; public int getEmpNum

我正在努力获得比目前为止更好的理解…这是为了帮助我上课,但不是任何具体的家庭作业;我正在寻找更多的概念性信息,这些信息在我的课本或教程中都找不到。在纯粹的理论层面上,我理解了为什么封装对于OO编程来说是强大的,但需要更好地理解具体发生了什么。我一直对数据流动的路径感到困惑,不知道我们从哪里获取和设置数据。希望这不是“没有愚蠢问题”规则的例外

考虑:

 public class Employee
 {
    private int empNum;
    public int getEmpNum()
    {   return empNum;   }
    public void setEmpNum(int Emp)
    {   empNum = emp;   }
 }
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);
     }
 }
我的解释是:使用从某处传递的
intemp
,我们在
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);
     }
 }
对于这个类,我不需要显式地
设置变量,因为声明
新员工(123456789)
会自动将该值发送到
set…
方法。Employee方法中的
return
将结果值返回给调用方法,并使该变量可用,在本例中,该变量用于我的对话框输出。我能处理吗

这就是我感到困惑的地方。根据我上面提到的理解——这可能是错误的——我永远无法决定把逻辑放在什么地方。例如:我会将“输入员工编号”对话框放在
employee
类中,条件是仅当传递给该方法的参数为null时才运行。在我看来,当我理解数据流时,该类的目的是获取员工编号。如果未提供默认值,则需要创建一个。我不确定这种想法是否是最佳实践,或者我是否会在以后给自己制造麻烦


我很想听到一些关于我是否正确理解正在发生的事情的想法。

对私有变量使用公共访问器的目的是控制如何访问这些变量,并确保所有内部状态保持一致。例如,一个类可能同时具有
age
birthdate
变量。设置出生日期也会隐式设置年龄。如果直接访问这些变量,则有可能将其设置为不一致的值(即生日表示他们30岁,但年龄设置为35岁)。通过使用setter,我们可以确保设置出生日期将重置正确的年龄

在本例中,使用setter还允许我们将
age
变量转换为生成的属性。由于可以使用
出生日期
直接确定年龄,因此可以为
年龄
创建一个getter,让它直接计算并返回年龄,而无需将其存储在任何位置


如果我们使用getter和setter公开这些对象属性,我们就可以自由地切换实现(例如删除
age
变量并动态计算它)对象的用户不必担心它。

对私有变量使用公共访问器的目的是控制如何访问这些变量,并确保所有内部状态保持一致。例如,一个类可能同时具有
age
birthdate
变量。设置出生日期也会隐式设置年龄。如果直接访问这些变量,则有可能将其设置为不一致的值(即生日表示他们30岁,但年龄设置为35岁)。通过使用setter,我们可以确保设置出生日期将重置正确的年龄

在本例中,使用setter还允许我们将
age
变量转换为生成的属性。由于可以使用
出生日期
直接确定年龄,因此可以为
年龄
创建一个getter,让它直接计算并返回年龄,而无需将其存储在任何位置


如果我们使用getter和setter来公开这些对象属性,我们可以自由地切换实现(例如删除
age
变量并动态计算),而不需要对象的用户担心它。

这取决于您如何使用Employee对象。如果在构建时,您始终提供员工编号,或者自动提供一个,并且员工编号从未在其他任何地方设置,那么您将不需要设置方法

但是,如果在某个时候您要将员工编号设置为其他内容(可能发生错误,需要更新编号),则需要使用“set”方法。在这种情况下,从构造函数中调用“set”方法可能是最简单的


这实际上取决于Employee类的使用/实例化方式。

这取决于Employee对象的使用方式。如果在构建时,您始终提供员工编号,或者自动提供一个,并且员工编号从未在其他任何地方设置,那么您将不需要设置方法

但是,如果在某个时候您要将员工编号设置为其他内容(可能发生错误,需要更新编号),则需要使用“set”方法。在这种情况下,从构造函数中调用“set”方法可能是最简单的

这实际上取决于Employee类将如何使用/实例化。

你说

对于这个类,我不需要显式设置变量,因为声明新员工(123456789)会自动将该值发送到集合。。。方法

我很确定那不是真的。考虑一下这个问题:java创建一个雇员对象,构造函数接收值<代码> 123456789 <代码>。它如何知道它需要转换为哪个变量
new Employee(123456789)
public class Employee
{
  private int empNum;

  public Employee(int employeeNum) {
    empNum = employeeNum;
  }
  public int getEmpNum() {
    return empNum;   
  }
  public void setEmpNum(int Emp) {
    empNum = emp;   
  }
}