为什么不编译以下java代码?

时间:2012-11-13 04:19:08

标签: java exception-handling

坦率地说,我只是不明白我的导师要求我在这里做什么。我尝试过使用“try-catch”块,并在方法签名中抛出Exception。我读过关于已检查和未检查的异常。我相信这会被投票或关闭,但有人可以在这里扔我一块骨头吗?我的教师说明如下:

“纠正它以便编译。”

class Exception3{
    public static void main(String[] args){         
    if (Integer.parseInt(args[0]) == 0)             
        throw new Exception("Invalid Command Line Argument");     
     } 
}

很明显,它正在抛出RuntimeException。更具体地说,是一个ArrayIndexOutOfBoundsException。我知道异常的原因是因为数组是空的,所以引用的索引不存在。我的意思是,从技术上讲,我可以删除if(Integer.parseInt(args[0]) == 0)throw new Exception("Invalid Command Line Argument");并将其替换为System.out.println("It compiles now");

有什么想法吗?

2 个答案:

答案 0 :(得分:7)

public static void main(String[] args) throws Exception{         
    if (Integer.parseInt(args[0]) == 0)             
        throw new Exception("Invalid Command Line Argument");     
     } 

您的方法抛出Exception,因此方法声明应指定它可以抛出Exception

根据java tutorial

  

已检查的例外情况受Catch或Specify Requirement的约束。除Error,RuntimeException及其子类指示的异常外,所有异常都是经过检查的异常。

答案 1 :(得分:3)

您必须使用try catch语句捕获它:

class Exception3 {
    public static void main(String[] args) {
        try {
            if (Integer.parseInt(args[0]) == 0)
                throw new Exception("Invalid Command Line Argument");
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
}

或在方法标题处声明:

class Exception3 {
    public static void main(String[] args) throws Exception {
        if (Integer.parseInt(args[0]) == 0)
            throw new Exception("Invalid Command Line Argument");
    }
}