Questions tagged «final»

22
Java中的“最终类”有什么意义?
我正在读一本关于Java的书,它说您可以将整个类声明为final。我想不出我会在哪里使用它。 我只是编程的新手,我想知道程序员是否真的在他们的程序中使用了它。如果他们这样做了,他们什么时候使用它,以便我可以更好地理解它并知道何时使用它。 如果Java是面向对象的,并且您声明了一个类final,它是否会停止具有对象特征的类的想法?
569 java  final 

18
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
在Java中,我们使用final带变量的关键字来指定其值不被更改。但是我看到您可以在类的构造函数/方法中更改值。同样,如果变量是static,则为编译错误。 这是代码: import java.util.ArrayList; import java.util.List; class Test { private final List foo; public Test() { foo = new ArrayList(); foo.add("foo"); // Modification-1 } public static void main(String[] args) { Test t = new Test(); t.foo.add("bar"); // Modification-2 System.out.println("print - " + t.foo); } } 上面的代码工作正常,没有错误。 现在将变量更改为static: private static final …
480 java  final 

11
使用Java反射更改私有静态最终字段
我有一堂课private static final,但不幸的是,我需要在运行时更改它。 使用反射我得到这个错误: java.lang.IllegalAccessException: Can not set static final boolean field 有什么办法可以改变价值? Field hack = WarpTransform2D.class.getDeclaredField("USE_HACK"); hack.setAccessible(true); hack.set(null, true);

12
为什么要在Java的方法参数上使用关键字“ final”?
当在方法参数上使用final关键字时,我无法理解该关键字在哪里真正方便。 如果我们排除使用匿名类,可读性和意图声明,那么对我来说几乎毫无用处。 强制某些数据保持不变并不像看起来那样强大。 如果参数是原始参数,则它将无效,因为参数作为值传递给方法,并且在范围之外进行更改将无效。 如果我们通过引用传递参数,则引用本身就是局部变量,并且如果在方法内部更改了引用,则不会在方法范围之外产生任何影响。 考虑下面的简单测试示例。尽管该方法更改了给定给定值的参考值,但该测试通过了,但没有效果。 public void testNullify() { Collection<Integer> c = new ArrayList<Integer>(); nullify(c); assertNotNull(c); final Collection<Integer> c1 = c; assertTrue(c1.equals(c)); change(c); assertTrue(c1.equals(c)); } private void change(Collection<Integer> c) { c = new ArrayList<Integer>(); } public void nullify(Collection<?> t) { t = null; }

13
最终和有效最终之间的区别
我在用Java 8玩lambda,遇到警告local variables referenced from a lambda expression must be final or effectively final。我知道,当我在匿名类中使用变量时,它们必须在外部类中为final,但仍然-final和有效的final之间有什么区别?

12
在Java中使用final关键字是否可以提高性能?
在Java中,我们看到了很多final可以使用关键字但很少使用的地方。 例如: String str = "abc"; System.out.println(str); 在上述情况下,str可以,final但是通常不这样做。 当一个方法永远不会被覆盖时,我们可以使用final关键字。类似地,对于不会被继承的类。 在任何或所有这些情况下使用final关键字是否真的可以提高性能?如果是这样,那又如何?请解释。如果final对性能的正确使用确实很重要,那么Java程序员应该养成什么习惯来充分利用关键字?
346 java  final 


20
无法在用其他方法定义的内部类中引用非最终变量
编辑:我需要更改几个变量的值,因为它们在计时器中运行了几次。我需要通过计时器在每次迭代中不断更新值。我无法将值设置为final,因为这将阻止我更新值,但是我遇到了在下面的第一个问题中描述的错误: 我以前写过下面的内容: 我收到错误消息“无法引用用其他方法定义的内部类内部的非最终变量”。 对于名为double的价格和称为priceObject的Price来说,这种情况正在发生。你知道我为什么会遇到这个问题吗?我不明白为什么我需要作最后声明。另外,如果您可以看到我正在尝试做什么,那么该怎么办才能解决该问题。 public static void main(String args[]) { int period = 2000; int delay = 2000; double lastPrice = 0; Price priceObject = new Price(); double price = 0; Timer timer = new Timer(); timer.scheduleAtFixedRate(new TimerTask() { public void run() { price = priceObject.getNextPrice(lastPrice); System.out.println(); lastPrice = price; …


6
用Java将final声明为==的字符串进行比较
我有一个关于Java字符串的简单问题。以下简单代码段仅连接两个字符串,然后将它们与进行比较==。 String str1="str"; String str2="ing"; String concat=str1+str2; System.out.println(concat=="string"); 比较表达式concat=="string"返回false那么明显(I明白之间的差值equals()和==)。 当这样声明这两个字符串时final, final String str1="str"; final String str2="ing"; String concat=str1+str2; System.out.println(concat=="string"); 比较表达式concat=="string"在这种情况下返回true。为什么final有所作为?它与实习生池有关系吗?还是我被误导了?
220 java  string  final 

5
接口方法中的最终参数-有什么意义?
在Java中,final在接口方法中定义参数并且在实现类中不遵循参数是完全合法的,例如: public interface Foo { public void foo(int bar, final int baz); } public class FooImpl implements Foo { @Override public void foo(final int bar, int baz) { ... } } 在上面的示例中,bar与VS类baz具有相反final定义的接口。 以相同的方式,final当一个类方法扩展另一个(无论是否扩展)时,不会强制执行任何限制abstract。 尽管final在类方法主体内部有一些实用价值,但final接口方法参数是否有任何规定?
189 java  class  interface  methods  final 

6
最终的定义不正确吗?
首先,一个难题:以下代码显示什么? public class RecursiveStatic { public static void main(String[] args) { System.out.println(scale(5)); } private static final long X = scale(10); private static long scale(long value) { return X * value; } } 回答: 0 扰流板如下。 如果您打印X的规模(长),并重新定义X = scale(10) + 3,印刷品会X = 0那么X = 3。这意味着X暂时设置为0,后来又设置为3。这是违反final! 静态修饰符与最终修饰符结合使用,还可以定义常量。最后的修饰符指示此字段的值不能更改。 来源:https : //docs.oracle.com/javase/tutorial/java/javaOO/classvars.html [添加了重点] 我的问题:这是一个错误吗?是final不明确的? …



15
什么时候应该对方法参数和局部变量使用final?
我发现了一些参考(例如),它们建议final尽可能多地使用它,我想知道这有多重要。这主要是在方法参数和局部变量的上下文中,而不是最终方法或类。对于常量,这很明显。 一方面,编译器可以进行一些优化,使程序员的意图更加清晰。另一方面,它增加了冗长性,并且优化可能是微不足道的。 我需要努力记住的东西吗?
171 java  final 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.