CodeGym /Java Blog /무작위의 /올드 레벨 09
John Squirrels
레벨 41
San Francisco

올드 레벨 09

무작위의 그룹에 게시되었습니다

지식 대 기술

이전 레벨 09 - 1대학은 우리에게 이론과 실제 사이에 큰 차이가 없다고 가르쳤습니다. 글쎄, 확실히 당신은 그것이 동일하지 않다는 것을 이해합니다. 그러나 핵심적인 차이점은 보이지 않습니다. 그러나 하나가 있습니다. 대부분의 사람들은 "I know"와 "I can" 사이에 등호를 넣습니다. 당신은? 몇 가지 예를 들면 어떻습니까?
  1. 흡연이 나에게 나쁘다는 것을 알지만 나는 담배를 피운다.
  2. 패스트푸드가 나에게 좋지 않다는 것을 알지만 먹습니다.
  3. 교통법규는 알지만 운전을 못해요.
  4. 나는 조깅이 나에게 좋다는 것을 알지만 아침에 조깅을 하지 않는다.
사람들이 "나는 할 수 있다"를 "알고 있다"로 받아들이는 경우가 종종 있습니다. 교통법규의 좋은 예입니다. 사람이 규정을 알고 운전할 줄 안다면 운전을 할 수 있다는 말인가? 아니요. 그가 운전할 줄 안다고 생각한다면? 그렇다면 강사가 필요한 이유는 무엇입니까? 그는 이미 모든 것을 알고 있습니다. 이미 모든 것을 알고 있다고 확신하면 새로운 것을 배우지 못할 것입니다. 그리고 당신이 모든 것을 할 줄 안다고 확신한다면, 당신은 공부하지 않을 것입니다. 이런 생각은 머리에 떠오르지도 않을 것입니다. 그리고 그것은 당신이 무언가를 배울 수 있는 모든 멋진 기회를 놓치게 된다는 것을 의미합니다. 일반적인 대학은 지식만 제공합니다. 스스로 기술을 습득해야 합니다. 하지만 나는 무엇을 듣습니까? 당신은 당신의 대학에서 이론 외에 연습을 했습니까? 좋아, 물리학과에서 공부했다면, 효율이 20% 이상인 증기 기관의 작동 모델을 만드십시오. 나는 당신이 그것을하는 방법을 알고 있다고 장담하지만 당신은 실제로 그것을 할 수 없을 것입니다, 맞습니까? 당신은 화학자 입니까 ? 무연 가루를 만드십시오. 당신은 방법을 알고 있지만 할 수 없습니다, 하? 수학자, 당신은? 포탄의 궤적을 계산합니다. 껍질의 모양을 고려하는 것을 잊지 마십시오. 수학 점은 실생활에서 날지 않습니다. 그리고 구형 말이 없습니다. 이전 레벨 09 - 2생물학자? 페니실린을 분리합니다. 이 곰팡이는 멜론에서 자랍니다. 당신은 방법을 알고 – 훌륭합니다! 당신은 그것을 할 수 있습니다? 경제학자?유가 상승을 예측합니다. 완료? 이제 예측에 따라 연간 $2,000 또는 $200,000로 바꾸십시오. FOREX에서 플레이한 적이 있습니까? 진짜 돈을 위해? 아니면 그냥 뭔지 아세요? 국제경제? 화려한! 해외 회사는 어디에서 열 수 있습니까? 홍콩, 아일랜드 또는 미국. 왜? 의심스러운 사실을 알더라도 실제로 해본 적이 없기 때문에 거의 할 수 없습니다. 당신은 그것을하는 방법에 대한 약간의 실마리조차 가지고 있지 않습니다. 오, 당신은 대학에서 그것을 공부하지 않았나요? 당신이 준비되지 않은 일을 당신에게 줄 권리가 있습니까? 이것이 실생활의 과제이기 때문입니다. 이 관행은 대학에서 공부한 모든 것입니다: 구형 말, 완벽한 경쟁 - 실생활에는 존재하지 않습니다. 근데 왜 언급을 잊었지마케팅 전문가 ? 가능한 한 많은 사람들이 내 강의에 대해 알 수 있도록 $500를 지출하는 가장 좋은 방법은 무엇입니까? 광고? 고전적인 광고뿐만 아니라 대학에서 거의 독특한 만병통치약으로 배웠다고 확신하는 USP(독특한 판매 제안)의 개념도 이미 구식이라는 사실을 알고 계십니까? 당신이 아는 것을 잊어 버리십시오. 자신에게 물어보십시오 – 무엇을 할 수 있습니까? 유용하다고요? 사람들이 돈을 지불하는 것? 좋은 돈, 내 말은? 친구 여러분, CodeGym과 같은 멋진 코스에 감사를 표합시다. 그것으로 인해 당신은 프로그램하는 방법을 알 뿐만 아니라 실제로 그것을 할 수 있게 될 것입니다. 당신은 또한 직업을 얻을 수 있고 몇 년 안에 좋은 돈을 벌 수 있습니다. 이 돈이면 착하고 아늑하게 살 수 있기를 바랍니다. 다시 한 번 말씀드리지만 기억하세요. 무엇을 아는지는 중요하지 않습니다. 중요한 것은 당신이 가지고 있는 유용한 기술, 사람들이 당신에게 기꺼이 지불할 기술입니다. 이것을 빨리 이해할수록 좋습니다.

당신은 새로운 수준에 도달했습니다

레벨 9

이전 레벨 09 - 3

1 Risha, 스택 추적

이전 레벨 09 - 4- 여기요! 오늘은 스택 트레이스가 무엇인지 알려드리겠습니다. 그러나 먼저 스택이 무엇인지 설명하겠습니다. - 서류 더미를 상상해보십시오 - 특정 사무원에 대한 과제. 새 과제를 스택 맨 위에 놓을 수 있으며 스택 맨 위에서 과제를 가져옵니다. 따라서 과제는 선착순이 아닙니다. 점원이 마지막으로 오는 과제를 맡을 때마다. 이러한 수집 구조를 스택이라고 합니다 . - Java에는 특별한 컬렉션인 Stack이 있습니다. 이 컬렉션에는 «요소 추가» 및 «요소 가져오기(가져오기)» 메서드가 있습니다. 이미 알고 있듯이 마지막으로 추가된 요소가 먼저 사용됩니다. - 흠. 어렵지 않은 것 같아요. - 괜찮은. 그런 다음 스택 추적 이 무엇인지 설명하겠습니다.이다. - Java에서 함수 А가 함수 B를 호출 하고 후자는 함수 C를 호출 하고 차례로 함수 D를 호출한다고 상상해 보십시오 . 따라서 함수 B를 종료하려면 먼저 함수 C를 종료해야 하며 그렇게 하려면 함수 D를 종료해야 합니다 . 이것은 스택과 매우 유사합니다. - 유사점은 무엇입니까? - 스택에서 특정 과제에 도달하려면 맨 위에 놓인 과제도 모두 완료해야 합니다. - 글쎄요, 일종의 비유인데 제가 모든 것을 제대로 이해했는지 잘 모르겠습니다. - 이봐. Java에서 스택은 요소 집합입니다. 그것은 스택에 있는 종이 시트와 같습니다. 위에서 세 번째를 가져오려면 두 번째 시트를 가져와야 하지만 그 전에 첫 번째 시트를 가져와야 합니다. 시트는 항상 넣고 빼면 되지만 시트는 맨 위에만 놓고 맨 위에서만 가져갈 수 있습니다. 함수 호출에도 동일하게 적용됩니다. 함수 А 는 함수 B를 호출 하고 후자는 함수 C를 호출합니다 . А 를 종료하려면 먼저 B를 종료해야 하며 이를 위해서는 C를 종료해야 합니다 . - 잠깐 기다려요. 제대로 된 경우 전체 스택은 «스택에 넣은 마지막 시트만 가져올 수 있습니다» 및 «먼저 마지막으로 호출된 함수가 종료되어야 합니다»로 나타납니다. 그렇습니까? - 예. 따라서 함수 호출의 순서는 «함수 호출 스택» 또는 단순히 «호출 스택»입니다. last 호출된 함수가 먼저 종료되어야 합니다. 예를 살펴보겠습니다. 이전 레벨 09 - 5- 좋습니다. 함수 호출로 모든 것이 명확합니다. 하지만 이 StackTraceElement 는 무엇입니까 ? - JVM(Java Virtual Machine)은 모든 함수 호출을 기록합니다. 이를 위해 특별한 컬렉션인 스택이 있습니다. 한 함수가 다른 함수를 호출하면 JVM은 새 요소 StackTraceElement를 이 스택에 배치합니다. 함수가 끝나면 요소가 스택에서 삭제됩니다. 따라서 이 스택은 항상 «함수 호출 스택»의 현재 상태에 대한 최신 정보를 저장합니다. - 모든 StackTraceElement호출된 메서드에 대한 정보를 포함합니다. 따라서 getMethodName을 사용하여 이 메서드의 이름을 가져올 수 있습니다 . - 위의 예는 다음을 보여줍니다.
  1. «호출 스택» 가져오기:
  2. for-each 루프를 사용하여 배열을 반복합니다 . 잊지 않으셨으면 좋겠습니다.
  3. 메서드 이름을 System.out 에 인쇄합니다 .
- 흥미롭고 쉬운 것 같습니다. 고마워요, 리샤!

2 Diego, 스택 트레이스 표시 작업

- 이봐, 아미고! 다음은 스택 추적을 화면에 표시하는 작은 작업입니다.
작업
1 각 메서드는 StackTrace를 반환해야 합니다.
서로를 호출하는 5개의 메서드를 작성합니다. 각 메서드는 StackTrace를 반환해야 합니다.
2 StackTrace 다시
서로를 호출하는 5개의 메서드를 작성합니다. 각 메서드는 호출자 메서드의 이름을 반환해야 합니다. StackTrace를 사용하여 호출자 메서드를 얻을 수 있습니다.

이 메서드는 서로 호출하는 5개의 메서드 작성 에서 이 메서드가 호출된 코드의 줄 번호를 반환해야 합니다 . 각 메서드는 이 메서드가 호출된 코드의 줄 번호를 반환해야 합니다. element.getLineNumber() 함수를 사용하십시오 .
4 10번 호출의 스택 추적
10번 호출의 스택 추적을 가져오는 코드를 작성합니다.
5 메서드는 결과를 반환해야 합니다. 스택 추적 깊이
스택 추적 깊이를 표시하고 반환하는 메서드를 작성합니다. 스택 추적 깊이는 해당 메서드의 수(목록의 요소 수)입니다.

3 Elly, 오류 및 예외

- 이봐, 아미고! 오늘 우리는 매우 흥미로운 교훈을 가지고 있습니다. 예외 사항에 대해 알려드리겠습니다. 예외는 프로그램의 오류를 제어하는 ​​특별한 메커니즘입니다. 다음은 프로그램에서 발생할 수 있는 오류의 몇 가지 예입니다.
  1. 프로그램이 전체 디스크에 파일 쓰기를 시도합니다.
  2. 프로그램은 null 참조를 저장하는 변수의 메서드를 호출하려고 시도합니다.
  3. 프로그램은 숫자를 0으로 나누려고 시도합니다.
이러한 조치로 인해 오류가 발생합니다. 일반적으로 이것은 프로그램 종료로 이어지며 코드 실행을 계속할 필요가 없습니다. - 왜 그런 겁니까? - 자동차가 낭떠러지에서 떨어질 때 핸들을 돌리는 것이 의미가 있나요? - 프로그램이 종료되어야 한다는 뜻인가요? - 예. 이전에는 그랬습니다. 모든 오류로 인해 프로그램이 종료되었습니다. - 매우 현명한 결정입니다. - 노력하는 것이 좋지 않을까요? - 응. MS Word에 거대한 텍스트를 입력하고 저장했지만 저장되지 않았지만 프로그램은 모든 것이 정상이라고 알려줍니다. 그리고 계속 입력합니다. 어리석은, 그렇지? - 응. - 그런 다음 프로그래머는 흥미로운 조치를 내놓았습니다.각 함수는 작업 상태를 반환했습니다. 0은 함수가 예상대로 작동했음을 의미하며, 다른 값은 오류가 발생했음을 의미합니다 . 이 값은 오류 코드입니다. - 하지만 이 방식에는 단점이 있었습니다. 각(!) 함수 호출 후 함수에서 반환된 코드(숫자)를 확인해야 했습니다. 첫째, 불편했습니다. 오류 처리 코드가 거의 실행되지 않았지만 항상 작성해야 했습니다. 둘째, 함수 자체는 종종 다른 값을 반환합니다. 어떻게 해야 할까요? - 응. 그게 내가 묻고 싶었던 것입니다. - 그런 다음 밝은 미래가 왔습니다. 예외와 오류 처리가 나타났습니다. 작동 방식은 다음과 같습니다.
  1. 오류가 발생하면 JVM(Java Virtual Machine)은 오류에 대한 모든 정보를 포함하는 특수 개체(예외)를 생성합니다. 다른 오류의 경우 다른 예외가 있습니다.
  2. 그런 다음 이 예외는 프로그램이 현재 함수를 즉시 중단하도록 강제하고 다음 함수는 메인 메서드를 종료할 때까지 중단합니다. 그 후 프로그램이 종료됩니다. Java 개발자는 이 프로세스를 «호출 스택 롤백»이라고 합니다.
- 하지만 당신은 프로그램이 확실히 종료되지 않을 것이라고 말했습니다. - 그렇습니다. 예외를 잡을 수 있는 방법이 있기 때문입니다. 필요할 때 언제 어디서나 특수 코드를 작성하여 이러한 예외를 포착하고 중요한 작업을 수행할 수 있습니다. - 이를 위해 특별한 구조의 try-catch 가 있습니다 . 작동 방식 보기: 이전 레벨 09 - 6- 왜 «method1 호출 후. 표시되지 않습니다»가 화면에 표시되지 않습니까? - 물어봐주셔서 기쁩니다. 25행에는 0으로 나누기가 있습니다. 이로 인해 오류(예외)가 발생합니다. JVM(Java Virtual Machine)이 오류 정보를 포함하는 객체 ArithmeticException을 생성했습니다. 이 개체는 예외입니다. - method1() 메서드 내에서 예외가 발생했습니다 .이로 인해 메서드가 즉시 종료되었습니다. 또한 try-catch 블록이 없는 경우 main 메소드가 종료됩니다 . - try 블록 내에서 예외가 발생하면 catch 블록 에서 catch됩니다 . 블록 try 의 나머지 코드는 실행되지 않고 블록 catch 의 실행이 즉시 시작됩니다. - 잘 이해가 안되네요. - 즉, 이 코드는 다음과 같이 작동합니다.
  1. try 블록 내에서 예외가 발생하면 이 블록의 코드는 더 이상 실행되지 않지만 블록 catch 의 실행이 시작됩니다.
  2. 예외가 발생하지 않으면 try 블록은 끝까지 실행되고 catch 실행되지 않습니다 .
- 에헴! - 각 메서드 호출 후 호출된 메서드가 자체적으로 종료되었는지 또는 예외로 인해 종료되었는지 확인한다고 상상해 보십시오. 예외가 있는 경우 JVM은 사용 가능한 경우 블록 catch를 실행하기 시작하고 예외를 catch합니다. catch 블록이 없으면 JVM은 현재 메서드를 종료합니다. 그런 다음 현재 메서드를 호출한 메서드에서 동일한 검사가 시작됩니다. - 이제 알 것 같아요. - 괜찮아. - catch 블록 안에 있는 Exception은 무엇입니까? - 모든 예외는 Exception 클래스에서 상속된 클래스입니다. catch 에 해당 클래스를 지정하여 이들 중 하나를 잡을 수 있습니다.공통 상위 클래스 Exception을 지정하여 한 번에 차단하거나 모두 차단합니다. 그런 다음 변수 e(이 변수는 예외 개체의 참조를 저장함)에서 오류에 대해 필요한 모든 정보를 얻을 수 있습니다. - 엄청난! 내 방법에서 다른 예외가 발생하면 어떻게 해야 합니까? 다른 방법으로 처리할 수 있습니까? - 당신은해야합니다. 다음과 같이 할 수 있습니다. 이전 레벨 09 - 7- try 블록은 여러 catch 블록을 포함할 수 있으며 각 블록은 해당 유형의 예외를 catch합니다. - 음. 글쎄, 나는 그것을 얻었다. 물론, 나는 이런 글을 직접 쓰지 않을 것입니다. 하지만 그런 코드를 만나면 두렵지 않다.

4 Elly, RuntimeException, throws

이전 레벨 09 - 8- 오늘은 다른 주제를 꺼내기로 했습니다. Java에서 모든 예외는 controlled/checkeduncontrolled/unchecked 의 두 가지 유형으로 나뉩니다 . 체크된 예외는 포착 되어야 하고 , 체크되지 않은 예외는 포착될 수 있지만 필수는 아닙니다 . - 의도적으로 코드에서 예외를 던질 수 있습니까? - 코드에서 직접 예외를 던질 수 있습니다. 자신만의 예외를 작성할 수도 있습니다. 그러나 우리는 나중에 이 구멍에 깊이 들어갈 것입니다. 이제 JVM(Java Virtual Machine)에서 발생하는 예외를 처리하는 방법을 알아보겠습니다. - 좋아요. - 예외 ClassNotFoundExceptionFileNotFoundException 인 경우메서드에서 발생(나타남)하는 경우 프로그래머는 메서드 서명(메서드 헤더)에 이를 지정해야 합니다. 이러한 예외가 확인됩니다. 일반적으로 다음과 같이 표시됩니다. 이전 레벨 09 - 9- 따라서 쉼표로 구분된 예외를 던지고 나열합니다. 오른쪽? 그렇습니까? - 예. 그러나 또 다른 흥미로운 점이 있습니다. 아래 예제가 컴파일되기 위해서는 method1()을 호출하는 메서드가 이러한 예외를 포착 하거나 앞으로 던져야 합니다 . 확인된 예외를 앞으로 던지려면 메서드의 헤더에 지정해야 합니다 . - 다시 한 번, 기본 메서드에서 헤더 구문에 FileNotFoundException을 throw하는 메서드를 호출하려는 경우 그런 다음 다음 두 가지 중 하나를 수행해야 합니다.
  1. FileNotFoundException , … 위험한 메서드를 호출하는 코드를 try-catch 블록
    으로 래핑해야 합니다.
  2. FileNotFoundException , …
메소드 main 의 throws 목록 에 이러한 예외를 추가해야 합니다 . -예를 들어 주시겠습니까? - 여기를 보십시오: - 이 예제는 컴파일되지 않을 것입니다. 왜냐하면 main 메서드 는 catch해야 하는 예외를 throw하는 method1() 메서드를 호출하기 때문입니다. - 예제를 컴파일하기 위해서는 main 메서드에 예외 처리를 추가해야 합니다 . 두 가지 방법으로 이를 수행할 수 있습니다. - 여기서는 try-catch를 사용하여 이를 포착합니다 . - 더 명확해지고 있지만 거의 없습니다. - 아래 예를 살펴보십시오. - 여전히 예외가 있습니다. RuntimeException 과 여기에서 상속된 클래스입니다.이전 레벨 09 - 10이전 레벨 09 - 11이전 레벨 09 - 12이전 레벨 09 - 13그들을 잡거나 던질 필요는 없습니다. 확인되지 않은 예외입니다. 이러한 예외는 예측하기 어려운 것으로 간주되므로 발생을 예측하는 것이 거의 불가능합니다. 동일한 작업을 수행할 수 있지만 throws 에 지정할 필요는 없습니다 .

5 Risha, 호출 스택 롤링, 예외에서 수행하는 방법

- 예외가 어떻게 작동하는지에 대해 조금 더 말씀드리고 싶습니다. 아래 예는 다음을 설명합니다. 이전 레벨 09 - 14- 이해가 안 됩니다. - 좋아요. 무슨 일이 일어나고 있는지 설명하겠습니다. - 왼쪽 예제에서는 여러 메서드를 연쇄적으로 호출합니다. method2() 에서 우리는 특별히 예외를 생성하고 발생시킵니다(오류를 시작하기 위해). - 오른쪽의 예는 어떤 일이 발생하는지 보여줍니다. method2() 를 보십시오 . 이것이 바로 예외의 생성이 변환되는 것입니다. RuntimeException 유형 의 개체를 생성하고 특수 변수 예외 에 저장 하고 즉시 메서드를 종료합니다 – return . - method1 에서 method2 를 호출한 후 검사가 있습니다.예외가 있는지 없는지; 예외가 있으면 method1이 즉시 종료됩니다. 이 확인은 각(!) Java 메서드를 호출한 후 암시적으로 수행됩니다. - 우와! - 정확히. -메서드 오른쪽 열에 try-catch 블록 에서 예외가 잡히면 어떻게 되는지 썼습니다 . 예외가 없으면 코드는 계획대로 계속 실행됩니다. catch 에 지정된 유형의 예외가 있으면 처리합니다. - throwinstanceof는 무엇을 의미합니까? - 왼쪽의 마지막 줄을 보면 새로운 RuntimeException(s)이 발생합니다.. 이런 식으로 우리는 예외를 만들고 던집니다. 이것은 단지 예일 뿐입니다. 우리는 지금까지 그것을 하지 않을 것입니다. - 오른쪽 블록에서 « а instanceof B » 명령을 사용하여 객체 a가 B 유형인지 확인합니다 . 즉, 변수 exception에 저장된 객체가 RuntimeException 유형인지 여부입니다 . 논리적인 표현입니다. - 음, 조금 더 명확해지고 있습니다.

6 디에고, 예외 캐치 태스크

- 이봐! 디에고 삼촌은 당신을 위해 낚시에 대한 몇 가지 작업을 가져왔습니다. 행운을 빌어 요. 필요하실 것 같아요. ㅎ. 이전 레벨 09 - 15- 이봐, 아미고! 다음은 몇 가지 흥미로운 예외 catch 작업입니다.
잡기 작업
1 1. 숫자로 연산할 때의
예외 코드를 실행할 때 발생하는 예외를 잡아라:
int a = 42 / 0;
유형을 지정하여 예외를 화면에 표시합니다.
2 2. 문자열로 동작할 때의
예외 코드를 실행할 때 발생하는 예외를 잡아라:
String s = null;
String m = s.toLowerCase();
유형을 지정하여 화면에 예외를 표시합니다.
3. 배열로 작동할 때의
예외 코드를 실행할 때 발생하는 예외를 포착합니다.
int[] m = new int[2];
m[8] = 5;
유형을 지정하여 화면에 예외를 표시합니다.
4 4. 목록 컬렉션으로 작업 시
예외 코드 실행 시 발생하는 예외를 포착합니다.
ArrayList<String> list = new ArrayList<String>();
문자열 s = list.get(18);
유형을 지정하여 화면에 예외를 표시합니다.
5 5. Map 컬렉션으로 작업 시
예외 코드 실행 시 발생하는 예외를 포착합니다.
HashMap<String, String> map = new HashMap<String, String>(null);
map.put(null, null);
map.remove(null);
유형을 지정하여 화면에 예외를 표시합니다.
- 팁: 먼저 프로그램을 작성한 다음 어떤 예외가 발생하는지 확인한 다음 코드를 변경하고 해당 예외를 포착하십시오.

7 Risha, 다중 캐치가 작동하는 방식

이전 레벨 09 - 16- 이제 좀 더 흥미로운 강의가 있습니다. 나는 가르치는 것을 너무 좋아합니다. - 다중 캐치가 어떻게 작동하는지 알려주고 싶습니다 . 실제로는 매우 간단합니다. try 블록에서 예외가 발생하면 프로그램 실행이 첫 번째 catch 로 전송됩니다 . - 블록 catch의 괄호 안에 지정된 유형이 예외 객체의 유형과 동일한 경우 {} 내에서 코드 실행이 시작됩니다. 그렇지 않으면 다음 catch 로 이동합니다 . 그곳에서 확인이 반복됩니다. - 더 이상 catch 블록이 없지만 예외가 catch되지 않은 경우 앞으로 던져지고 현재 메서드가 중단됩니다. - 알겠어요. 해당 유형이 예외 유형과 일치하는 catch가 실행됩니다. - 네, 그러죠. 실제로는 좀 더 복잡합니다. 요점은 클래스가 서로 상속될 수 있다는 것입니다. «Cow» 클래스가 «Animal» 클래스에서 상속된 경우 «Cow» 유형의 개체는 «Cow» 유형의 변수뿐만 아니라 «Animal» 유형의 변수에도 저장될 수 있습니다. . - 그래서? - 모든 예외는 클래스 Exception 또는 RuntimeException ( Exception 에서도 상속됨 )에서 상속되므로 모두 catch(Exception e) 또는 catch(RuntimeException e) 명령을 사용하여 잡을 수 있습니다 . - 그래서? - 즉,첫째, catch(Exception e) 명령을 사용하여 모든 예외를 잡을 수 있습니다 . 둘째, catch 블록 의 순서가 중요합니다. 예: - 0으로 나눈 결과인 ArithmeticException이 두 번째 catch에서 포착되었습니다. 이전 레벨 09 - 17- 아래 예에서 ArithmeticException은 모든 예외의 클래스가 Exception에서 상속되기 때문에 첫 번째 catch 에서 catch됩니다. 따라서 Exception은 모든 예외를 포착합니다 . 이전 레벨 09 - 18- 아래 예제에서 ArithmeticException 예외는 catch되지 않고 호출 메서드로 전달됩니다. 이전 레벨 09 - 19- 이제 점점 명확해지고 있습니다. 이러한 예외는 그렇게 쉽지 않습니다. - 그냥 그런 것 같습니다. 사실 자바에서 가장 간단한 것 중 하나입니다. - 기뻐해야 할지, 화를 내야 할지 애매...

8 디에고, 다중 예외 catch 작업

- 이봐, 아미고! 어제 내가 술에 취해 당신의 일을 너무 복잡하게 만들었지만, 당신이 힘든 감정 없이 모두 잘 해결했으면 좋겠습니다. 그것은 당신 자신의 이익을 위한 것입니다. 여기:
작업
1 1. 예외 Exception 에서 상속된 두 가지 예외와 RuntimeException 에서 상속된 다른 두 가지
예외를 발생시키는 메서드가 있습니다 : NullPointerException , ArithmeticException , FileNotFoundExceptionURISyntaxException . NullPointerExceptionFileNotFoundException 을 포착해야 하지만 ArithmeticExceptionURISyntaxException 은 포착하지 않아야 합니다 . 그것을하는 방법?

2 2. 예외 포착 Exception
에서 순차적으로 상속되는 세 가지 예외가 있습니다 . class Exception1 extends Exception class Exception2 extends Exception1 class Exception3 extends Exception2 다음과 같은 방법이 있습니다. public static void method1() throws Exception1, Exception2, Exception3 Write a catch Exception1 , Exception2Exception3 세 가지를 모두 catch하는 블록






3. 선별적 예외 포착 1. BEAN.methodThrowExceptions
메소드에 의해 발생한 예외를 찾으십시오 . 2. processExceptions() 메서드는 BEAN.methodThrowExceptions 메서드를 호출 하고 예외를 처리해야 합니다. 2.1. FileSystemException 예외가 발생하면 BEAN.log 메서드를 호출하여 기록 하고 2.2를 전달합니다 . 예외 CharConversionException 또는 기타 IOException이 발생하면 BEAN.log 메소드를 호출하여 기록하십시오. 3. 2.1에서 전달하려는 예외의 클래스/유형을 추가하십시오. processExceptions()



메소드 서명.
4. main() 메서드에서 나머지 예외를 처리하고 기록합니다. try..catch 사용

팁: 잡고 싶지 않은 MyException
예외를 잡은 경우 다음 코드를 사용하여 앞으로 던질 수 있습니다. catch (MyException e) { throw e; }



4 4. 체크 예외 잡기 processExceptions()
메서드에서 모든 체크 예외를 처리합니다 . 발생한 각 확인된 예외를 화면에 표시해야 합니다. 하나의 블록 try 만 사용할 수 있습니다 .

5 5. 확인되지 않은 예외 잡기 processExceptions()
메서드에서 모든 확인되지 않은 예외를 처리합니다 . printStack() 메서드를 사용하여 발생한 각 예외의 스택 추적을 화면에 표시해야 합니다 . 하나의 블록 try 만 사용할 수 있습니다 .

9 교수, 예외에 대한 강의

- 오늘 우리는 매우 흥미로운 주제인 예외를 가지고 있습니다. 당시 젊은 과학자들과 프로그래머들이 이 주제에 열광하던 시절… 다음은 강의노트입니다. 나는 당신이 그것을 스스로 알아낼 것이라고 생각합니다. 여기: Java 예외(Oracle 설명서) Java의 예외 처리(Java T 포인트) Java - 예외 처리(튜토리얼 포인트) 기본 Java 예외 처리

10 훌리오

- 아미고, 오늘 수업 어때? 당신의 양전자 두뇌가 아직 작동하지 않았습니까? 디에고의 임무는 누구라도 지치게 하기에 충분하다. 잠시 맥주를 마시며 휴식을 취합시다. 아직도 서 있니?

11 다람쥐 선장

-안녕하세요, 군인! - 좋은 아침입니다! - 멋진 소식이 있습니다. 다음은 기술을 강화하기 위한 빠른 확인입니다. 매일 하세요, 그러면 당신의 기술이 정말 빠르게 향상될 것입니다. 작업은 Intellij IDEA에서 수행하도록 특별히 설계되었습니다.
Intellij Idea에서 수행할 추가 작업
1 1. 0으로 나누기 임의의 숫자를 0으로 나누고 나누기 결과를 화면에 표시해야 하는 public static void divisionByZero()
메서드를 만듭니다 . divisionByZero() 메서드 호출을 try..catch 로 래핑합니다 . exception.printStackTrace() 메서드를 사용하여 예외 스택 추적을 화면에 표시합니다 .
2 2. 10에서 0으로 카운트다운
10에서 0으로 카운트다운하는 루프를 작성합니다. Thread.sleep(100)을 사용하여 지연을 만듭니다. sleep 호출을 try..catch
래핑합니다 .
3. 메서드를 try..catch로 래핑합니다.
키보드에서 숫자를 읽습니다. 키보드에서 숫자를 읽는 코드를 별도의 메서드 readData() 에 작성합니다 .
이 메서드의 전체 본문( 숫자가 저장될 목록 선언을 제외한 readData() 메서드 내의 전체 코드)을 try..catch 로 래핑합니다 .

사용자가 숫자를 입력하는 대신 텍스트를 입력하면 메서드는 예외를 포착하고 이전에 입력한 모든 숫자를 화면에 표시해야 합니다.
화면에 숫자를 표시합니다. 각 번호는 새 줄에 있어야 합니다. 숫자의 순서는 입력할 때와 같아야 합니다.
4 4. 날짜 변환기
키보드에서 «08/18/2013» 형식의 날짜를 읽습니다.
«2013년 8월 18일» 형식으로 해당 날짜를 화면에 표시합니다. DateSimpleDateFormat
개체를 사용합니다 .
5 5. 모음과 자음
키보드에서 줄을 읽어주는 프로그램을 작성하세요.
프로그램은 화면에 두 개의 문자열을 표시해야 합니다.
1) 첫 번째 문자열에는 모음이 포함되어야 합니다.
2) 두 번째 문자열에는 입력된 텍스트의 자음 및 구두점 문자가 포함되어야 합니다.
공백으로 문자를 구분합니다.

입력 예:
Stop look listen
출력 예:
oooie
stplklstn
6 6. 빨간모자의 이야기
1. 빨간모자, 할머니, 패티, 나무꾼, 늑대의 5가지 클래스가 있습니다.
2. 각 클래스에는 두 개의 ArrayList 유형 필드인 kill 및 ate가 있습니다.
3. 필요한 개체가 이미 생성되어 있습니다(후드, 할머니, ...).
4. "빨간 모자"의 논리를 얻기 위해 올바른 관계(누가 누구를 먹고 죽였는가)를 만드십시오.
7 7. 정적 수정 이동
정적 수정자를 이동하여 코드가 컴파일되도록 합니다.
8 8. 숫자 배열 목록
요소가 숫자 배열인 목록을 만듭니다. 길이가 각각 5, 2, 4, 7, 0인 5개의 객체 배열을 목록에 추가합니다. 데이터로 배열을 채우고 화면에 표시합니다.
9 9. 고양이 10마리 String name 필드가 있는 Cat 클래스를
만듭니다 . Map<String, Cat> 사전을 만들고 «Name» - «Cat» 모델에 고양이 10마리를 추가합니다. 에서 이름 집합을 가져오고 화면 집합을 표시합니다.

- 그 임무는 그린을 위한 것이었다. 더 복잡한 보너스 작업을 추가했습니다. 탑건 전용.
보너스 작업
1 1. 프로그램이 컴파일 및 실행되지 않습니다. 고쳐.
작업: 프로그램은 키보드에서 두 개의 파일 이름을 읽고 첫 번째 파일을 두 번째 이름으로 지정된 위치에 복사해야 합니다.
2 2. 프로그램에 새로운 기능을 추가합니다.
이전 작업: 프로그램은 키보드에서 두 개의 파일 이름을 읽고 첫 번째 파일을 두 번째 이름으로 지정된 위치에 복사해야 합니다.
새 작업: 프로그램은 키보드에서 두 개의 파일 이름을 읽고 첫 번째 파일을 두 번째 이름으로 지정된 위치에 복사해야 합니다.

지정된 이름을 가진 파일(복사할 파일)이 존재하지 않는 경우 프로그램은 «파일이 존재하지 않습니다»라는 메시지를 화면에 표시하고 파일을 읽기 전에 콘솔에서 파일 이름 읽기를 다시 시도해야 합니다. 두 번째(대상) 파일의 이름입니다.
3. 알고리즘 학습 및 실습.
키보드에서 단어 및 숫자 목록을 읽습니다. 단어는 오름차순으로, 숫자는 내림차순으로 화면에 표시합니다.

입력 예:
Cherry
1
Bean
3
Apple
2
0
Watermelon

출력 예:
Apple
3
Bean
2
Cherry
1
0
Watermelon
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION