这是允许在java中:
for(int i=0;i<5;i++){
final int myFinalVariable = i;
}
Run Code Online (Sandbox Code Playgroud)
我的问题的关键字是final.是否允许执行随循环的每次运行而变化的最终变量?我想知道这是因为最后说你不能改变变量的值(仅调用myFinalVariable = i),但我正在重新定义整个变量final int.
它们是两个完全不同的变量,只是具有相同的名称 - 从上一次循环运行的变量已经走向垃圾收集器的道路?
私有方法最终是否有益?这会改善表现吗?
我认为"私人决赛"没有多大意义,因为私有方法无法被覆盖.所以方法查找应该像使用final时一样高效.
私有帮助方法是静态的(如果可能的话)会更好吗?
什么是最好用的?
private Result doSomething()
private final Result doSomething()
private static Result doSomething()
private static final Result doSomething()
Run Code Online (Sandbox Code Playgroud) 在Java中,它教导变量应保持私有以实现更好的封装,但静态常量呢?这个:
public static final int FOO = 5;
Run Code Online (Sandbox Code Playgroud)
结果与此相当:
private static final int FOO = 5;
...
public static getFoo() { return FOO; }
Run Code Online (Sandbox Code Playgroud)
但哪种更好的做法?
在Java中我可以写:
public final static MyClass foo = new MyClass("foo");
Run Code Online (Sandbox Code Playgroud)
C#中有没有相应的东西?
任何人都可以告诉我在Java的上下文中以下行的含义:
除非它是不可变的,否则仍然可以操纵最终变量
据我所知,通过声明的任何变量,最后,你不能再改变它,那么他们的意思字不变在上述行?
根据教程:
的
static改性剂,在用所述组合final改性剂,也可以用来定义常量.该final修饰符表明这个字段的值不能改变.
只有涉及的类型是原始的,我才同意这一点.对于引用类型,例如Point2D其位置属性不是的类的实例final(即,我们可以改变其位置),这种变量的属性(例如public static final Point2D A = new Point2D(x,y);仍然可以改变).这是真的?
据我了解,下面的代码应该打印出来true.
但是,当我运行此代码时,它正在打印false.
匿名类总是隐式最终的
public class Test {
public static void main(String args[]) {
Object o = new Object() {
};
System.out.println("Annonymous class is final: " + Modifier.isFinal(o.getClass().getModifiers()));
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮我理解这种行为.
根据我对Java语言的理解,可以初始化静态变量static initialization block.
但是,当我尝试在实践中实现它时(static变量也是final如此),我得到下面屏幕截图中显示的错误:
我看过很多人写的代码public static final String mystring = ...
然后才使用一个值.
他们为什么要那样做?为什么他们必须final在使用之前初始化值?
UPDATE
好的,感谢所有的答案,我理解这些关键的意义(公共静态最终).我不明白为什么人们使用它,即使常量只在一个地方使用而且只在同一个类中使用.为什么宣布它?为什么我们不只是使用变量?
在Java中,您可以这样做:
class A {
private final int x;
public A() {
x = 5;
}
}
Run Code Online (Sandbox Code Playgroud)
在达特,我试过:
class A {
final int x;
A() {
this.x = 5;
}
}
Run Code Online (Sandbox Code Playgroud)
我收到两个编译错误:
必须初始化最终变量'x'.
和
'x'不能用作定位器,因为它的最终版本.
有没有办法在Dart的构造函数中设置最终属性?