내부 클래스(inner class)
클래스 내부에 클래스를 선언하여 외부 클래스의 필드에
쉽게 접근하기 위해서 사용한다.
내부 클래스의 필드를 사용하기 위해서는 외부 클래스 객체에서
내부 클래스를 객체화 해야 한다.
외부클래스명 객체명 = new 외부클래스명();
외부클래스명.내부클래스명 객체명 = 외부클래스객체.new 내부클래스생성자();
public class InnerTest {
public static void main(String[] args) {
Shop shop = new Shop();
Shop.Customer customer = shop.new Customer();
customer.getProduct();
}
}
class Shop{
int product = 10;
Customer hiCustomer() {
return new Customer();
}
class Customer{
void getProduct() {
System.out.println("받은 상품의 개수 : "+ product);
}
}
}
내부 클래스를 사용하는 이유
1. 상속처럼 사용
외부 클래스의 필드를 마치 내것처럼 접근하여 사용하기 위함
2. 캡슐화
외부 클래스의 객체가 없다면 내부 클래스도 존재할 수 없기 때문에
다른 클래스에서는 내부에 쉽게 접근하지 못하도록 숨기기 위함
익명 클래스(anonymous inner class)
이름이 없는 클래스
단 하나의 객체(익명 구현 객체)만을 위한 클래스
package zoo;
public abstract class Animal {
abstract void makeSomeNoise();
}
package zoo;
public class Ground {
public static void main(String[] args) {
Animal dog = new Animal() {
@Override
void makeSomeNoise() {
System.out.println("왈왈");
}
};
dog.makeSomeNoise();
}
}
예외 처리
에러 : 심각한 오류
예외 : 덜 심각한 오류
try ~ catch ~ finally
public class ExcpetionTest {
public static void main(String[] args) {
try {
System.out.println(Integer.parseInt("10"));
System.out.println(Integer.parseInt("30"));
System.out.println(Integer.parseInt("Hello"));
}
catch(NumberFormatException nfe) {
System.out.println("숫자로 이루어진 문자열만 바꿀 수 있습니다.");
}
finally{
System.out.println("꼭 해야되는 문장");
}
}
}
Exception 클래스
모든 예외들의 부모클래스
어떤 예외가 발생할지 모를 때 사용한다.
try{
}
catch(Exception e){
}