### switch 문
if-else 는 조건식에 항상 논리형이 와야하지만 switch 문의 조건식에는 int형으로 표현할 수 있는 조건식이 와야한다.
switch(조건식) {
case 상수1: 문장1;
break;
case 상수2: 문장2;
break;
//..
default : a문장n;
}
각 case에 있는 문장 뒤에는 break가 와야하나. 만약 오지 않는다면 다음 case 문장도 실행된다.
public class test {
public static void main(String args[]) {
int i = 2;
int j = 1;
int k = 0;
for (; i<5;i++)
if (k++ > j)
j = i + k;
System.out.println("j="+j);
}
}
==> 7(4+3)
### while 문
while문의 조건식에는 true, false 로 표현할수 있는 조건식이 와야한다.
while(조건식) { 문장 }
do { 문장 } while(조건식) <ㅡ 일단 한번 실행뒤에 조건식 검사
### 분기문
for(int i=0; i<10; i++) {
if(i==5) break;
System.out.println(i)
}
결과 : 0 1 2 3 4
outer:
for(int i=0;i < 5; i++) {
for(int j=2;j<5;j++) {
if(i==j) break outer;
System.out.println(i+" "+j);
}
}
결과 : 02, 03, 04, 12, 13, 14
for(int i=0; i<5;i++) {
if(i==3) continue;
System.out.println(i);
}
결과 : 0 1 2 4
outer:
for(int i=0;i < 5; i++) {
for(int j=2;j<5;j++) {
if(i==j) continue outer;
System.out.println(i+" "+j);
}
}
결과 : 02, 03, 04, 12, 13, 14, 32, 42, 43
### 예외(Exception)
java.lang.Object
|
java.lang.throwable
/ \
java.lang.Error java.lang.Exception
/
java.lang.RuntimeException
--------------------------------|------
Unchecked Exception | checked Exception
1. Err 계층
Error 클래스의 계층에서 발생되는 예외는 프로그램 실행 중 발생할 확률이 적은 예외들로서 자원고갈이나 JVM내부의 에러와 같은 프로그램에서 처리할수 없는 치명적인 에러들로 구성
클래스 | 발생원인
--------------------------------------------------------------------
AWTError | 심각한 Abstract Window Toolkit오류가 발생할때
ThreadDepth | 실행중인 쓰레드가 중지되었을때
LinkageError | 클래스가 일치하지 않거나 존재하지 않을때
VirtualMachineError | 자바 가상머신에 심각한 문제가 발생했을때
2. Exception 예외
프로그래머가 막을수 있는 예외들
Unchecked Exception(검사되지않은 예외) + checked Exception(검사된 예외)
Runtime Exception은 Unchecked Exception에 속하며 NullPointerException, IndexOutOfBoundsException...와 같은 예외들이 있다.
Runtime Exception은 시스템 정의 예외라고 불리우며 Unchecked Exception를 제외한 나머지 예외들은 사용자가 예외처리를 해야 컴파일이 되기 때문에 사용자 정의 예외라고도 한다.
### finally 문
오류가 나던 안나던 무조건 실행되는 구문
1. 예외 발생시
만약 try 블록이나 catch 블록에 return문이 있다면 ? finally 문을 실행후에 그 return 문을 실행하게 된다. 그러나 try, catch 에 System.exit()같은 강제 종료의 경우엔 finally 문이 실행되지 않는다.
2. 예외 발생안할때
try, catch 블록에 return 문이 없을 경우에는 finally 블록내의 코드를 실행한후 finally 블록 코드를 실행하지만 return문이 있을경우엔 finally 실행후에 그 return문 실행하므로 finally 다음에 있는 코드들은 실행되지 않는다.
### throw문
java.lang.Throwable 클래스를 상속받은 클래스, 예외를 던진다.
throw new Exception();
throw new Exception("Error");
### throws문
메서드 밖에서 예외를 처리하기 위해서는 메서드가 발생시킬 수 있는 예외들을 throws 문을 이용해 명시하도록 하면 된다. 이렇게 throws문에 의해 명시된 예외는 해당 메서드에서 trh/catch 문을 이용해 처리하지 않아도 된다.
하지만 메서드를 호출한 곳으로 예외가 전파되기 때문에 호출한 쪽에서는 해당예외를 try/catch문을 이용해 처리해주거나 throws문을 통해 상위 레벨의 메서드로 다시 전파해주어야한다. 만약 예외가 가장 상위레벨의 메서드로 전파가 되었는데도 예외를 처리하지 못했다면 자바가상머신은 적절한 메세지를 화면에 출력하고 프로그램을 종료한다.
메서드 이름 throws 예외객체, 예외객체,..