Java任务中的错误处理

时间:2015-08-21 18:19:14

标签: java error-handling

public class SomeClass {
    int[] table;    
    int size;

    public SomeClass(int size) {
        this.size = size;    
        table = new int[size];  
    }

    public static void main(String[] args) {
        int[] sizes = {5, 3, -2, 2, 6, -4};
        SomeClass testInst;

        for (int i = 0; i < 6; i++) {
            testInst = new SomeClass(sizes[i]);
            System.out.println("New example size " + testInst.size);
        }   
    }    
}

当使用参数-2调用构造函数SomeClass时,将生成运行时错误:NegativeArraySizeException。

我希望修改此代码,以便通过使用try,catch和throw更强大地运行。构造函数应抛出异常,但在使用非正参数调用时不执行任何操作。 main方法应该捕获异常并打印一条警告消息,然后继续执行循环的所有六次迭代 有人指出我正确的方向?

2 个答案:

答案 0 :(得分:0)

每当您收到一个负数并在您的处理中处理它时,您需要从 SomeClass 的构造函数中抛出异常(最好是 IllegalArgumentException )主要方法。 你的代码应该是这样的;

public class SomeClass
{
    int[] table;
    int size;

    public SomeClass(int size)
    {
        if ( size < 0 )
        {
            throw new IllegalArgumentException("Negative numbers not allowed");
        }
        this.size = size;
        table = new int[size];
    }

    public static void main(String[] args)
    {
        int[] sizes = { 5, 3, -2, 2, 6, -4 };
        SomeClass testInst;
        for (int i = 0; i < 6; i++)
        {
            try
            {
                testInst = new SomeClass(sizes[i]);

                System.out.println("New example size " + testInst.size);
            }
            catch (IllegalArgumentException e)
            {
                System.out.println(e.getMessage());
            }
        }
    }
}

答案 1 :(得分:0)

有一些操作,比如使用Socket连接到远程服务器,这可能会抛出SocketException等异常。您需要捕获并处理这些异常,因为在您尝试连接之前,无法知道它是否会成功。

NegativeArrayException不是那样的。在尝试创建数组之前,如果使用负数,您可以确定它将会失败 如果大小来自您的代码,就像这样,您应该修复代码而不是捕获该异常 如果它来自任何输入,您应该在尝试创建阵列之前验证输入并按行动。

假设您的大小数组实际上是输入的简化示例,处理它的方式是:

public class SomeClass {

    int[] table;
    int size;

    public SomeClass(int size) {
        this.size = size;
        table = new int[size];
    }

    public static void main(String[] args) {
        int[] sizes = {5, 3, -2, 2, 6, -4};
        SomeClass testInst;

        for (int i = 0; i < 6; i++) {
            if (sizes[i] < 0) {
                System.out.println("Warning");
            } else {
                testInst = new SomeClass(sizes[i]);
                System.out.println("New example size " + testInst.size);
            }
        }
    }
}

作为输出:

New example size 5
New example size 3
Warning
New example size 2
New example size 6
Warning