final关键字是否将变量存储在像static这样的方法中?

时间:2015-01-04 05:32:14

标签: java

这里有Java新手。我正在将我的iPhone应用程序移植到Android。根据我的阅读,final关键字与static非常相同。但它在方法中的作用是否相同?

例如,在方法内的Objective-C中...... static Class aClass = [[aClass alloc] init];不会再次重新分配,并且不会在方法的末尾处置。

像... final Class aClass = new aClass();这样的方法中的Java内容是否会起作用?

4 个答案:

答案 0 :(得分:4)

没有。当块退出时,块局部变量超出范围,并且在逻辑上(通常是物理上)分配在堆栈上。

答案 1 :(得分:1)

Java在这方面并不像Objective Cfinal更类似于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
 }     

}