当前位置: 首页 > 编程笔记 >

如何创建只能设置一次但在Java中不是最终变量的变量?

卢伟志
2023-03-14
本文向大家介绍如何创建只能设置一次但在Java中不是最终变量的变量?,包括了如何创建只能设置一次但在Java中不是最终变量的变量?的使用技巧和注意事项,需要的朋友参考一下

初始化最终变量后,您将无法进一步修改其值。即,您只能将值分配给最终变量一次。如果尝试将值分配给最终变量,则会生成编译时错误。

示例

public class FinalExample {
   final int j = 100;
   public static void main(String args[]){
      FinalExample obj = new FinalExample();
      obj.j = 500;
      System.out.println(obj.j);
   }
}

编译时错误

FinalExample.java:6: error: cannot assign a value to final variable j
   obj.j = 500;
      ^
1 error

实现“最终”功能

在不实际使用final关键字的情况下实现最终功能-

使用setter方法将变量设置为私有并为其设置值,这样,如果您尝试第二次调用它,则应设置先前的值或引发异常。

示例

public class FinalExample {
   private Integer num;
   public void setNum(int num){
      this.num = this.num == null ? num : this.num;
   }
   private String data;
   public void setData(String data) {
      this.data = this.data == null ? data : demo();
   }
   public String demo() {
      String msg = "You cannot set value to the variable data for the second time";
      throw new RuntimeException(msg);
   }
   public static void main(String args[]){
      FinalExample obj = new FinalExample();
      obj.setNum(200);
      System.out.println(obj.num);
      obj.setNum(500);
      System.out.println(obj.num);
      obj.setData("hello");
      obj.setData("sample data");
   }
}

输出结果

200
200
Exception in thread "main" java.lang.RuntimeException: You cannot set value to the variable data for the second time
at SEPTEMBER.remaining.FinalExample.demo(FinalExample.java:15)
at SEPTEMBER.remaining.FinalExample.setData(FinalExample.java:12)
at SEPTEMBER.remaining.FinalExample.main(FinalExample.java:26)
 类似资料:
  • 问题内容: 我想要一个可以创建一个实例的类,该实例的一个变量未设置(),然后初始化该变量,并 在初始化后 使其 不可变 。实际上,我想要一个可以在构造函数之外初始化的变量。 目前,我正在用抛出以下内容的setter来即兴创作: 这是我尝试做的一种好方法吗?我觉得我应该可以在初始化之后将其设置为不可变的,或者可以使用某种模式使它变得更加优雅。 问题答案: 让我建议您一点更优雅的决定。第一个变体(不引

  • 我知道我可以在每个网页的开头使用ASP/PHP语句,但这似乎使用了太多的资源;每个用户都将在每个页面上执行SET语句... 是否有一种方法可以在每个会话中设置变量或执行其他SQL语句,就像ASP中的onstart事件一样?或者,如果不对每个页面上的每个用户执行查询,如何实现我的目标?

  • 问题内容: 我知道这是一个非常简单的话题,但是我真的很想把它包裹住。 这是我想要做的,但是不喜欢final修饰符。有没有其他方法可以达到我想要的效果?基本上,我想确保id在整个活动过程中都不会更改。 我应该指出,这是Android代码。感谢您的所有帮助。我不担心getter或setter或任何更改我的代码的人。我问的原因是为了将来证明我的代码供下一位开发人员接任。我发现这篇文章也有助于阐明一些内容

  • 问题内容: java中是否允许这样做: 我的问题的关键词是。是否可以允许最终变量随循环的每次运行而变化?我想知道这是因为final说您不能更改变量的值(仅调用),但是我正在使用重新定义整个变量。 它们是两个完全不同的变量,只是具有相同的名称-循环的前一次运行中的变量已经朝着垃圾收集器的方向前进了吗? 问题答案: 是的,允许。该关键字意味着你不能改变的变量的值 的范围之内 。对于循环示例,您可以认为

  • 我有一个接一个的类来测试模拟对象。 我的测试: Test01工作正常,但在Test02中我有问题。在Test02方法中,需要调用进程路径。它使用mockNetwork公共最终变量。我不知道在哪里设置它们。它导致了空异常。在上面的代码中,我试图更改此字段的可访问性并设置它们,但现在我在消息“sinkIndex”中出现错误。 如何在mockNetwork中模拟公共最终变量?我正在使用Easymock。

  • 可能重复: Java中的动态变量名: 假设我有一个字符串,如下所示。 现在,我想创建一个字符串,但是字符串的变量将被称为“Hello”。为了使字符串名为“Hello”,我必须访问string以获取名称“Hello”,这样我就可以将其用作变量名。下面是我想看的。 感谢您的努力,请尝试向我解释,因为我是Java初学者D