为什么java要求在本地变量时初始化变量

请参阅下面的代码。 方法printTest()打印未初始化变量的默认值,但是当它涉及main方法时,java要求变量初始化。 任何人都可以解释原因吗?

public class Test1 { public static void main(String[] args) { int j; String t; System.out.println(j); System.out.println(t); } } public class Test2 { int i; String test; public static void main(String[] args) { new Test().printTest(); } void printTest() { System.out.println(i); System.out.println(test); } } 

局部变量主要用于中间计算,而实例变量应该携带用于未来和中间计算的数据。 Java并不强制初始化实例变量并允许默认值,但对于局部变量,开发人员调用它来赋值。 因此,为了避免错误,您需要初始化局部变量。

这是编译器可以知道的问题。

对于Main方法,编译器确定变量尚未初始化。

但是对于printTest方法,编译器确实知道可能是初始化类变量的其他方法(或相同的包类)。

您的全局变量未在任何位置初始化。 您正在尝试打印var i并使用未显示/存在的值进行测试。 它不是null或0也不是空白。

你的情况有点类似于此(来自答案: Uninitialized int vs Integer )

 i == 0; Uninitialized i == null; Undefined test == 0; java.lang.NullPointerException test == null; Uninitialized 

但是当它涉及main方法时,java要求变量初始化。

您的局部变量i和t与全局变量类似。

变量需要初始化。 我个人认为任何带变量的计算都需要具有初始值,否则它将不存在。

计算机目前基于计算/数学的物理使用,因此无论Math中的规则是什么,它都将应用于计算机,除非我们已进入计算量子的新阶段或更进一步。

在数学中,变量是一个符号(通常是一个字母字符),指定一个值,该值可能在给定问题或一组操作的范围内发生变化。

(来自: http : //en.wikipedia.org/wiki/Variable_ ( mathematics) )

因此,根据该规则,对我来说没有任何值的变量是不存在的空= x是空的,并且没有已知的方法来计算空虚,因为没有人可以看到它。

原语的Java文档

局部变量略有不同; 编译器永远不会为未初始化的局部变量分配默认值。 如果无法初始化声明它的局部变量,请确保在尝试使用它之前为其赋值。 访问未初始化的局部变量将导致编译时错误。

您必须在java中初始化局部变量。 就那么简单。 但是,如果您没有值,则可以将该值设置为null。 注意:int是一个简单的数据类型,并且不能将值设置为null,因此我将类更改为“Integer”,这是无论如何都要包装int的类。

 public class Test { int i; String test; public static void main(String[] args) { Integer j = null; String t = null; //other options for initialization value: t = new String(); t = ""; System.out.println(j); System.out.println(t); new Test().printTest(); } void printTest() { System.out.println(i); System.out.println(test); } } 

我认为,局部变量不会作为JVM类加载的一部分加载到内存中,因此没有为这些变量分配默认值。 由于基元没有“null”概念,因此应明确为局部变量赋值。

开放讨论!!

在你的程序中,你的变量需要携带一些值,因为你在if-else循环中使用变量,因为我可以看到程序是否转到了else循环,没有什么可以显示为’sizeDisplay’这就是你的sizeDisplay需要的原因初始化为“null”。