programing

함수를 호출할 때 "throws Exception"이 필요한 이유는 무엇입니까?

sourcejob 2022. 11. 4. 23:25
반응형

함수를 호출할 때 "throws Exception"이 필요한 이유는 무엇입니까?

class throwseg1
{
    void show() throws Exception
    {
        throw new Exception("my.own.Exception");
    }

    void show2() throws Exception  // Why throws is necessary here ?
    {
        show();
    }

    void show3() throws Exception  // Why throws is necessary here ?
    {
        show2();
    }

    public static void main(String s[]) throws Exception  // Why throws is necessary here ?
    {
        throwseg1 o1 = new throwseg1();
        o1.show3();
    }
}

가 그 하는 show2(),show3() , , , , 입니다.main() 가지다

보고되지 않은 예외 발생을 감지하거나 발생을 선언해야 하는 예외

throws Exception★★★★★★★★★★★★★★★★★★★★★?

Java에서는 아시다시피 예외가 다음 두 가지로 분류될 수 있습니다.「 」가 한 것throws또는 지정하지 않은 절과 지정하지 않은 절을 지정해야 합니다.이치노

여기에 이미지 설명 입력

Java를 하는 모든 수 .Throwableclass. 래 a a class 、 기 、 령 、 령 、 령 、 class 、 class 、 class 、 class 、 class 、 class 。throws이치노입니다.Error ★★★★★★★★★★★★★★★★★」RuntimeException이 두 개의 하위 분류 중 하나일 수도 있습니다.의 경우Exception is is is is isclassclassclassclassclass of의 .Error ★★★★★★★★★★★★★★★★★」RuntimeExceptionthrows해당 예외를 처리하지 않으면 절을 지정합니다.은 게게 the가 필요했던 것입니다.throws절을 클릭합니다.


Java 튜토리얼에서:

예외는 프로그램 실행 중에 프로그램 명령의 정상적인 흐름을 방해하는 이벤트입니다.

아시다시피 예외는 체크박스와 체크박스의 2가지로 분류됩니다.왜 이런 분류일까요?

예외 확인:프로그램 실행 중에 복구할 수 있는 문제를 나타내는 데 사용됩니다.그것들은 보통 프로그래머의 잘못이 아니다.예를 들어 사용자가 지정한 파일을 읽을 수 없거나 네트워크 접속을 사용할 수 없는 경우 등 모든 경우 프로그램을 종료할 필요가 없으며 사용자에게 경고하는 등의 작업을 수행하거나 네트워크를 사용할 수 없을 때 오프라인으로 작업하는 등의 폴백 메커니즘에 들어갈 수 있습니다.

선택되지 않은 예외:에러와 런타임으로 나눌 수 있습니다.예외입니다.체크되지 않는 이유 중 하나는 셀 수 없이 많고 모든 것을 처리해야 하기 때문에 프로그램이 복잡해지고 명확성이 떨어지기 때문입니다.또 다른 이유는 다음과 같습니다.

  • 런타임 예외:보통 프로그래머의 실수로 인해 발생합니다.예를 들어 다음과 같은 경우ArithmeticException 0으로 나누기 0이 합니다.ArrayIndexOutOfBoundsException코딩에 충분히 주의를 기울이지 않았기 때문에 발생합니다.일반적으로 프로그램 로직에 오류가 있기 때문에 발생합니다.따라서 프로그램이 프로덕션 모드로 전환되기 전에 해당 항목을 삭제해야 합니다.프로그램 자체가 실패하면 프로그래머가 개발 및 테스트 시에 해결할 수 있다는 점에서 체크되지 않습니다.

  • 에러: 에러는, 통상, 프로그램이 회복할 수 없는 상황입니다.예를 들어,StackOverflowError프로그램 함수 호출 스택의 크기를 늘리는 등 많은 것을 할 수 없습니다., 「 」의 경우OutOfMemoryError발생하므로 프로그램에서 사용할 수 있는 RAM 용량을 크게 늘릴 수 없습니다.이 경우 프로그램을 종료하는 것이 좋습니다.이치노

상세한 것에 대하여는, 다음을 참조해 주세요.

Java에서는 모든 예외를 처리하거나 선언해야 합니다.try/catch 블록을 사용하여 예외를 처리하지 않는 경우 메서드의 서명에 예외를 선언해야 합니다.

예를 들어 다음과 같습니다.

class throwseg1 {
    void show() throws Exception {
        throw new Exception();
    }
}

다음과 같이 기재해야 합니다.

class throwseg1 {
    void show() {
        try {
            throw new Exception();
        } catch(Exception e) {
            // code to handle the exception
        }
    }
}

이렇게 하면 메서드 선언에서 "throws Exception" 선언을 제거할 수 있습니다.

throws Exception선언은 예상되지만 피할 수 없는 이유로 예외를 발생시킬 수 있는 방법을 자동으로 추적하는 방법입니다.에 대해 되어 있습니다(예: 의 종류).throws IOException ★★★★★★★★★★★★★★★★★」throws IOException, MyException.

우리는 모두 프로그램을 실행하기 전에 예상치 못한 어떤 것으로 인해 예기치 않게 중지되고 예외를 보고하는 코드를 쓰거나 쓰려고 합니다.예를 들어 0으로 나누거나 인덱스 아웃 오브 바운드와 같은 것입니다.이 방법에서는 오류가 예상되지 않았기 때문에 오류를 "잡아" 트라이 캐치 절로 처리할 수 없었습니다.이 메서드의 의심하지 않는 사용자도 이 가능성을 알지 못할 것이며 프로그램도 중지될 것입니다.

프로그래머가 특정 유형의 오류가 발생할 수 있다는 것을 알고 있지만 메서드 외부에서 이러한 예외를 처리하고 싶을 때 메서드는 하나 이상의 유형의 예외를 처리하는 대신 호출 메서드에 "스루"할 수 있습니다.프로그래머가 메서드가 예외를 발생시킨다고 선언하지 않은 경우(또는 Java가 예외를 발생시킬 수 없는 경우), 컴파일러는 알 수 없으며 메서드가 발생할 수 있는 예외를 알고, 포착하고, 처리하는 것은 메서드의 미래 사용자에게 달려 있습니다.프로그램에는 많은 다른 프로그램에 의해 작성된 메서드의 여러 계층이 있을 수 있으므로 예외를 발생시킬 수 있는 메서드를 추적하는 것이 어려워집니다(불가능).

Java는 예외를 선언할 수 있지만 처리되지 않은 예외와 선언되지 않은 예외로 새로운 메서드를 작성할 수 있으며 Java는 이를 컴파일하여 실행할 수 있으며 최선의 결과를 기대할 수 있습니다.Java는 예외 발생으로 선언된 메서드를 사용하는 경우, 메서드에서 선언된 예외를 처리하거나 동일한 예외를 발생시키는 메서드를 선언하지 않는 한, 또는 여러 예외가 있는 경우 일부 메서드를 처리하고 나머지 메서드를 삭제할 수 없습니다.

프로그래머가 메서드가 특정 유형의 예외를 발생시킨다고 선언할 때, 이는 예외가 가능한 메서드를 사용하여 다른 프로그래머에게 경고하는 자동화된 방법입니다.그 후 프로그래머는 호출 메서드를 같은 예외 발생으로 선언함으로써 예외를 처리할지 또는 경고를 전달할지 결정할 수 있습니다.컴파일러는 이 새로운 메서드에서 예외가 발생할 수 있다는 경고를 받았기 때문에 새로운 메서드의 향후 발신자가 예외를 처리하는지 여부를 자동으로 체크하거나 선언하고 둘 중 하나를 실행할 수 있습니다.

이 유형의 솔루션의 장점은 컴파일러가 보고할 때Error: Unhandled exception type java.io.IOException예외를 슬로우하도록 선언된 메서드의 파일과 행 번호를 제공합니다.그런 다음 단순히 책임을 전가하고 메서드를 "throws IOException"이라고 선언할 수 있습니다.이것은 프로그램이 정지하고 사용자에게 예외를 보고하는 메인 메서드까지 실행할 수 있습니다.다만, 유저에게 어떠한 일이 일어났는지, 어떻게 고쳐야 하는지를 설명하는 등, 예외를 잡아, 좋은 방법으로 대처하는 것이 좋다.메서드가 예외를 포착하여 처리하면 더 이상 예외를 선언할 필요가 없습니다.말하자면 그 책임은 거기서 멈춘다.

Exception는 체크된 예외 클래스입니다. 「」, 「」라고.throws Exception이치노

package javaexception;


public class JavaException {
   void show() throws Exception
    {
        throw new Exception("my.own.Exception");
    }

void show2() throws Exception  // Why throws is necessary here ?
{
    show();
}

void show3() throws Exception  // Why throws is necessary here ?
{
    show2();
}
public static void main(String[] args) {

   JavaException a = new JavaException();

   try{
   a.show3();
   }catch(Exception e){
       System.out.println(e.getMessage());
   }
}

프로그램에 약간의 변경만 있을 뿐입니다.메인 문제에 대해 많은 사람들이 오해하고 있는 것은, 예외를 둘 때마다, 같은 장소(예를 들면, 프로그램의 show1,2,3 방식)에서는 필요 없고, 「메인」내의 최초의 발신자 방식에서는 필요하게 되는 것입니다.한 마디로 'throw'가 있고, 예외가 발생하는 방법이 다르더라도 'throw/try'가 있어야 합니다.

void show() throws Exception
{
    throw new Exception("my.own.Exception");
}

show() 메서드에 체크 마크가 붙어 있기 때문에 이 메서드에서는 처리되지 않기 때문에 예외 전파에는 throws 키워드를 사용합니다.

void show2() throws Exception //Why throws is necessary here ?
{
show();
}

show2() 메서드에서 show() 메서드를 사용하고 있으며 예외를 전파하고 있기 때문에 여기서 처리해야 합니다.여기서 예외를 처리하지 않는 경우는, throws 키워드를 사용하고 있습니다.그렇기 때문에 메서드시그니처에서는 throws 키워드를 사용합니다.

기본적으로 예외를 던질 때와 동일한 장소에서 처리하지 않는 경우 함수의 정의에서 "throw exception"을 사용할 수 있습니다.

현재 메서드의 시그니처에 shrows 디렉티브를 선언하여 예외를 전파하는 경우, 회선 또는 콜스택 상단의 어딘가에서 try/catch 구성을 사용하여 예외를 처리해야 합니다.

언급URL : https://stackoverflow.com/questions/11589302/why-is-throws-exception-necessary-when-calling-a-function

반응형