这里有Java新手。我正在将我的iPhone应用程序移植到Android。根据我的阅读,final
关键字与static
非常相同。但它在方法中的作用是否相同?
例如,在方法内的Objective-C中...... static Class aClass = [[aClass alloc] init];
不会再次重新分配,并且不会在方法的末尾处置。
像... final Class aClass = new aClass();
这样的方法中的Java内容是否会起作用?
答案 0 :(得分:4)
没有。当块退出时,块局部变量超出范围,并且在逻辑上(通常是物理上)分配在堆栈上。
答案 1 :(得分:1)
Java在这方面并不像Objective C
,final
更类似于const
,因为它表明引用可能不会被更改。在您的示例中,当块结束时,final
变量将有资格进行垃圾收集,因为它不再可访问。我想你想要一个类似
static final aClass aField = new aClass();
请注意,Java类名称按惯例以大写字母开头......
static final MyClass aField = new MyClass();
答案 2 :(得分:1)
你混淆了Final和Static的含义。
最终意味着在最初声明其值后,不能更改变量的值。
静态意味着可以访问和更改变量,而无需事先实例化类。
也许下面的代码会使这一点更清晰。
public class SF1 {
static int x;
final int y = 3;
static final int z = 5;
public static void main(String[] args) {
x = 1;
// works fine
SF1 classInstance = new SF1();
classInstance.y = 4;
// will give an error: "The final field main.y cannot be assigned"
z = 6;
// will give an error: "The final field main.z cannot be assigned"
reassignIntValue();
// x now equals 25, even if called from the main method
System.out.println(x);
}
public static void reassignIntValue() {
x = 25;
}
}
答案 3 :(得分:0)
您必须在类范围内声明您的变量,以便能够在方法之外访问它。
class ABC{
int a;
public void method(){
a = 10; // initialize your variable or do any operation you want.
}
public static void main(String args[]){
ABC abc = new ABC();
System.out.println(abc.a) // it will print a result
}
}