중첩 클래스(Nested Class)란?
: 클래스 *멤버로 선언된 클래스를 부르는 말
중첩 인터페이스(Nested Interface)란?
: 클래스 멤버로 선언된 인터페이스를 부르는 말
*UI : user interface
*멤버(member) : field +
중첩 클래스 종류는 인스턴스 멤버 클래스 , 정적 클래스, 로컬 클래스가 있음.
익명 객체
: 이름이 없는 객체
method(new method(){//필드});
형태
ac.method2(new Person() {
void study() {
System.out.println("공부를 합니다.");
}
@Override
void wake() {
System.out.println("9시에 일어납니다.");
study();
}
});
에러(error)
예외(exception)
try{} catch{}
문법 사용
try
안에는 나눗셈 메소드 실행하면서, exception 인스턴스 발생하면 catch 안에 있는 코드 실행함.try
안에 exception 발생하여 catch가 실행되더라도 나머지 코드들이 이어서 정상 실행됨.try {
int result = quotient(num1, num2);
System.out.println(num1 + " / " + num2 + " = " + quotient(num1, num2));
} catch (ArithmeticException e) { // catch 받음
System.out.println(e.getMessage());
}
public static int quotient(int num1, int num2) {
if (num2 == 0) {
// 강제로 exception 발생
// (ArithmeticException class에 인스턴스를 생성하여 exception 발생)
throw new ArithmeticException("분모에 해당하는 값으로 0을 사용할 수 없습니다.");
// throw 던짐
//문자열을 받는 ArithmeticException 생성자
}
return (num1 / num2);
}
//Class cls = Class.forName("java,lang.String");
//--> error : Unhandled exception type ClassNotFoundException
try {
// cls : java,lang.String class의 필드, 컨스트럭터, 메소드 관련 정보를 갖고 있는 인스턴스
// forName 메소드에서 parameter로 넘어온 클래스가 없으면 ClassNotFoundException 인스턴스 발생
Class cls = Class.forName("java,lang.String");
System.out.println("클래스가 존재합니다.");
} catch (ClassNotFoundException e) {
System.out.println("클래스가 존재하지 않습니다.");
}
int[] a = {1,2,3};
System.out.println(a[0]);
System.out.println(a[1]);
System.out.println(a[2]);
System.out.println(a[3]); // 배열 길이보다 큰 index입력시 error발생
int[] a = {1,2,3};
try {
System.out.println(a[0]);
System.out.println(a[1]);
System.out.println(a[2]);
System.out.println(a[3]);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("배열에서 접근할 수 없는 index입니다.");
}
if문을 이용해 자식 인스턴스로 강제 형변환
public static void main(String[] args) {
Dog dog = new Dog();
changeDog(dog);
Cat cat = new Cat();
changeDog(cat);
}
public static void changeDog(Animal animal) {
if (animal instanceof Dog) {
Dog dog = (Dog) animal;
System.out.println("Dog 인스턴스로 강제형변환 됐습니다.");
} else {
System.out.println("Dog 인스턴스로 변환 불가합니다.");
}
}
try-catch문으로 ClassCastException사용해 강제형변환
try {
Dog dog = new Dog();
changeDog(dog);
System.out.println("Dog 인스턴스로 강제형변환 됐습니다.");
Cat cat = new Cat();
changeDog(cat);
System.out.println("Dog 인스턴스로 강제형변환 됐습니다.");
} catch (ClassCastException e) {
System.out.println("Dog 인스턴스로 변환 불가합니다.");
}
public static void changeDog(Animal animal) {
Dog dog = (Dog) animal;
}
String data = null;
// ptintln method에서 parameter로 넘어오는 String 인스턴스가 null이면 null출력
System.out.println(data);
System.out.println(data.toString());
NullPointerException으로 null인 객체 예외
String data = null;
try {
System.out.println(data);
System.out.println(data.toString());
} catch (NullPointerException e) {
System.out.println("Null Pointer error 발생");
}
String data1 = "100";
String data2 = "a100";
int val1 = Integer.parseInt(data1);
int val2 = Integer.parseInt(data2);
//--> error : java.lang.NumberFormatException: For input string: "a100"
//String 문자열을 정수값 등 숫자로 변환할 수 없을 때 발생함.
int result = val1 + val2;
System.out.println(data1 + " + " + data2 + " = " + result);
NumberFormatException으로 문자열 숫자로 변환 불가 예외
String data1 = "100";
String data2 = "a100";
try {
int val1 = Integer.parseInt(data1);
nt val2 = Integer.parseInt(data2);
int result = val1 + val2;
System.out.println(data1 + " + " + data2 + " = " + result);
} catch (NumberFormatException e) {
System.out.println("문자열을 숫자로 변환할 수 없습니다.");
}