Welche der folgenden Ausnahmen würde auftreten: Welche Ausnahme wird auftreten?
// Vorbedingung: a ist nicht null
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; }
- A) NullPointerException
- B) IndexOutOfBoundsException
- C) ClassCastException
Antwort Ich wähle: Ich ließ das Programm mit einem Tester laufen und bekam B. B. Ich denke, B wäre die Antwort.
Antworten:
1 für die Antwort № 1Ihre Frage macht keinen Sinn, wenn wir nicht wissen, wie doSomething heißt. Sie könnten je nach Situation fast von diesen Ausnahmen bekommen:
In einigen Fällen werden Sie keine Ausnahmen erhalten. Beispiel:
ArrayList<String> a = new ArrayList<>();
a.add("");
doSomething(a,0);
Folgendes wird eine NullPointerException auslösen:
ArrayList<String> a = new ArrayList<>();
a.add(null);
doSomething(a,0);
Dieser wird eine IndexOutOfBoundException auslösen:
doSomething(new ArrayList<>(),0)
Schließlich hätten Sie eine ClassCastException mit dieser:
ArrayList a = new ArrayList();
a.add(new Object());
doSomething(a,0);
Weder D noch E sind möglich (D kann nur vorkommen, wenn Sie ein Array verwendet haben und Ihr Code keine bestimmten arithmetischen Operationen enthält, die eine Ausnahme auslösen könnten).
0 für die Antwort № 2
Im Folgenden finden Sie ein voll lauffähiges Beispiel, in dem Sie A, B, C und keine auftretenden Ausnahmen anzeigen.
Ohne die Angabe der ArrayList gibt es keine Möglichkeit, die Frage vollständig zu beantworten.
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;
}
}
Ausgabe:
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