-> 우리가 해결할 수 있는 건 : exception
-> 해결 못하는 건 : error (컴퓨터가 좋지 않거나 메모리가 딸리거나.. 실행되다가 죽음 , out of memory ) -> 회사에서 서버를 증설해야함 (하드웨어 문제인 경우가 많음) 잘못되었을때의 대비책은 없음
if가지고 처리 못하는 경우
-> exception 위에 throwable있음
(thorwable : 던질 수 있다)
-> 반복문일경우, 반목을 못하고 죽어버림(예외처리 배우면, 잘못된 상황이 발생하더라도 잘못되었다는 메시지 띄우고 죽지 않을수 있음)
-> 우리는 여기서만 했었음
(ex) nullpointexception = unchecked exception -> try -catch없어도 실행됨
unchecked 는 RuntimeException 으로 다 저장으로 가능(부모라서)
or
그냥 exception 으로 저장할 수도 있음
결론) 모든 예외는 exception (class명)으로 저장할 수 있음
-> 정상적으로 실행할 때 코드
-> 예외가 발생했을때 처리하기 위한 코드
분리해서
(정상) -> 1,2,3 코드 할때까지 문제 없으면 ) catch돌지 않음 -> try 만 함
(예외) -> 1,2번 -> 4번으로 곧바로 (catch)로 넘어감
-> catch
-> 예외처리방식 2개이상
-> 순차적으로 방문해서 2번째 catch 처리로 넘어감
-> 첫번째, 두번째 catch 둘다 처리를 못하면) 잘못 짠것
catch쪽으로 exception예외가 던져진다(
exception은 모든 예외의 부모임
try block으로 발생한 모든 예외를 exception으로 처리가능
-> dead code가 됨
-> 모든 예외처리를 첫번째할 수 있음
try쪽에서 예외를 주면
catch쪽에서 예외를 받는것(파라미터라고 생각)
exception은 모든 예외를 저장할 수 있음
-> I/O Exception 은 checked라서 try catch 없으면 코드가 실행이 안됨
-> network도 마찬가지
<보충>
Lambda(람다) -> Stream(스트림)(이어지는 수업)
-> 람다 문법이 스트림에서 어떻게 사용되는지 보여주는 수업
-> for문 없이 loop 돌릴 수 있음
-> 없어도 최종 final project에 영향 x
-> 이름 "tom"을 정수로 바꿔주라
-> NumberFormatException
catch 쪽에 numberformatexception 선언해놓고 처리할 수 있음
항상 ctrl + space 누르는 연습하기
Numberformatexception 이 발생하면 자동으로 Numberformatexception 을 catch블록으로 자바가 던진다
Try block에서 생긴 모든 예외는 자바에 의해서 catch로 던져진다
->catch 블록 잘못만들면 안한거랑 똑같음
잘모르면 어떤 종류의 예외이건 Exception으로 저장하는 건 가능하다.
-> 여기다가 exception 적기
수업시간에 보여주는 예외 다 외울필요는 없음
-> try 쓰고 ctrl + space 누르면 exception 들어가있음
-> 예외가 처리됨
RuntimeException - 자식 Uncheckd exception
-> parseint 메소드를 호출할때 항상 numberformatexception 발생할 수 있지만
하지만 try catch 없어도 실행가능
-> 값만 잘 넣으면 잘 실행됨
내일부터 배울 I/O -> try catch 필수 : checked exception
-> scanner쓰려면 import 필수
-> 모든 데이터가 system.in 통해서 들어감
-> 1+2 (String으로 , 공백 없으니까 : next())
공백없이 입력받기
-> 띄어쓰기하기!
-> split이라는 정규식 쓸거임
-> 배열의 형태로 저장되는 것
-> regex(regular expression: 정규식)
정규식에서 문자 하나 지정시) [대괄호]안에다가 적으면 "문자"로 이해함(문자 더하기로 이해함)
-> 문자열을 숫자로 바꿈
-> integer.parseInt는 언제나 numberformatexception 발생할 수 있음
-> 1.5 면 정수가 아니라서 예외발생
-> numberformatexception 발생 이유: 정수format이 아니라서
-> "1-2"가 들어가서 그냥 끝남
{"1-2"} 배열의 요소가 1개임
-> integer.parseInt(numbers[1]) 존재하지 않으니까 오류남
-> + 를 가지고
아니면 exception으로 묶음
이메일 contact. us
경고메시지 나타난 이유 : sc.close() 없어서
malformedURLException
: unhandled exception 나오면 try - catch 하라는 거구나
-> try catch 없다고 빨간줄 뜸
-> checked exception
-> 예외 종류 공부하는것보다
반드시 try-catch가 필요한 예외를 checked excpetion이라고 한다.
-> 그냥 excpetion으로 받기
-> 정수 입력받을때 쓰는 메소드 : nextInt()
-> 입력받을때 정수가 아니면 오류를 뿜을 수 있음
예외처리하기
-> 정상실행했을때는 문제 x
예외 있을때는 문제가 있음
예외가 발생안하면 close를 함.
-> 예외가 발생하면 sc.close()를 못함
-> 예외 발생하면 age에서 바로 jump 해버림
다행히 여기서 sc.close()는 생략가능해서 오류가 발생하지 않은것 뿐
-> close위치가 여기있으면 안됨
-> 항상 마지막에 무조건 실행됨
오류 안나게 sc.close() 옮기기
: 어떤 변수가 여는 중괄호에서 닫는 중괄호 까지만 존재할 수 있다 (기준이 되는것)
변수가 언제 태어나서 언제 죽는지(life cycle) 볼 수 있다.
-> 안에서만 변수가 사용될 수 있음
sc가 선언된 블록은 try 블록
-> try 블록에서 선언한건 try 블록안에서만 쓸 수 있다.
-> ★★어느 {중괄호} 소속인지가 중요한것
-> scope 조정
try 밖으로 scanner 선언을 뺌
-> sc가 선언된 {중괄호} 는 메인 메소드 블록으로 커짐(사용범위 늘어남)
선언과 생성 분리
객체들의 초기값 null로 잡아주면
-> 선언 위치만 한단계 올라서 scope 조정
-> 자원 반납 할때 쓰는 용어 : close()
-> 생성 : new를 뜻함
-> 자바입장 : 예외 아님, 우리가 봤을때는 예외임 (문제가 있는것들)
-> 우리가 봤을때는 10000살이 없음
-> 그동안 return같이 예외 회피 한것
-> 예외를 던지면 catch가 잡아서 처리함
-> 우리가 직접 RuntimeException 을 만들어서 발생시킴
던지면 catch가 받아서 처리함
지금까지는 system.out
예외 처리할때 객체가 어떤 역할을 수행할 수 있는지??
5/0 불가능 예외
-> Exception 의 부모로 object있으니까 활용가능
-> arithmetic 산술연산 예외
자바가 발생시킨 예외의 이유는 자바가 적어줌
우리가 발생시킨 예외는 우리가
-> string타입의 메소드 꺼내는 getter getMessage호출됨
-> 우리가 만든 예외도 확인하기
-> 메시지를 저장할수 있는 예외
-> 개발자가 예외 사유도 적음
-> 호출이 null로 시작 인수가 null
-> null값은 메소드 부를 수 없음
-> null값이 메소드 부르면) NullPointException 임
우리한테 필요한 건 예외를 찾아서 수정할 수 있게 추적하는것
-> 이건 도움이 되지 않음(어디서 발생했는지 알 수 없음)
try catch없을때 살펴볼 수 있는 예외 추적 문구가 다시 나옴
-> ★예외처리하세요
try - catch 하고
catch(Exception e)안에다가 printStackTrace(); 하면 됨
만들고 전달해야하는데 어느순간 안만들고 전달하는 경우도 있음
(다 nullpointexception 떨어짐)
try catch없을때 저게 나오면 추적하겠다는 건데
앞으로 checkedexception은 try -catch무조건 넣어야 하는데
try-catch넣으면 예외 추적이 안됨
-> 둘다 하기 위해서 쓰는것
API 개발 경우, 메시지를 만들어야하는 경우가 있음
-> 메소드 호출, 정의 체크하기!
-> 메소드에 예외가 있는데 그 예외를 메소드가 처리하지 않는다.
-> try catch를 없애는 대신에
-> ex02() 호출하는곳으로 try-catch를 옮기는것을 함
-> 예외처리를 미루는 것 (나 예외처리 안하겠다)
메소드 print
첫번째 글자, 나머지 글자 분리
-> 0은 포함, 1은 불포함( 1번 인덱스 이전까지 = 첫글자만 )
-> 인덱스 1개(끝까지 출력)
-> NullPointerException
-> 평소에는 ) 저기다가 try-catch넣음
but
-> nullPointeException : java.lang패키지라 import x
이 print exception 실행시 NullPointeException이발생할 수 도 있다.
-> getMessage : (자바가 만든) 예외메시지
print 호출하는 사람들아 NullPointException 처리해라
이 메소드를 적으면 try catch 안하겠다는것(일반적으로)
-> 예외발생할 수 있지만 trycatch안넣음
(예외를 던지는애들은 trycatch없음)
(try catch - parseInt 호출할때 함)
본문에 try -catch 함
-> java doc. 만들때 ) throws도 작업가능
(ex) 나이 0보다 작거나 .. 등등
-> (입금) 예외발생 거리가 있음
{입금하려고 돈 받아올때 돈이 0보다 작으면 예외임 )
-> (출금) 예외발생
생성방법 : 통장잔액, 계좌번호 입력받는방법으로만들기(source가서)
-> copy해오기
-> 예외를 만들어야함 (0보다작은값이 전달되었다해도 자바가 예외로 생각하지 x)
-> -도 long이니까 자바가 잡아내지 못함
-> 만들때는 RuntimeException
-> 예외메시지
-> try-catch없음
-> trycatch없는데 예외발생은 내가 안하고 나를 호출하는곳으로 보내겠다는것
-> throw문이 try에 들어가있음, throw문에서 발생한 예외는 catch가 처리함
-> 뭘로 받을까?
-> 예외메세지보여줌
-> 출금 메소드 copy
출금을 try~catch로 묶기
-> long타입의 retval변수가 Try블록 안에 들어가있음
출금 메소드 입장에서 trycatch밖에 자기가 가지고 있는 코드가 없음
-> return 없음
-> scope의 문제
-> 한칸위로 빼고
선언된 반환값있고
-> get 메시지에 의해서 꺼내지고 보여짐
-> 예외가 발생하면 ) 실제로 반환되는 값 : 0
(실제로 출금된 금액 : 예외 발생하면 0을 발생 = 실제로 출금된 금액이 없어서)
-> 반환값 있으니까
deposit은 자기가 예외처리함
withdrawl 호출시 자기가 예외처리함
-> 알아서 하는 애 2명을 부름
-> 할일이 없음
입금, 출금에 다 try-catch있어서
catch블록이 자주 나옴
-> 동일한 구조의 try-catch가 많이 나올 수 있는 구조
throws Runtimeexception으로 던짐
1. try -catch 빼기 2. throws 붙이기
★★★ try catch를 내가 하지 않겠다
-> try catch가 안되는 상황
-> try catch 붙이기
각 계좌의 입금, 출금해보기
입금이 runtimeexception 던졌는데 왜 여기서 try-catch안했음
이체 try-catch 메인 try-catch
try,catch를 메소드마다 다 하겠다 하면
메소드에서 예외처리를 안하겠다 -> 내 예외는 던지겠다(thorws run~)
하면
try -catch가 여기저기서 나오면 안됨
try-catch 지우고 위에서 던져지는애들 있으면
나도 던짐 (받자마자예외를 처리해야한다는 규칙 x)
-> 다시 던져버림(문제 없음)
모든 메소드에 예외 던지는 것은 있지만 ,try-catch는 하나도 없음
(모든 메소드에서 try-catch는 제거함)
-> 예외처리는 나도 안할거임
<중요한 이유>
-> 방금 배운걸로 쓰지 않으면) 메소드마다 try-catch가 넘쳐난다
-> 나를 호출하는 곳으로 다 던져서
거기서 한번만 하면 됨
bank - unchecked 라 try-catch가없어도 잘 되었던 것
try-catch가 있어야 할 자리에 있어야 함.
thorws도 있어야 할 자리에 있어어 함.
★★★ throws : 메소드에서 예외를 던지고 던질때) 받아서 처리하는 것!
<8/2시험>
(범위 : ~ ArrayList까지, 입력 Scanner도 나옴)
import 함 -> class3개 (2개는 완성, 1개는 속이 비어있는 메소드)
4개(10점)
60점
채웠는데 동작을 하면 +10점
채웠는데 동작을 안하면 +5점
(시험) 주차장에 차 넣기, 빼기, 차량 조회하기, 등록된 전체차량 조회하기
-> (유사한 문제)
도서관에 책넣기 문제를 풀어볼 것임
DB(database)없이
CRUD를 모두 해볼 수 있는 연습문제들
입력, 수정, 삭제 모두 담고있는 예제들
throws 활용
Gun class
(총알이 최대 50발 들어갈 수있는데 그 이상 장전하려고할때)
reload
-> systemout에 있던 메시지를 예외메시지로
F2 이름바꾸기
-> 예외처리해보기
1.예외 던지기(throws) - reload
2.예외 던지기(throws) - shoot
-> soldier의 reload 본문으로 감
(여기서 try -catch하지 말고 나도하기싫어 처리)
-> soldier의 reload호출하는 곳 : mainWrapper
gun 던지고 soldier가 하기싫어서 던지거 main이 받음
-> main이 하기싫은거 던질 수 있음
-> 나도 하기 싫어 하고
-> main이 예외를 던지면 java virtual machine 자바가 예외처리함
-> 예외로 처리해서 밑에는 코드가 안돌고 멈춘상황
메인에서 던지지는 않을예정
예외를 만들면 -> 예외 클래스 만들기(수업은 함, 하지만 프로젝트에서는 써먹지X)
메시지도 저장시키고 예외코드도 만들어서 함께 저장을 시키면 예외상황에 따라서 코드도 분리할 수 있는 작업도 가능함
-> 안배운 문법 추가로 학습해야함
-> 방금 Bakery에서 던진건 전부다 bakery.sell로 감
(1) try-catch로 밑에다가 처리하는 방법
(2) 여기서도 던지는 방법
-> 구매 불가합니다. 한것과 bakery.sell에서 받은거 전부다 RuntimeException으로 던짐
(예외상황)
빵을 -개 구매하겠다
빵의 -구매는 처리가 안되었음
-> 추가하기