例子问题
例子问题1:运行时错误
考虑下面的代码:
对象[]objects = new对象[20];
For (int I = 0;I < objects.length;我+ +){
开关(i % 4) {
例0:
objects[i] = new Integer(i + 3);
打破;
案例1:
objects[i] = "This val: " + i;
打破;
案例2:
objects[i] = new Double(i * 4.4);
打破;
案例3:
objects[i] = "That val: " + (i*12);
打破;
}
}
字符串s =(字符串)对象[8];
System.out.println(年代);
上面的代码有什么错误?
会有一个NullPointerException。
将会抛出一个ClassCastException。
数组溢出。
不能以这种方式为数组分配各种类型。
没有错误。
将会抛出一个ClassCastException。
为了理解这段代码中的错误,您必须理解循环在做什么。的数组赋值变量类型对象
根据循环控制变量的除法余数返回我
除以4。这样你就得到了一个重复的模式:
整数,字符串,双,字符串,整数,字符串,双,字符串,…
现在,索引8将是一个Integer(因为它的余数为0)。这意味着当你进行类型转换为String时,你将收到一个TypeCastException用于读取行:
字符串年代=(字符串)对象[8];
问题11:程序分析
公共静态int [] [] doWork (int [] [], int [] [] b) {
Int [][] ret = new Int [a.length][a[0].length];
For (int I = 0;I < a.length;我+ +){
For (int j = 0;J < a[i].length;j + +) {
Ret [i][j] = a[i][j] + b[i][j];
}
}
返回受潮湿腐烂;
}
在上面的代码中,在下一行中没有捕捉到的潜在错误是什么?
受潮湿腐烂[我] [j] =一个[我] [j) +b[我] [j];
数组可以包含空值
数组可能会越界
数组一个
可以设置为空
数组可能没有初始化
代码写起来很好
数组可能会越界
在代码的这一点上,不可能一个
或b
为空。此外,这些数组不能包含空值,因为它们是由基本类型(int
类型)。它们不能被设置为null,因为它们不是对象。这里的潜在错误有点深奥,但有必要注意。这里存在一个可能的错误,即2D数组是“粗糙的”;然而,我们不需要担心这个考试。不过,也有可能数组b
(假设它不为空)与数组的大小不相同一个
.因为我们用的是一个
为了设置循环计数,这可能意味着数组溢出b
通过使用过大的索引值。(注意,也有可能b
可能为null,导致错误;然而,这种可能性没有答案选项。)