Java:方法中变量的生命周期
首先,如果这个问题已经在其他地方讨论过,我表示歉意。我完全是个初学者,有些话题对我来说太复杂了 我在方法的开头声明了变量Java:方法中变量的生命周期,java,class,Java,Class,首先,如果这个问题已经在其他地方讨论过,我表示歉意。我完全是个初学者,有些话题对我来说太复杂了 我在方法的开头声明了变量'x=0,然后使用for()方法,其中'x'被构建为45 当“for(){}”的块在关闭曲括号时结束时,为什么'x'仍然返回45?我认为块中x的生命周期将在for{}完成时结束 有人能澄清一下吗 非常感谢, public class Demo4 { public static void main(String args[]) { int i;
'x=0
,然后使用for()
方法,其中'x'
被构建为45
当“for(){}”
的块在关闭曲括号时结束时,为什么'x'
仍然返回45
?我认为块中x
的生命周期将在for{}完成时结束
有人能澄清一下吗
非常感谢,
public class Demo4 {
public static void main(String args[]) {
int i;
int x = 0;
for (i = 0; i < 10; i++) {
x += i;
}
System.out.println(x);
}
}
公共类演示4{
公共静态void main(字符串参数[]){
int i;
int x=0;
对于(i=0;i<10;i++){
x+=i;
}
系统输出println(x);
}
}
从声明局部变量的点到最里面的封闭块的末尾都存在局部变量。使用变量的构造并不重要。在您的情况下,x
一直存在,直到main()
结束
但是,对于for
循环有一个特殊规则:如果您将变量声明为for
头的一部分,您将实现您想要的,因为x
仅在循环执行期间存在:
for (int i = 0, x = 0; i < 10; i++) {
x += i;
}
局部变量存在于从声明它的点到最里面的封闭块的末尾。使用变量的构造并不重要。在您的情况下,
x
一直存在,直到main()
结束
但是,对于for
循环有一个特殊规则:如果您将变量声明为for
头的一部分,您将实现您想要的,因为x
仅在循环执行期间存在:
for (int i = 0, x = 0; i < 10; i++) {
x += i;
}
java中变量的生命周期停留在声明变量的块中。可以将块内的块视为子块,父块中声明的变量将继承到子块。但是,如果在内部(子)块中声明变量,则不能在外部(父)块中使用该变量 如下代码所示:
public static void main(String args[]) {
for (i = 0; i < 10; i++) {
int x = 0;
x += i;
}
System.out.println(x);
}
publicstaticvoidmain(字符串参数[]){
对于(i=0;i<10;i++){
int x=0;
x+=i;
}
系统输出println(x);
}
如果您使用上述代码,它将给出错误。因为x是在for循环块中声明的,并且它的作用域仅在该块内,而不是在该块外
但是您发布的代码在外部块中有x,而for循环在该块中。所以,当你在循环中使用它时,它是有效的 java中变量的生命周期停留在声明变量的块中。可以将块内的块视为子块,父块中声明的变量将继承到子块。但是,如果在内部(子)块中声明变量,则不能在外部(父)块中使用该变量 如下代码所示:
public static void main(String args[]) {
for (i = 0; i < 10; i++) {
int x = 0;
x += i;
}
System.out.println(x);
}
publicstaticvoidmain(字符串参数[]){
对于(i=0;i<10;i++){
int x=0;
x+=i;
}
系统输出println(x);
}
如果您使用上述代码,它将给出错误。因为x是在for循环块中声明的,并且它的作用域仅在该块内,而不是在该块外
但是您发布的代码在外部块中有x,而for循环在该块中。所以,当你在循环中使用它时,它是有效的 你是说为什么
x
不是0?您在其范围内更改了它的值。你是怎么从10得到45的?从0到9的整数之和是45。你是说为什么x
不是0?您在其范围内更改了它的值。你是怎么从10中得到45的?从0到9的整数之和是45。