Cuando estaba aprendiendo por primera vez el manejo de excepciones de Java, recuerdo algunas oraciones sobre el manejo de las excepciones de padres e hijo: "Un método de clase infantil solo puede lanzar excepciones o excepciones infantiles lanzadas por el método de clase principal, y el constructor de clases infantil debe lanzar excepciones o excepciones de los padres del constructor de clases de padres". En ese momento, no sabía por qué el método de subclase tenía que arrojar excepciones como esta. Más tarde, al aprender "pensando en Java", entendí la verdad. Ahora lo revisaré.
1. Los métodos de subclase solo pueden arrojar excepciones de los métodos de clase principal o sus excepciones de hijos.
Para esta limitación, se debe principalmente a que las subclases no pueden captar correctamente las excepciones cuando están experimentando una transformación ascendente
paquete de pensamientoinjava; public abstract class inningdemo1 {public void walk () lanza BaseException {} public abstract void sing () lanza BaseException;} class BaseException extiende la excepción {} Class Subexception1 extiende BaseException {} Class CupException extiende la excepción {} paquete de pensamientoinjava; interfaz pública otrafunction {public void tarea () lanza runtimeException;} paquete de pensamientoinjava; public class SubinningDemo1 extiende InningDemo1 implementa otrafunción {// Los métodos de subclase pueden lanzar excepciones del método de clase principal @Override public void walk () lanza basheException {} // pero las excepciones que no están en la clase principal no se pueden arrojar, de lo contrario habrá un error en la compilación // la caminata de voides de void (). puede lanzar excepciones infantiles del método de clase principal @Override public void Sing () arroja subexception1 {} // Cuando la interfaz y los métodos implementados en la clase principal tienen excepciones, puede optar por no lanzar excepciones public void tarea () {}}Tome este ejemplo como ejemplo. Si existe este método en la subclase public void walk () lanza CupException {}, se lanza una excepción que el método de clase principal no tiene. Utilizamos la referencia de la clase principal para señalar a la clase infantil.
public void f () {inningDemo1 inn = new SubinningDemo1 (); inn.walk (); // Cuando la clase principal llama al método Walk (), no sabe que lanzará una CupException, por lo que el método F () no sabe cómo atrapar la excepción. Por lo tanto, durante el período de compilación, se debe evitar que los métodos de subclase arrojen excepciones al azar. }Del ejemplo anterior, también podemos ver que el método de subclase no puede arrojar excepciones
2. El constructor de subclase debe lanzar una excepción o su excepción de los padres.
Esto se debe a que el constructor de subclase se agrega de forma predeterminada al constructor de clase principal.
paquete de pensamientoinjava; public abstract Class InningDemo2 {public inningDemo2 () lanza Subexception {}} clase FatherException extiende la excepción {} clase Subexception extiende FatherException {} Penexception extiende la excepción {} paquete de pensamientoinjava; public class SubinningDemo2 extiende InningDemo2 {public SubinningDemo2 () arroja FatherException {// El constructor de la clase principal se agrega de forma predeterminada en el constructor de subclase, por lo que una excepción de la clase principal o su excepción principal debe ser lanzada // Super (); }}3. Pérdida anormal
1. Lanza una excepción Finalmente, la excepción lanzada puede perderse.
paquete de pensamientoinjava; public class Finalmentexception {public static void main (string [] args) {try {try {Throw New RedException (); } Finalmente {// cubre la excepción anterior, arroje nuevo blueexception (); }} capt (excepción e) {system.out.println (e); }}} La clase RedException extiende la excepción {} La clase BluEexception extiende la excepción {}Resultado de ejecución: ThinkingInjava.BlueException
2. Use el retorno finalmente, no se lanza la excepción
paquete de pensamientoinjava; public class returnException {public static void main (string [] args) {try {lanzar nueva excepción (); } Finalmente {return; }}}Vemos que lanza una excepción, pero no habrá salida al ejecutar
El artículo anterior discute brevemente el manejo de excepciones de Java (manejo de excepciones padre-hijo) es todo el contenido que comparto con usted. Espero que pueda darle una referencia y espero que pueda apoyar más a Wulin.com.