有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java的final关键字是否在static之类的方法中存储变量?

这里是Java新手。我正在将我的iPhone应用程序移植到Android上。从我所读到的内容来看,final关键字几乎等同于static。但是在一个方法中它的工作原理是一样的吗

例如在Objective-C中的一个方法static Class aClass = [[aClass alloc] init];将不会再次被重新分配,也不会在方法结束时被释放

Java中的某个方法是否会像final Class aClass = new aClass();你也这么做吗


共 (4) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

    Java在这方面并不像Objective C,而final更像const,因为它表示引用可能不会被更改。在您的示例中,当块结束时,final变量将有资格进行垃圾收集,因为它不再可访问。我想你需要一个字段变量,比如

    static final aClass aField = new aClass();
    

    请注意,按照惯例,Java类名以大写字母开头

    static final MyClass aField = new MyClass();
    
  3. # 3 楼答案

    你混淆了Final和Static的含义

    Final表示变量的值在最初声明后不能更改

    静态意味着可以访问和更改变量,而无需事先实例化类

    也许下面的代码会让这一点更清楚

    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;
        }
    }
    
  4. # 4 楼答案

    必须在类范围内声明变量,以便能够在方法之外访问它

    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
     }     
    
    }