흑마 프로그래머--java기초--이상노트

6177 단어
---------------------- ASP.Net+Unity 개발,.Net 교육, 커뮤니케이션 기대! ----------------------
예외:
이상: 정상이 아닙니다.프로그램이 실행될 때 나타나는 비정상적인 상황.사실은 프로그램에 문제가 있는 거야.이 문제는 대상을 향한 사상에 따라 묘사하여 대상으로 봉인되었다.
문제의 발생에는 원인이 있고, 문제의 명칭, 문제의 묘사 등 여러 가지 속성 정보가 존재하기 때문이다.다중 속성 정보가 나타나면 가장 편리한 방법은 이 정보를 봉인하는 것이다.
이상은 자바가 대상을 향한 사상에 따라 문제를 대상을 봉인하는 것이다.이렇게 하면 조작 문제와 문제를 처리하는 데 편리하다.
 
각표가 경계를 넘고 빈 지침 등 여러 가지 문제가 나타난다.이 문제들을 분류하다.그리고 이런 문제들은 모두 공통된 내용이 있다. 예를 들어 모든 문제에 명칭이 있고 문제에 대한 묘사 정보, 문제가 발생하는 위치가 있기 때문에 끊임없이 위로 추출할 수 있다.이상 체계를 이루다.
 
--------java.lang.Throwable:
Throwable: 던질 수 있습니다.
|--Error: 오류, 일반적인 경우 맞춤형 코드를 작성하지 않고 처리합니다. 보통 jvm에서 발생하기 때문에 프로그램을 수정해야 합니다.
|--Exception: 예외, 맞춤형 처리 가능
 
오류든 이상이든 모두 구체적인 자류가 모든 문제를 나타내고 그들의 자류는 공통점을 가진다. 바로 부류명을 자류의 접미사로 하는 것이다.
 
이 체계 중의 모든 종류와 대상은 독특한 특징을 가지고 있다.바로 가포성입니다.
던질 수 있는 구현: 바로 이 체계의 클래스와 대상은throws와throw 두 키워드에 의해 조작될 수 있다.
catch (Exception e) { //e    try        。
    System.out.println("message:"+e.getMessage());//         。
    System.out.println("toString:"+e.toString());//         +     。
    e.printStackTrace();//          ;    +    +     。
}

--------------------------------------------------------
 
class Demo
{
    int div(int a,int b)throws Exception//      throws                  。
    {
       return a/b;
    }
}
 
 
class  ExceptionDemo
{
    public static void main(String[] args)
    {
       Demo d = new Demo();
       try
       {
           int x= d.div(4,0);
           System.out.println("x="+x);
       }
       catch (Exception e)//Exceptione = new ArithmeticException();
       {
           System.out.println("   ");
           System.out.println(e.getMessage());//  / by zero;
           System.out.println(e.toString());//     :    。
 
           e.printStackTrace();//    ,    ,       。
                         //  jvm         ,     printStackTrace  。
                         //            。
       }     
       System.out.println("over");
 
    }
}
    :
   
/ by zero
java.lang.ArithmeticException: / by zero
java.lang.ArithmeticException: / by zero
    atDemo.div(ExceptionDemo.java:6)
    atExceptionDemo.main(ExceptionDemo.java:18)
over

 
개발할 때 만약에 기능을 정의할 때 이 기능에 문제가 발생할 수 있음을 발견하면 문제를 기능을 정의할 때 표시해야 한다. 그러면 호출자는 이 기능을 사용할 때 처리 방식을 미리 제시할 수 있다.
 
어떻게 표시합니까?throws 키워드를 통해 완성, 형식:throws 이상 클래스 이름, 이상 클래스 이름...
이렇게 표시한 후, 호출자는 이 기능을 사용할 때 반드시 처리해야 한다. 그렇지 않으면 컴파일에 실패할 것이다.
 
처리 방식은 두 가지가 있다. 첫째, 포착;2. 던진다.
포착: 자바의 맞춤형 문장 블록을 처리합니다.
try {
검출된 코드가 필요합니다.
}
catch (이상 클래스 변수 이름) {
이상 처리 코드;
}
fianlly{
반드시 실행될 코드;
}
 
이상 처리 원칙: 기능이 몇 가지 이상을 제거하고 기능 호출이try 처리를 하면catch 처리 코드 블록이 필요합니다. 이런 처리는 목적성이 있기 때문에 몇 개를 던지면 몇 개를 처리합니다.
 
특수한 상황:try가 여러 개의catch에 대응할 때 부류의catch 문장 블록이 있으면 반드시 아래에 놓아야 합니다.
 
throw와 throws 키워드의 차이점:
throw는 이상 대상을 던지는 데 사용되며 뒤에 있는 것은 이상 대상입니다.throw는 함수에 사용됩니다.
throws는 이상 클래스를 던지는 데 사용되며, 뒤에 있는 이상 클래스는 여러 개와 쉼표로 구분할 수 있습니다.throws는 함수에 사용됩니다.
 
일반적인 상황: 함수 내용에throw가 있으면 이상 대상을 던지고 처리하지 않으면 함수에 반드시 설명해야 합니다. 그렇지 않으면 컴파일에 실패합니다.하지만 특별한 경우도 있다.
 
이상은 두 가지로 나뉜다.
1: Exception 및 하위 클래스가 컴파일할 때 감지된 예외인 경우 컴파일할 때 검사되는 예외입니다.
2: 런타임 예외. Exception에는 특별한 하위 클래스인 런타임 Exception이 있고 런타임 Exception의 하위 클래스는 런타임 예외입니다. 즉, 이 예외는 컴파일할 때 검사되지 않는 예외입니다.
 
컴파일할 때 검사되는 예외와 실행할 때 검사되는 예외의 차이점:
검사된 이상을 컴파일하는 것이 함수에서 던져집니다. 함수는 컴파일 실패를 설명해야 합니다.
성명의 원인: 호출자가 이 이상을 처리해야 하기 때문이다.
실행할 때 이상합니다. 함수에서 던져지면 함수에 설명할 필요가 없습니다.
성명하지 않은 원인: 호출자가 처리할 필요가 없고 실행할 때 이상이 발생하여 프로그램을 계속 실행할 수 없기 때문에 호출 처리를 하지 못하게 하고 프로그램을 정지시키며 호출자가 코드를 수정합니다.
 
이상 처리를 정의할 때try를 언제 정의하고throws를 언제 정의합니까?
기능 내부에 이상이 생기면 내부에서 처리할 수 있으면try를 사용한다.
만약 기능 내부를 처리할 수 없다면, 반드시 성명해서 호출자가 처리하도록 해야 한다.
 
사용자 정의 이상: 개발할 때 프로젝트에서 자바에 정의되지 않은 문제가 발생했을 때 우리는 자바 이상에 따라 사상을 구축하고 프로젝트의 특유한 문제도 대상을 봉인해야 한다.이 이상을 사용자 정의 이상이라고 부른다.
 
제법 연산에 있어서 0을 제수로 해서는 안 된다.java에서 이 문제를 Arithmetic Exception 클래스로 설명합니다.이 기능에 대해 우리 프로젝트에서 0을 제외하고는 마이너스로 할 수 없다.그러나 마이너스 부분의 자바는 묘사를 겨냥하지 않았다.그래서 우리는 이 이상을 사용자 정의해야 한다.
 
예외를 사용자화하려면:
1: 하위 클래스 상속 Exception 또는 Runtime Exception을 정의하여 해당 클래스가 포맷 가능하도록 합니다.
2:throw 또는throws를 통해 조작한다.
 
class FuShuException extends Exception //getMessage();
{
      private int value;
 
      FuShuException()
      {
             super();
      }
      FuShuException(String msg,intvalue)
      {
             super(msg);
             this.value = value;
      }
 
      public int getValue()
      {
             return value;
      }
 
}
class Demo
{
      int div(int a,int b)throwsFuShuException
      {
             if(b<0)
                   throw newFuShuException("           ------ / byfushu",b);//    throw              。
 
             return a/b;
      }
}

 
이상 전환 사상: 이상이 호출자가 처리할 수 없는 경우 이 이상을 호출자가 처리할 수 있는 이상으로 변환해야 한다.
 
try catch finally 결합 방법:
1
2
3
try
try
try
catch
catch
finally
finally
 
 
 
이 경우 이상이 발생하면 처리하지 않지만 자원은 반드시 닫히기 때문에tryfinally 집합은 자원만 닫습니다.
기억:finally는 매우 유용합니다. 주요 사용자가 자원을 닫습니다.이상이 발생하든지 않든지 간에 자원은 반드시 닫아야 한다.
System.exit(0);//jvm에서 종료합니다.finally만 실행하지 않습니다.
 
예외가 발생한 후 하위 상위 클래스를 덮어쓸 때 다음과 같은 새로운 특징이 있습니다.
1: 부류를 덮어쓰는 방법이 부류를 덮어쓸 때 부류의 방법이 이상을 던진다면 부류의 방법은 이상을 던지지 않거나 부류 이상 또는 이 이상을 던질 수 없으며 다른 이상을 던질 수 없다.
2: 만약에 부류가 여러 개의 이상을 던졌다면 부류는 덮어쓸 때 부류의 이상 서브집합만 던질 수 있다.
 
참고:
만약 부류나 인터페이스의 방법이 이상을 던진 적이 없다면, 부류는 이상을 던질 수 없고, 부류가 덮어쓰는 방법에 이상이 발생하면try만throws를 던질 수 없습니다.
만약에 이 이상 서브클래스를 처리할 수 없다면 서브클래스 방법의 구체적인 연산에 영향을 주었을 것이다. 이때 서브클래스 방법에서throw를 통해 RuntimeException 이상이나 그 서브클래스를 던질 수 있다. 그러면 서브클래스 방법에서throws가 설명할 필요가 없다.
 
공통 예외:
1. 커서 경계 이상(IndexOutOfBoundsException)은 그룹, 문자열을 포함한다.
빈 포인터 예외(NullPointer Exception)
2. 유형 변환 예외: ClassCastException
3. 이 요소 이상 없음: NullPointer Exception
4. 조작 이상이 지원되지 않습니다.
이상은 최대한 피해야 하고, 피할 수 없으면 미리 처리 방식을 제시해야 한다.예를 들면 가정용 약, 예를 들면 소화기.

좋은 웹페이지 즐겨찾기