以下Java程序的输出是什么?为什么我会收到错误

时间:2016-01-30 17:21:29

标签: java

如果执行以下程序,我收到错误消息。它说o无法解析为变量。

public class Test {

    /**
* @param args
*/
    public static void main(String[] args) {

        try{
            int o[] = new int[2];
            o[3]=23;
            o[1]=33;
        }catch(Exception e){
            System.out.println(e.getMessage());
            e.printStackTrace();
        }

        System.out.println(o[1]); //THis line shows the error.
    }

}

为什么我要排在System.out.println(o[1]);行?

3 个答案:

答案 0 :(得分:1)

首先,你在try-block中初始化o,所以o在它之外是不可见的。更改此项并调用o [3]将得到一个ArrayIndexOutOfBounds,因为o的大小仅为2.

答案 1 :(得分:1)

问题在于范围。因为你在try块中定义了o,编译器在try / catch之外并不知道o。 解决问题要么将打印放在finally块中,要么在try块之前初始化o。

在此处阅读有关变量范围的更多信息: http://www.java2s.com/Tutorial/Java/0020__Language/VariableScope.htm

答案 2 :(得分:0)

您的int的<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.9/angular.min.js"></script> <div ng-app> <div ng-controller="Ctrl"> <label>string model </label> <input type="number" ng-model="priceStr" /><br/> <label>number model </label> <input type="number" ng-model="priceNum" /> </div> </div>仅限于scope块。将其移至try-catch块之外,以便在try-catch

中访问它
sysout()

此外,为了执行public static void main(String[] args) { /* Moved Outside */ int o[] = new int[4]; try{ o[3] = 23; o[1] = 33; }catch(Exception e){ System.out.println(e.getMessage()); e.printStackTrace(); } /* o will be visible now */ System.out.println(o[1]); } ,您必须将数组大小增加到最小值。