为什么数据字段值会发生变化?我正在阅读的文字没有明确解释。本章主要是关于数据字段封装,你做的很少的事情可能会影响代码和那种东西。
public class Questions {
private static int j = 0;
private static int i = 0;
public static void main(String[] args) {
int i = 2;
int k = 3;
{
j = 3;
System.out.println("j is " + j);
}
k = i + j;
System.out.println("k is " + k);
System.out.println("j is " + j);
}
}
/* output is:
j is 3
k is 5
j is 3
*/
//but if you do this one thing:
public class Questions {
private static int j = 0;
private static int i = 0;
public static void main(String[] args) {
int i = 2;
int k = 3;
{
int j = 3;
System.out.println("j is " + j);
}
k = i + j;
System.out.println("k is " + k);
System.out.println("j is " + j);
}
/* the output is:
j is 3
k is 2
j is 0
*/
感谢任何输入!
答案 0 :(得分:2)
在第一段代码中:
{
j = 3;
System.out.println("j is " + j);
}
您很容易为main外部声明的static
字段分配新值。即使在本地区块之后,更改仍将持续。
但在第二段代码中:
{
int j = 3;
System.out.println("j is " + j);
}
您正在声明一个新的块范围的局部变量,该变量隐藏了该块中的static
字段。对此块中的j
所做的任何更改都是在块作用域变量中完成的,而不是在静态字段中完成的。它超出了该区域之外的范围。
你在块之外使用的变量j
只是static
字段,它与块内声明的j
无关。
答案 1 :(得分:0)
您在{}内声明了一个新的j(int j)。该变量与您在该类顶部声明的变量不同。
我正在编辑添加该变量仅在{}内部使用。一旦你离开那里,唯一的“现有”j就是在顶部宣告的那个。
答案 2 :(得分:0)
当你在另一个范围内声明int j时(块范围 - 在花括号内),你创建一个新的 j ,当大括号结束时它会消失。这意味着您将引用括号外的旧 j 。因此,J在括号内是3,在外面是0。
int j = 0;
{
int j = 3;
System.out.println("j is " + j); // j is 3
}
System.out.println("j is " + j); //j is 0 out here
如果您想更改新范围内的外部 j ,可以通过不使用关键字 int 轻松完成此操作。
int j = 0;
{
/*int*/ j = 3;
}
System.out.println("j is " + j); // j is 3
块范围很容易造成混淆,创建新变量可增强代码的可读性。