什么是Java中的最后一个变量?例如:如果我写的功能是什么final int temp;是final关键字结果的含义是什么? 另外,我在想用最后一个变量(既作为一个类变量和函数变量)?结果 为什么以同步块必须变量声明最后?

有帮助吗?

解决方案

基本上它只是意味着你不能改变该值。对于实例变量,你必须在构造函数中分配任何最终变量一次(也是唯一一次)(或变量初始值)。同步是一个相当正交的概念。

的主要原因用于制作的本地的变量最后是这样你就可以在匿名内部类中使用它......这有没有关系在同步块之中。

最后变量的的不可变类,诚然有用的 - 和永恒性使生活更轻松在多线程环境 - 但是这是我能想到的...

编辑:Wildwezyr的评论是有道理的在不改变变量的要在其上同步的方面。这将是危险的,他给出的理由。这是你“在同步块变量”的意思?

其他提示

最后的变量和同步的代码块做有一个共同点......如果你申报非最终变量a然后写synchronized (a) { System.out.println('xxx'); }你会得到警告“同步于非决赛场上。” - 在NetBeans中至少

为什么你不应该在非决赛现场同步?因为如果字段值可以改变,那么不同的线程可以在不同的对象同步(场的不同的值) - 。因此有可能是根本没有同步(每一个线程可以进入在同一时间同步块)

看这里例如对非最终场引起的同步现实生活中的麻烦: http://forums.sun.com/thread.jspa?threadID=5379204

在除了什么乔恩斯基特说,该值不能被改变,但内容可被改变。

final Integer one = new Integer(1);
...
one = new Integer(2); // compile error

final List list = new ArrayList();
...
list = new ArrayList(); // compile error
list.add(1); // Changes list, but that's fine!

另外要注意,最后和最终静态是不一样的。最后是实例的范围内,而静态最终为类的所有实例(在其它语言中,这可以被称为一个常数)是相同的。

我个人认为,最终的优势,即使不是绝对需要让你的软件的工作,是在语义含义。它提供了你说的编译器的和该代码的工作旁边的人的这个变量并不意味着改变,并试图改变它可能导致的错误。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top