day16
<복습>
예외: 코드로 해결 가능한 문제들
-예외처리: 예외가 발생할 수 있는 코드를 예외가 발생했을 때, 처리할 수 있도록 작성하는 코드
1. 일반예외 : 실행되기 전에 컴파일에서 예외가 발생
2. 실행예외 : 실행했을 때, 발생
<예외 종류>
1. ClassCastException
1) 클래스 타입 변환 시(**상속, 인터페이스 구현관계***) 발생 가능
2) 부모 클래스 객체를 자식 클래스로 변환할 때 발생 가능* => 주의: 항상예외가 발생하는건 아님!
->부모클래스 객체는 범위가 작고 자식클래스는 범위가 크기때문에 전환할때 문제가 생길 수 있음
**(많은애가 작아지는건 괜찮은데, 작은애가 많아지는건 안돼)**
2. ArrayIndexOutofBoundsException
1) 배열을 이용할 때 발생 가능
2) 잘못된 번지를 이용하여 접근하는 경우 발생
3. NullPointerException => **참조변수 확인하기**
1) 참조변수를 이용할 때 발생 가능
2) 객체를 생성하지 않고, 멤버변수나 멤버메소드를 호출 할 때 발생
4. NumberFormatException
1) **문자열을 숫자로** 변환할 때 발생 가능
2) **숫자로 바꾸려는** 문자열에 알파벳이나 특수문자 등이 포함된 경우 발생
5. ArithmeticException => 계산,산수예외
1) 나누기할 때, 발생 가능 ( / , %)
2) **0으로 나누면 발생**
예외처리:
1)직접처리하는 try catch => 예외가 발생하면 발생한 위치에서 직접처리한 것 //****중괄호만있고 소괄호() 없음 주의**
생김새:
try{
예외가 발생할 수 있는 코드;
}catch(예외클래스1 e){ //예외클래스는 예외종류 말함, catch는 약간 if처럼 작동함
예외가 발생했을 때 실행할 코드1;
}catch(예외클래스2 e){
예외2가 발생했을 때 실행할 코드2;
}catch(Exception e){ //이거 꼭 마지막에 써줘야 함(위에꺼아니라서 온 실행 순서니깐)
예외1, 예외2를 제외한 모든 예외가 발생했을 때 실행할 코드3;
}finally{ //예외가 발생하지 않으면 finally로 바로 감
항상실행; //finally는 메소드가 종료되더라도 무조건 실행
}
2) throw => 자바에서 정해놓은 예외가 아닌 **개발자가 필요에 의해 발생시키는 예외**를 만들 때, 사용 (=throw특정상황을 일부러 만들어서 //try로 예외처리,해결함)
생김새:
throw 예외객체;
특징
- 실행예외가 아닌 **일반 예외는 무조건 예외처리를 해야한다**.
- 실행 예외는 예외처리를 안해도 프로그램은 실행 됨.
- 실행 예외는 RuntimeException을 상속받은 예외 클래스들이다. (RuntimeException 포함)
3) 떠넘기기 throws
특징
- 메소드에서 예외가 발생한 경우, **직접 예외처리를 하지 않고 호출한 메소드에게 예외처리를 떠넘길 수 있다.**
- 메소드에 throws를 이용하여 해당 메소드에서 발생할 수 있는 예외 종류들을 알려줘야 한다.
- 단, 실행 예외인 경우 throws에 알려주지 않아도 된다.
Object 클래스 => equals랑 toString은 꼭 쓸 줄 알아야함.
- 모든 클래스의 조상 (모든 클래스는 object 클래스를 상속받음=> 오버라이딩해야함)
- object클래스에서 제공하는 메소드를 오버라이딩*해서 잘 사용해야 한다.
-오버라이딩해서 사용할 메소드들** <클릭으로 만들 수 있음>
- equals()
- Object클래스의 equals()는 두 객체의 주소가 같은지를 확인
- 클래스에서 **equals()를 오버라이딩해서 원하는 값을 확인하는 메소드로 수정**해야한다 //추가: String이라는 클래스는 equals()가 이미 구현되어있음
- Object 클래스의 자식 클래스는 equals()를 오버라이딩해서 객체 멤버변수의 값이 같으면 같은 객체로 판별할 수 있다.
- hashCode()
- 해쉬코드값을 이용하여 그룹으로 묶어서 분류한다.
- equals()확인하기전에 hashCode로 먼저 같은 분류에 들어가있는지 확인하고, 다르면 확인 멈추고 다름/ 같으면 equals() ㄱㄱ
-toString()
- 클래스의 멤버변수 값을 문자열로 바꿀 때, 사용하는 메소드
- system.out.println(객체명) 을하면, 해당하는 객체의 toString()이 자동으로 호출된다.
<<Review>>
예외
-try catch 또는 throws를 이용하지 않고 조건문과 리턴값을 이용하여 예외 처리를 할 수 있다.
하지만, 메소드에 리턴값이 이미 있는 경우는 조건문과 리턴값을 이용하여 예외처리를 할 수 없다.
-조건문과 리턴값을 이용한 예외처리는 한계가 있기때문에 잘 사용되지 않는다.
Object 클래스
-모든 클래스의 조상클래스
-equals()
-toString()