当前位置: 首页 > 知识库问答 >
问题:

Java如果没有set方法,为什么我们需要一个声明为Final的实例变量?

陶高峻
2023-03-14

当我在学习Java课程时,我遇到了这个练习,在那里我创建了一个委托职业者课程。

public class CommissionEmployee extends Object{  //This is not required, because every class extends Object by default, and the toString method in Object is returned when printing an object.
private final String firstname;
private final String lastname;
private final String socialSecurityNumber;
private double grossSales;
private double commissionRate;

public CommissionEmployee(String firstname, String lastname, String socialSecurityNumber, double grossSales, double commissionRate){ //constructor starts here

而这个类里面定义的所有方法只有getFirstname(),getLastname等。并且没有set方法来改变已经初始化的对象,只有通过将所有变量作为参数传递才能创建对象,因为没有默认的构造函数。

在这种情况下,为什么实例变量被声明为私有的最终字符串?为什么我的课程教师不喜欢私人字符串?以及为什么总销售佣金率没有宣布为最终的

共有3个答案

司英飙
2023-03-14

Final关键字的大部分目的是表示意图。像firstname、lastname和Social alSecurityNumber这样的东西意味着不会在您的程序过程中发生变化,而grosssales可能会发生变化。

final有助于防止以后意外更改它,这在具有多个开发人员的大型项目中尤其有用,例如,您可能依赖于ssn不更改,并使用它来构建缓存以更快地查找,稍后如果它不是final,另一个开发人员可能会出于其他目的更改ssn,现在您的缓存将中断。通过添加final,它显示了您的意图,即这是一件不应该改变的事情。

顾昌翰
2023-03-14

将第一个、最后一个和SSN设置为<code>final<code>使这些字段不可变。想想看…这些领域什么时候需要改变?可能永远不会……除非您正在编写一个支持合法名称更改等的应用程序。这就是为什么它们是<code>final格罗萨莱斯和佣金率,它们可以在委员会雇员中更改

阮阳曦
2023-03-14

一个成员在没有初始化的情况下声明为私有的最终字符串意味着1)该成员必须在构造时设置,并且2)它不能随后设置为引用另一个字符串。这两件事有助于提高程序的稳定性。此外,由于任何特定字符串都是不可变的,因此这些字段是常量

至于双精度字段,也许这些是允许更改的?

 类似资料:
  • 问题内容: 为什么编译器没有在开关中的每个代码块之后自动放置break语句?是出于历史原因吗?您何时要执行多个代码块? 问题答案: 有时将多个案例与同一代码块关联会很有帮助,例如 等。只是一个例子。 以我的经验,通常“摔倒”并在一种情况下执行多个代码块是不好的风格,但是在某些情况下可能会有用处。

  • 问题内容: 我读到要使一个类在Java中不可变,我们应该执行以下操作: Do not provide any setters Mark all fields as private Make the class final标记为私有 为什么需要步骤3?我为什么要上课呢? 问题答案: 如果你不标记该类,那么我可能会突然使你看似不变的类真正变得可变。例如,考虑以下代码: 现在,假设我执行以下操作: 注意

  • 问题内容: 如果我们使用ExecutorCompletionService,则可以将一系列任务作为s 提交,并将结果作为进行交互。 但也有在的,它接受一个任务,我们得到的名单,以检索结果。 据我所知,使用一个或多个都不会有任何好处(除了我们避免使用循环,否则我们将不得不对任务进行操作),并且基本上它们是相同的想法,只是稍有不同。 那么,为什么有两种不同的方式提交一系列任务呢?我在性能上正确吗?有没

  • 约书亚·布洛赫在高效的Java中写道: 请注意,非零长度数组总是可变的,因此类具有公共静态最终数组字段或返回此类字段的访问器是错误的。如果类具有这样的字段或访问器,客户端将能够修改数组的内容。这是安全漏洞的常见来源: 请注意,许多IDE生成的访问器会返回对私有数组字段的引用,这恰恰导致了这个问题。有两种方法可以解决这个问题。您可以将公共数组设为私有,并添加公共不可变列表: 或者,可以将数组设为私有

  • 问题内容: 以下方法不起作用,因为内部块声明的变量与外部块中的变量同名。显然,变量属于声明它们的方法或类,而不属于声明它们的块,因此,我无法编写一个简短的临时临时块进行调试,而恰好将外部作用域中的变量压入阴影只是片刻: 我使用过的几乎每种块范围语言都支持此功能,包括我在学校为解释器和编译器编写的琐碎小语言。Perl可以做到这一点,Scheme甚至C都可以做到。甚至PL / SQL也支持这一点! J

  • 本文向大家介绍为什么我们需要一个数据库,包括了为什么我们需要一个数据库的使用技巧和注意事项,需要的朋友参考一下 数据库是数据的集合,通常以电子形式存储。数据库的设计通常是为了使其易于存储和访问信息。 好的数据库对任何公司或组织都至关重要。这是因为数据库存储了有关公司的所有相关详细信息,例如员工记录,交易记录,工资详细信息等。 数据库重要的各种原因是- 管理大量数据 数据库每天存储和管理大量数据。使