2010-02-21 5 views
26

I가 다음과 같은 간단한 코드 :"처리되지 않은 예외 유형 IOException"이 나타나는 이유는 무엇입니까?

import java.io.*; 
class IO { 
    public static void main(String[] args) {  
     BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));  
     String userInput;  
     while ((userInput = stdIn.readLine()) != null) { 
      System.out.println(userInput); 
     } 
    } 
} 

내가받을 다음과 같은 오류 메시지가

---------- 
1. ERROR in io.java (at line 10) 
    while ((userInput = stdIn.readLine()) != null) { 
         ^^^^^^^^^^^^^^^^ 
Unhandled exception type IOException 
---------- 
1 problem (1 error)[email protected]:~/work/java$ mcedit io.java 

이 사람이 왜 어떤 아이디어가 있습니까? 방금 요약 웹 사이트 (here)에 주어진 코드를 단순화하려고했습니다. 나는 지나치게 단순화 시켰는가? 당신은 추가해야

답변

38

은 당신의 주요 방법 "IOException가 슬로우"

public static void main(String[] args) throws IOException {

당신은 JLS에 (자바에 고유) 체크 된 예외에 대해 조금 자세한 내용을보실 수 있습니다.

36

Java에는 "checked exceptions"기능이 있습니다. 즉, Exception을 서브 클래스 화하지만 RuntimeException을 서브 클래 싱하지 않는 특정의 종류의 예외가있는 것을 의미합니다. 즉, 메소드가 throw 할 가능성이있는 경우, 의 throws 선언에 그것들을 포함 할 필요가 있습니다. void readData() throws IOException. IOException 중 하나입니다.

따라서 throw 선언에 IOException을 나열하는 메서드를 호출 할 때는 자신의 throw 선언에 나열하거나 catch해야합니다.

확인 된 예외가 존재한다는 이론적 근거는 일부 예외의 경우 프로그램 오류가 아닌 정상적인 상황이므로 발생 가능성이 있다는 사실을 무시해서는 안된다는 것입니다. 따라서 컴파일러는 이러한 예외 발생 가능성을 잊지 않고 어떤 방식 으로든 처리 할 것을 요구합니다.

그러나 Java 표준 라이브러리의 확인 된 예외 클래스 중 일부는이 이론적 근거에 맞지 않지만 완전히 다른 주제입니다.

9

이 코드로 다시 시도 :

import java.io.*; 

class IO { 
    public static void main(String[] args) {  
     try { 
      BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));  
      String userInput;  
      while ((userInput = stdIn.readLine()) != null) { 
       System.out.println(userInput); 
      } 
     } catch(IOException ie) { 
      ie.printStackTrace(); 
     } 
    } 
} 

try-catch-finally를 사용하여 throws를 사용하는 것보다 낫다. try-catch-finally을 사용하면 오류를 발견하고 디버깅하는 것이 더 쉽습니다.

0

키보드에서 입력을 읽는 것은 인터넷에서 파일을 다운로드하는 것과 유사하지만 java io 시스템은 InputStream 또는 Reader를 사용하여 읽을 데이터 소스와의 연결을 열어 IOException을 사용하여 연결이 끊어 질 수있는 상황을 처리해야합니다 당신이 그것을에는 InputStream 작업을 의미 정확히 알고 싶어 BufferedReader로 this video이 그것을

0

추가가 표시되면

은 다음과 같이 당신의 방법 "IOException가 슬로우"

public static void main(String args[]) throws IOException{ 

     FileReader reader=new FileReader("db.properties"); 

     Properties p=new Properties(); 
     p.load(reader); 


    } 
관련 문제