자바 이상 처리 -- 코드 로 말 하기
프로그램 이 제어 할 수 없 는 외부 환경 문제 (예 를 들 어 사용자 가 제공 한 파일 이 존재 하지 않 고 파일 내용 이 손상 되 어 네트워크 가 사용 할 수 없 음) 가 발생 하면 자바 는 이상 대상 으로 설명 합 니 다.
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.