자바 이상 처리 -- 코드 로 말 하기

14653 단어 Java
1. 기본 개념
프로그램 이 제어 할 수 없 는 외부 환경 문제 (예 를 들 어 사용자 가 제공 한 파일 이 존재 하지 않 고 파일 내용 이 손상 되 어 네트워크 가 사용 할 수 없 음) 가 발생 하면 자바 는 이상 대상 으로 설명 합 니 다.
2. 처리
자바 에 서 는 두 가지 방식 으로 이상 을 처리 합 니 다:
1 > 이상 이 발생 한 곳 에서 직접 처리 하기;
2 > 이상 을 호출 자 에 게 던 져 호출 자 에 게 처리 합 니 다.
3. 이상 분류
1 > 검사 성 이상 java. lang. Exception
검사 성 이상:
절 차 는 정확 하지만 외부 환경 조건 이 충족 되 지 않 아 발생 한다.예 를 들 어, 나 는 저녁 에 밥 을 먹 으 러 가 야 하 는데, 결국 식당 에 가서 문 을 열지 않 은 것 이 나의 잘못 입 니까?내 가 밥 을 먹 는 것 이 잘못 되 었 습 니까?맞 아, 외부 조건 이 만족 하지 않 을 뿐 이 야. 그래서 이상 한 거 야.자바 에서 예 를 들 어 프로그램 이 원 격 으로 존재 하지 않 는 Socket 포트 를 열 려 고 하거나 존재 하지 않 는 파일 을 열 려 고 할 때 이것 은 프로그램 자체 의 논리 적 오류 가 아니 라 원 격 기기 이름 오류 일 수 있 습 니 다. 상업 소프트웨어 시스템 에 대해 프로그램 개발 자 는 이 문 제 를 고려 하고 처리 해 야 합 니 다. 자바 컴 파일 러 는 이러한 이상 류 를 처리 해 야 합 니 다.이 이상 을 포착 하지 않 으 면 프로그램 이 컴 파일 될 수 없습니다.
나 는 실제 사례 를 들 어 문 제 를 설명 한다.


package com.test;


import java.io.FileReader;
import java.net.Socket;


public class test3 {
    public static void main(String[] args) {
        //     ,1.    
        FileReader fr=new FileReader("d:\\aa.text");
       //2.    192.168.1.23 ip    78
        
    }
}

FileReader fr=new FileReader("d:\\aa.text");

FileNotFoundException;
----

Socket s=new Socket("192.168.1.23", 78);

        UnknownHostException;                
----

ip , 。

, 。



2> java.lang.RuntimeException

, bug, : ,0 , ........... 。java 。

, , , “ ”。 , 。 。 。


3> ( ) java.lang.Error


        , 。 bug, , , , ,



 java.lang.RuntimeException  java.lang.Exception。

 java.lang.Error  java.lang.RuntimeException java.lang.Throwable 。

java.lang.Throwable



4. :

1>try.....catch

, , 。

package com.test;


import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;


public class test3 {
    public static void main(String[] args) {
        try {
            //     ,1.    
            FileReader fr=new FileReader("d:\\aa.text");
            //2.    192.168.12.12 ip    4567
             Socket s=new Socket("192.168.1.23", 78);
        } catch (FileNotFoundException ex) {
            Logger.getLogger(test3.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(test3.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

。 , catch(Exception e), 。

;

11, 2015 9:47:34 com.test.test3 main
: null
java.io.FileNotFoundException: d:\aa.text ( 。)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.(FileInputStream.java:138)
at java.io.FileInputStream.(FileInputStream.java:93)
at java.io.FileReader.(FileReader.java:58)
at com.test.test3.main(test3.java:15)

, , , catch , , 。 !

package com.test;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;

public class test3 {
    public static void main(String[] args) {
        try {
            //     ,1.    
           // FileReader fr=new FileReader("d:\\aa.text");
            //2.    192.168.12.12 ip    4567
             Socket s=new Socket("192.168.1.23", 78);
             System.out.println("connect success!");
        } catch (FileNotFoundException ex) {
            Logger.getLogger(test3.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(test3.class.getName()).log(Level.SEVERE, null, ex);
        }
        System.out.println("ok");
    }
}

java.net.ConnectException: Connection timed out: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at java.net.Socket.connect(Socket.java:538)
at java.net.Socket.(Socket.java:434)
at java.net.Socket.(Socket.java:211)
at com.test.test3.main(test3.java:17)

ok

: , , catch, , catch , catch。

2>finally

finally try......catch ,finally catch ,

a. finally

b. 

c. system.exit();

d.  cpu

package com.test;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;

public class test3 {
    public static void main(String[] args) {
        FileReader fr=null;
        try {
            //     ,1.    
            fr=new FileReader("H:\\aa.txt");
            //2.    192.168.12.12 ip    4567
            // Socket s=new Socket("192.168.1.23", 80);
        } catch (FileNotFoundException ex) {
            System.exit(-1);//finally     
            Logger.getLogger(test3.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(test3.class.getName()).log(Level.SEVERE, null, ex);
        }
        finally{
            System.out.println("  finally   ");
            //     ,           
            //          ,   ,        ,        
               if(fr!=null){
                   try {
                       fr.close();
                   } catch (IOException ex) {
                                ex.printStackTrace();
                   }
               }
        }
        System.out.println("ok");
    }
}


2> , , throws

package com.test;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.logging.Level;
import java.util.logging.Logger;

public class test {
public static void main(String[] args) {
                Father father=new Father();
                father.test1();
    }
}
class Father{
    private Son son=null;
    public Father(){
        son=new Son();
    }
    public void test1(){
        System.out.println("1");
         //son.test2();//    ,              ,          ,
            // throws  ,       ,  ,               ,
            //           ,   ,           ,     
            //     JVM ,   ,        ,      , try catch
            // throws     ,          
        try {
            son.test2();
        } catch (FileNotFoundException ex) {
            System.out.println("       。");
            ex.printStackTrace();
        }
    }
}
class Son{
    public void test2() throws FileNotFoundException{
        FileReader fr=null;
        fr=new FileReader("d://aa.txt");//         
    }
}
:

1

java.io.FileNotFoundException: d:\aa.txt ( 。)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.(FileInputStream.java:138)
at java.io.FileInputStream.(FileInputStream.java:93)
at java.io.FileReader.(FileReader.java:58)
at com.test.Son.test2(test.java:37)//
at com.test.Father.test1(test.java:27)// 27 test1 ,
at com.test.test.main(test.java:11)//

, , ,Jvm , , 。 , , try catch。

package com.test;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.logging.Level;
import java.util.logging.Logger;

public class test {
public static void main(String[] args) throws FileNotFoundException {
                Father father=new Father();
                father.test1();
    }
}
class Father{
    private Son son=null;
    public Father(){
        son=new Son();
    }
    public void test1() throws FileNotFoundException{
        System.out.println("1");
         son.test2();//    ,              ,          ,
            // throws  ,       ,  ,               ,
            //           ,   ,           ,     
            //     JVM ,   ,        ,      , try catch
            // throws     ,          
//        try {
//            son.test2();
//        } catch (FileNotFoundException ex) {
//            System.out.println("       。");
//            ex.printStackTrace();
//        }
    }
}
class Son{
    public void test2() throws FileNotFoundException{
        FileReader fr=null;
        fr=new FileReader("d://aa.txt");
    }
}

1
Exception in thread "main" java.io.FileNotFoundException: d:\aa.txt ( 。)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.(FileInputStream.java:138)
at java.io.FileInputStream.(FileInputStream.java:93)
at java.io.FileReader.(FileReader.java:58)
at com.test.Son.test2(test.java:37)
at com.test.Father.test1(test.java:21)
at com.test.test.main(test.java:11)
Java Result: 1













좋은 웹페이지 즐겨찾기