자바 이상 처리 (부자 이상 처리)

내가 자바 이상 처리를 처음 배웠을 때 부자 이상 처리에 대해 나는 몇 마디를 기억한다. "자류 방법은 부류 방법이 던진 이상이나 그 자류 이상만 던질 수 있고 부류 구조기는 부류 구조기의 이상이나 그 부류 이상만 던질 수 있다."그때는 왜 이렇게 이상한 걸 던지는지 몰랐어요. 나중에'Thinking in Java'를 배워서 그 이유를 알게 됐어요. 이제 다시 복습해 볼게요.
1. 자류 방법은 부류 방법의 이상이나 그 자류 이상만 던질 수 있다
이런 제한은 주로 자류가 상향 전환을 할 때 이상을 정확하게 포착하지 못하기 때문이다

package thinkinginjava;

public abstract class InningDemo1 {
  public void walk() throws BaseException{}
  public abstract void sing() throws BaseException;
}

class BaseException extends Exception{}
class SubException1 extends BaseException{}
class CupException extends Exception{}

package thinkinginjava;

public interface OtherFunction {
  public void task() throws RuntimeException;
} 

package thinkinginjava;

public class SubInningDemo1 extends InningDemo1 implements OtherFunction{
  // 
  @Override
  public void walk() throws BaseException{}
  
  // , 
  //public void walk() throws Exception{}
  
  // 
  @Override
  public void sing() throws SubException1{}
  
  // , 
  public void task(){}

}
이 예를 들면, 만약에 하위 클래스에 이 방법이 있다면publicvoidwalk ()throws CupException {}, 하위 클래스 방법에 이상이 없습니다. 우리는 하위 클래스의 인용을 사용하여 하위 클래스를 가리킵니다.

public void f(){

    InningDemo1 inn = new SubInningDemo1();

    inn.walk() ;// walk() , CupException, f() 。 。

  }
위의 예에서, 우리도 볼 수 있듯이, 자류 방법은 이상을 던지지 않을 수 있다
2. 하위 구조기는 반드시 부류 구조기의 이상이나 그 부류 이상을 던져야 한다
이것은 하위 클래스 구조기에 기본적으로 부모 클래스가 추가되었기 때문이다

package thinkinginjava;

public abstract class InningDemo2 {
  public InningDemo2() throws SubException{
    
  }
}

class FatherException extends Exception{}
class SubException extends FatherException{}
class PenException extends Exception{}

package thinkinginjava;

public class SubInningDemo2 extends InningDemo2{
  public SubInningDemo2() throws FatherException {
    // , 
    //super();
  }
}
3. 이상 분실
1、finally에서 이상을 던지면 이전에 던진 이상을 잃어버릴 수 있습니다

package thinkinginjava;

public class FinallyException {
  public static void main(String[] args){
    try{
      try{
        throw new RedException();
      }finally{
        // 
        throw new BlueException();
      }
    }catch(Exception e){
      System.out.println(e);
    }
  }
}

class RedException extends Exception{}
class BlueException extends Exception{}
실행 결과:thinkinginjava.BlueException
2,finally에서return을 사용하면 이상이 발생하지 않습니다

package thinkinginjava;

public class ReturnException {
  public static void main(String[] args){
    try{
      throw new Exception();
    }finally{
      return;
    }
  }
}
이상 코드를 보았지만, 실행할 때 출력이 없습니다
이상의 이 간단한 자바 이상 처리(부자 이상 처리)는 바로 편집자가 여러분께 공유한 모든 내용입니다. 여러분께 참고가 되고 저희를 많이 사랑해 주시기 바랍니다.

좋은 웹페이지 즐겨찾기