Ich frage mich wirklich, wo ich den Fehler finden soll.
Wenn Sie versuchen, in einem Unterprogramm zu fangen, erreichen Sie möglicherweise nicht den Ort, den Sie abholen möchten.
Java war das gleiche
Wenn dieselbe Ausnahme in mehreren Unterroutinen angewendet wird, kann sie nur in der inneren Unterroutine übernommen werden.
public class MyException {
final private static int[] M = {1,2,3};
public static void main(String[] args) {
try {
subroutine(M);
}
catch ( ArrayIndexOutOfBoundsException e ) {
System.out.println("[SECOND] catch : " + e.getMessage());
}
}
public static void subroutine(int[] M) throws ArrayIndexOutOfBoundsException {
try {
System.out.println(M[4]);
}
catch ( ArrayIndexOutOfBoundsException e ) {
System.out.println("[FIRST] catch : " + e.getMessage());
}
}
}
result
[FIRST] catch : Index 4 out of bounds for length 3
Wenn Sie es erneut in den inneren Verschluss werfen, können Sie es außen aufnehmen. Übergeben Sie beim Werfen das Argument e auf nette Weise. Wenn es e bleibt, tritt ein Fehler auf. Ich bin mir nicht sicher.
public class MyException {
final private static int[] M = {1,2,3};
public static void main(String[] args) {
try {
subroutine(M);
}
catch ( ArrayIndexOutOfBoundsException e ) {
System.out.println("[SECOND] catch : " + e.getMessage());
}
}
public static void subroutine(int[] M) throws ArrayIndexOutOfBoundsException {
try {
System.out.println(M[4]);
}
catch ( ArrayIndexOutOfBoundsException e ) {
System.out.println("[FIRST] catch : " + e.getMessage());
throw new ArrayIndexOutOfBoundsException(e.getMessage());
<---Werfen
}
}
}
result
[FIRST] catch : Index 4 out of bounds for length 3
[SECOND] catch : Index 4 out of bounds for length 3
Also was ich meine ist
reference http://math.hws.edu/javanotes/c8/s3.html
Der letzte Code besteht hier auch aus if + throw. Ich glaube, ich schreibe so etwas, aber ich bin zu müde, um es noch zu verstehen, also gehe ich ins Bett.
Nun, diese Art von Memo
Recommended Posts