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

Java final关键字是否在static之类的方法中存储变量?,java,Java,这里是Java新手。我正在将我的iPhone应用程序移植到Android上。从我所读到的内容来看,final关键字几乎相当于static。但是在一个方法中它的工作原理是一样的吗 例如在Objective-C中的一个方法静态类aClass=[[aClass alloc]init]将不会再次重新分配,也不会在方法末尾处理它 Java中的某个方法是否会像最终类aClass=新aClass()相同吗?否。当块退出时,块局部变量超出范围,并且在堆栈上逻辑(通常是物理)分配。否。当块退出时,块局部变量超出范

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

例如在Objective-C中的一个方法<代码>静态类aClass=[[aClass alloc]init]将不会再次重新分配,也不会在方法末尾处理它


Java中的某个方法是否会像<代码>最终类aClass=新aClass()相同吗?

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

否。当块退出时,块局部变量超出范围,并且在逻辑(通常是物理)上分配Java在这方面与目标C不太相似,
final
更类似于
const
,因为它表示引用不能更改。在您的示例中,当块结束时,
final
变量将有资格进行垃圾收集,因为它不再可访问。我想你需要一个字段变量,比如

static final aClass aField = new aClass();
请注意,按照惯例,Java类名以大写字母开头

static final MyClass aField = new MyClass();

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

static final aClass aField = new aClass();
请注意,按照惯例,Java类名以大写字母开头

static final MyClass aField = new MyClass();

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

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
 }     

}

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

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
 }     

}

你混淆了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;
    }
}

你混淆了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;
    }
}


据我所知,final关键字几乎等同于static
:你应该扔掉你的Java书,
final
static
就像太阳和月亮。你会在这篇文章@Dici中发现Java中的
final
的各种语义。谢谢,我想这样比较容易混淆。抱歉,这篇文章发错了,我真的想到了这个
最终的
是对
静态的
就像土豆对门口一样。它们是完全不同的东西。
从我读到的来看,final关键字几乎等同于static
:你应该扔掉你的Java书,
final
static
就像太阳和月亮。你会在这篇文章@Dici谢谢,我想这样就不那么让人困惑了。对不起,这是一篇错误的帖子,我实际上想到了这篇
最后的
是到
静态的
就像土豆到门口一样。它们是完全不同的东西。哦,那只是一个疏忽。我一点也不包括这个班。编辑。是否有任何关键字可以存储它们,或者我只需要将其存储在文件范围内?没有等效的关键字,您需要将它们存储在类范围内(因此它是一个字段)。哎呀,这只是一个疏忽。我一点也不包括这个班。编辑。是否有任何关键字可以存储它们,或者我只需要将其存储在文件范围内?没有等价的关键字,您需要将它们存储在类范围内(因此它是一个字段)。您不能将原始语句放在块之外,即
System.out.println(a)不起作用。@ElliottFrisch我之前刚刚提供了spudo代码,但现在我已经编辑了它。不能将原始语句放在块之外,即
System.out.println(a)不起作用。@ElliottFrisch我之前刚刚提供了spudo代码,但现在我已经编辑了它。