예외(Exception) : 정상적이지 않은 상황
Error : 시스템적으로 컨트롤할 수 없는 상황(Error 발생시 JVM이 프로그램 종료시킴)
try, finally문만 실행
try문의 예외발생 지점 전까지 실행, 이후 catch, finally문 실행
catch문은 여러개 사용 가능 (단, 괄호안의 객체 선언시 클래스명은 각각 다르게)
e.printStackTrace(); : 해당 에러 정보 출력e.getMessage() : 간단하게 에러가 어디에서 발생했는지 알 수 있음(print문으로 출력)Exception e : catch문의 괄호에 넣으면 모든 예외처리 가능🔴
catch문을 여러개 사용할 때 주의할 점
- 순차적으로 예외처리할 수 있도록 괄호에 넣기
(Exception을 처음 조건에 사용한다면 뒤의 catch문은 필요없기 때문에 에러)
finally문은 예외 발생여부와 관계없이 마지막(try, catch문 이후)에 실행
예외처리를 위한 문법으로 함수 바디부분 전에 사용 (throws IOException)
throws ~, ~ (,로 여러개 적기)
Checked : 반드시 개발자가 예외처리해줘야 함 (ex. IOException)
Unchecked : 예외처리 필수는 아님 (ex. RuntimeException)
class InstCnt {
static int instNum = 0;
InstCnt() {
instNum++;
System.out.println("인스턴스 생성: " + instNum);
}
}
public class java_17_p6 {
public static void main(String[] args) {
InstCnt cnt1 = new InstCnt();
InstCnt cnt2 = new InstCnt();
InstCnt cnt3 = new InstCnt();
}
}
🟢 객체 생성할때마다 instNum 1증가
🟢 단, instNum이 static변수가 아니였을 경우, 모든 객체는 instNum의 값을 1로 출력
52장으로 무늬와 숫자가 모두 다름
(단, 가로세로 길이는 모두 동일)
52장을 배열 형태로 만들면 메모리 낭비
(가로 세로 길이는 static변수로 활용하여 하나의 메모리만 차지하도록)
클래스 내부에서
1. 일반함수에 static 변수를 넣으면 문제없음
2. static함수에 일반변수를 넣으면 문제발생
이유 : 일반 변수는 객체가 생성되어야 메모리를 잡음, static함수는 객체 생성전에 메모리에 잡히기 때문에 메모리에 없는 일반변수 사용 불가 (static변수는 가능)
System.out.println의 out은 static으로 선언되어 있음
(static을 하지 않았다면 사용할때마다 new를 해서 객체를 생성해야 함)
main이 public, static인 이유
static : 제일 먼저 호출되는 메소드public : 언제 어디서든 사용할 수 있도록