我什么时候需要在java中初始化变量?

时间:2016-02-01 02:55:20

标签: java

我一直在努力学习Java,并且遇到了变量初始化的障碍。在这两个示例中,程序从键盘提取输入,按升序对值进行排序,然后打印结果。两个程序都可以正常编译和运行,但是需要初始化变量而另一个不需要。

在这个例子中,我没有初始化任何东西,编译的程序没有错误。

    int num1, num2, num3, temp;      // DIDN'T INITIALIZE

    Scanner input = new Scanner(System.in);

    System.out.print("Enter an integer: ");
    num1 = input.nextInt();

    System.out.print("Enter an integer");
    num2 = input.nextInt();

    System.out.print("Enter an integer: ");
    num3 = input.nextInt();

    if (num1 > num2) {temp = num1; num1 = num2; num2 = temp;}
    if (num2 > num3) {temp = num2; num2 = num3; num3 = temp;}

    if (num1 > num2) {temp = num1;num1 = num2; num2 = temp;}

    System.out.println(num1 + " " + num2 + " " + num3 );

但是,在这个例子中,如果我不从头开始初始化变量,我会收到一条错误,其中包含" java变量可能尚未初始化。"

    int num1=0 , num2=0, num3=0, temp, i=0;  // MUST INITIALIZE VARIABLES!!

    Scanner input = new Scanner(System.in);
    while (i < 3) {
        System.out.print("Enter an integer: ");
        while(true){
            while (!input.hasNextInt()) {
                System.out.print("Not an integer!! Please enter an integer: ");
                input.next();
            }
            if (i < 1) {num1 = input.nextInt();break;}
            if (i < 2) {num2 = input.nextInt();break;}
            if (i < 3) {num3 = input.nextInt();break;}
        }
        i++;
    }

    if (num1 > num2) {temp = num1; num1 = num2; num2 = temp;}
    if (num2 > num3) {temp = num2; num2 = num3; num3 = temp;}

    if (num1 > num2) {temp = num1;num1 = num2; num2 = temp;}

    System.out.println(num1 + " " + num2 + " " + num3 );

这些程序之间的唯一区别是第二个程序使用while循环来检查用户输入,但除此之外,分配值的方法和它们的排序方式是相同的。

3 个答案:

答案 0 :(得分:3)

编译器确保在读取它们之前已经分配了所有变量(如果你从未读过它们,或者你用它们做的第一件事是写入它们,那么它们不需要在定义时初始化)。

在第二个示例中,变量仅在满足某些条件时初始化(它们隐藏在ifwhile块之间)。

现在,你可能知道这种情况总是如此,但是编译器并没有这么说,所以它会出错,因为它无法确保变量在循环后始终被初始化。

答案 1 :(得分:1)

编译器无法判断初始化变量的代码是否实际执行。初始化(num1 = input.nextInt())发生在if块内的while块内。虽然你可以告诉代码将始终执行,但编译器看起来并不那么遥远。

这就是为什么始终将任何变量初始化为其默认值(在这种情况下,整数为0)的最佳做法

答案 2 :(得分:0)

当这些变量不确定具有默认值

时,您需要在java中初始化变量