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