public class Test1 {
private static int i = 0;
private static int j = 0;
public static void main(String[] args) {
int i = 2;
int k = 3;
{
int j = 3;
System.out.println("i + j is " + (i + j));
}
k=i+j;
System.out.println("k is "+k);
System.out.println("j is "+j);
}
}
为什么 j 进入大括号后被定义并赋值为3后,出来又变为了0
而 i 同属为私有型类变量重新在main方法里赋值了没进大括号,值就变了
一个内部的一个外部的,就好像平行宇宙概念,你一个宇宙作威作福,但是另一个宇宙的你还是小白哈哈哈,差不多这个意思,理解就行,一般实操不太会用这种内部变量,容易引起一些问题。
为什么 j 进入大括号后被定义并赋值为3后(dao'kuo),出来又变为了0
出来后引用的为( private static int j = 0;)
而 i 同属为私有型类变量重新在main方法里赋值了没进大括号,值就变了
局部变量优先于全局变量
** 如果需要的不是局部变量,这么写 Test1.i this.i **
变量只在它定义的作用域内有效,虽然变量名称相同,但是并不是同一个
https://blog.csdn.net/bupa900318/article/details/80555929
实际应用中尽量做到不重名,避免歧义
如果局部变量与实例变量(成员变量)名称一致,在方法内部局部变量会覆盖实例变量
而由花括号组成的代码块变量生存期是在代码块内部。
望采纳!
‘**为什么 j 进入大括号后被定义并赋值为3后,出来又变为了0**’,你这个描述有问题,全局变量j从头到尾没有赋值,在进入代码块中你使用的是在代码块中重新定义的局部变量,也就是说这是两个变量,只是恰巧变量名称重复了而已,也可以说在代码块的范围内,局部变量j覆盖了全局变量j
可以理解为全国那么多同名同姓的人。此张三非彼张三。就好比,一个年级有3个班,每个班都有张三,在年级聚会叫张三是否要声明是哪个班的张三呢?在班里老师点名叫张三,大家就都知道是本班的张三,而不是隔壁班的。一对大括号就相当于班级的隔离,括号内的变量的作用域仅限于括号内。类内的变量将作用于整个类,其有优先级约束(所用域越小优先级越大)