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