Java异常和后置条件
以下哪些异常会发生,哪些异常会发生? //前提条件:a不为空Java异常和后置条件,java,class,exception,return,computer-science,Java,Class,Exception,Return,Computer Science,以下哪些异常会发生,哪些异常会发生? //前提条件:a不为空 public String sampleClass(ArrayList<String> a, int b) { String t; int u; for (u = 0; u <= a.size(); u++) { t = (String)(a.get(u)); if (t.length() == b) { return t;
public String sampleClass(ArrayList<String> a, int b) {
String t;
int u;
for (u = 0; u <= a.size(); u++) {
t = (String)(a.get(u));
if (t.length() == b) {
return t;
}
}
return null;
}
publicstringsampleclass(arraylista,intb){
字符串t;
国际大学;
对于(u=0;u如果我们不知道doSomething是如何调用的,那么您的问题就没有意义了。根据具体情况,您可以得到几乎所有的例外情况:
在某些情况下,您不会得到任何异常。例如:
ArrayList<String> a = new ArrayList<>();
a.add("");
doSomething(a,0);
D和E都不可能(只有在使用数组且代码不包含任何可能引发异常的特定算术运算时,D才可能发生)。下面是一个完全可运行的示例,它向您展示了a、B、C,并且没有异常发生
如果不说明ArrayList包含什么,就无法完全回答这个问题
public class Test {
public static void main(final String... args) {
try {
Test.throwNullPointer();
} catch (final Throwable e) {
System.out.println(e);
}
try {
Test.throwIndexOutOfBoundsException();
} catch (final Throwable e) {
System.out.println(e);
}
try {
Test.throwClassCastException();
} catch (final Throwable e) {
System.out.println(e);
}
try {
Test.noException();
System.out.println("No Exception");
} catch (final Throwable e) {
System.out.println(e);
}
}
public static void throwNullPointer() {
final ArrayList<String> a = new ArrayList<>();
a.add("a");
a.add(null);
a.add("c");
Test.doSomething(a, 0);
}
public static void throwIndexOutOfBoundsException() {
final ArrayList<String> a = new ArrayList<>();
a.add("a");
a.add("b");
a.add("c");
Test.doSomething(a, 0);
}
public static void throwClassCastException() {
final ArrayList<String> a = new ArrayList<>();
Test.doNaughtyStuff(a);
Test.doSomething(a, 0);
}
private static void doNaughtyStuff(final ArrayList a) {
a.add(new Object());
}
public static void noException() {
final ArrayList<String> a = new ArrayList<>();
a.add("");
Test.doSomething(a, 0);
}
public static String doSomething(final ArrayList<String> a, final int b) {
String t;
int u;
for (u = 0; u <= a.size(); u++) {
t = a.get(u);
if (t.length() == b) {
return t;
}
}
return null;
}
}
如果由于从0迭代到a,仅当列表a不包含长度为B的字符串,我会选择答案B。size(),包含在内。如果列表A包含空元素,则它也可以是A。如果您试图将字符串以外的任何内容添加到列表A,则它也可以是答案C。答案D和E在此方法中不太可能出现。您可以通过将原始列表强制转换到列表,从而导致ClassCastException。这样,您可以添加非字符串对象,而不会完全令人讨厌编译器。但是您会收到很多警告。这仍然会创建ArrayList。运算符会推断泛型。类似于ArrayList l=new ArrayList();l.add(1);doSomething((ArrayList)l),0);我测试了它并得到了异常。这是我消息的最后一个片段。在我发送该评论时,它不在那里。因此,这是我的错误。D也不应该作为列表出现。get抛出IndexOutOfBoundsException,并且我认为没有其他代码可以抛出显示的ArrayIndexOutOfBoundsException。
doSomething(new ArrayList<>(),0)
ArrayList a = new ArrayList();
a.add(new Object());
doSomething(a,0);
public class Test {
public static void main(final String... args) {
try {
Test.throwNullPointer();
} catch (final Throwable e) {
System.out.println(e);
}
try {
Test.throwIndexOutOfBoundsException();
} catch (final Throwable e) {
System.out.println(e);
}
try {
Test.throwClassCastException();
} catch (final Throwable e) {
System.out.println(e);
}
try {
Test.noException();
System.out.println("No Exception");
} catch (final Throwable e) {
System.out.println(e);
}
}
public static void throwNullPointer() {
final ArrayList<String> a = new ArrayList<>();
a.add("a");
a.add(null);
a.add("c");
Test.doSomething(a, 0);
}
public static void throwIndexOutOfBoundsException() {
final ArrayList<String> a = new ArrayList<>();
a.add("a");
a.add("b");
a.add("c");
Test.doSomething(a, 0);
}
public static void throwClassCastException() {
final ArrayList<String> a = new ArrayList<>();
Test.doNaughtyStuff(a);
Test.doSomething(a, 0);
}
private static void doNaughtyStuff(final ArrayList a) {
a.add(new Object());
}
public static void noException() {
final ArrayList<String> a = new ArrayList<>();
a.add("");
Test.doSomething(a, 0);
}
public static String doSomething(final ArrayList<String> a, final int b) {
String t;
int u;
for (u = 0; u <= a.size(); u++) {
t = a.get(u);
if (t.length() == b) {
return t;
}
}
return null;
}
}
java.lang.NullPointerException
java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
java.lang.ClassCastException: java.lang.Object cannot be cast to java.lang.String
No Exception