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方法应该捕获异常并打印一条警告消息,然后继续执行循环的所有六次迭代 有人指出我正确的方向?
答案 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