/ / Java-Ausnahmen und Nachbedingungen - Java, Klasse, Ausnahme, Rückkehr, Informatik

Java-Ausnahmen und Nachbedingungen - Java, Klasse, Ausnahme, Rückkehr, Informatik

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 № 1

Ihre 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