2014-04-24 1 views
0

아래 코드에 몇 가지 문제가 있습니다. 이 프로그램에서는 항목의 설명, 단위 및 가격을 입력했습니다. 사용자가 음수를 입력 할 수있는 두 가지 사용자 지정 예외 클래스를 만들었습니다. 프로그램을 실행하면 catch 문이 제대로 작동하지만 catch 블록 이후의 명령문도 여전히 실행된다는 점이 이상한 점입니다. 내가 틀렸다면 나를 정정하십시오. 예외가있는 경우 catch 문 다음에 명령문을 실행하지 않아야하는 프로그램이 아닙니까? 나는 그것을 할 수있는 유일한 방법은 마침내 블록을 사용하는 것이라고 인상을 받았다. 어떤 도움이라도 대단히 감사하겠습니다!블록/다음 문 계산/시도

import java.util.Scanner; 

public class RetailItemDemo 
{ 
    public static void main (String[] args) 
    { 
     Scanner keyboard = new Scanner(System.in); 
     RetailItem item = new RetailItem(); 

    System.out.print("Item description: "); 
    item.setDescription(keyboard.nextLine()); 

    try 
    { 
     System.out.print("Units on hand: "); 
     item.setUnitsOnHand(keyboard.nextInt()); 

     System.out.print("Item price: "); 
     item.setPrice(keyboard.nextDouble()); 
    } 

    catch (NegativeUnitsException nue) 
    { 
     System.out.println(nue); 
    } 

    catch (NegativePriceException npe) 
    { 
     System.out.println(npe); 
    } 

    System.out.println("\nThe item is a " + item.getDescription()); 
    System.out.println("There are " + item.getUnitsOnHand() + " units on hand"); 
    System.out.println("The item price is " + item.getPrice() + "\n"); 
} 
} 
+2

예외가 "catch"인 경우 _handled_입니다. –

+5

예외 처리에 대한 Java 자습서 [여기] (http://docs.oracle.com/javase/tutorial/essential/exceptions/putItTogether.html). –

+0

정말 고마워, 고마워! – saadq

답변

1

예외가있는 경우 catch 문 다음에 문을 실행해야하는 프로그램이 아닌데 올바른지 확인하십시오. 나는 그럴 수있는 유일한 방법은 마침내 블록을 사용하는 것이라는 인상하에 이었습니다.

내가 틀렸을 까봐 두렵다. try-catch의 요점은 우리가 실패 할 수도있는 try에서 일부 코드를 실행한다는 것입니다. 예외가 발생하면 catch 블록에서 오류를 처리 한 다음 예외를 상위 수준으로 전달 (전체 프로그램을 종료 할 가능성이 있음)하지 않고 정상적으로 수행하고 catch 블록 이후에 추가 코드를 실행합니다.

finally 블록의 코드는 예외가 throw되는지 여부에 관계없이 실행됩니다. 이것은 어떤 일이 일어나면 정리해야하는 리소스 (예 : 열린 파일)를 닫는 데 사용됩니다.

예외가 발생한 후 모든 내용을 건너 뛰려면 try-catch으로 예외를 처리하는 지점이 없습니다. 높은 수준에서 예외를 처리하는 것이 더 낫습니다 (예제에서 이미 최상위 수준에 있음, 즉 main).

+0

finalizers는 실행에 필요하지 않으며 즉시 실행할 필요가 없습니다. _에 유의하십시오. 이로 인해 위험 할 수 있습니다. 출처 : Robert Bloch, Effective Java, 2nd Edition. –

+1

@AnubianNoob 여기에는 종결 자에 대한 것이 없습니다. –

+0

'finally '블록. –

0

방법은이어서,이 시도는 블록 내의 모든 다른 방법을 스킵 try 블록 내부 예외를 발생 캐치 블록을 실행하고, 캐치 블록 후의 다음 라인에서 재개. 당신은 또한 마침내는 당신이 catch 블록에서 프로그램을 닫을 경우에도 실행됩니다, 차단이있는 경우이를 방지하기 위해

는 catch 블록

System.exit(0);를 추가합니다.

0

자바는 당신이 그것을 경험으로 기본적으로 동작하는 예외 처리의 종료 모델을 사용

그 방법

추가 처리가 종료되고 제어 유형을 처리 할 수있는 가장 가까운 예외 핸들러로 전송 입니다 여기에서 이 발생했습니다. http://www.informit.com/articles/article.aspx?p=464630&seqNum=4.

예외 처리기 (catch 블록)는 try/catch 블록 다음에 코드의 첫 번째 줄에서 연속적으로 실행을 처리하는 것을 끝냅니다.

재개 모델에서는 예외가 처리 된 후 예외가 발생한 곳에서 흐름이 반환되고 프로그램이 거기에서 연속적으로 반환됩니다.