JAVA공부하기 118

예외 클래스 정리

 

RuntimeException의 하부에 정의된 예외 클래스들

 

 

예외란

 

1. 실행 시에 발생하는 에러 이벤트

2. try block에서 발생

3. 클래스의 형태로 표현됨

4. 발생하는 이벤트는 객체가 됨

5. Exception 클래스를 상속 받아 새로운 예외 클래스 생성 가능

 

 

JAVA공부하기 117.

예외(Exception)

 

예외의 분류

- 컴파일 시의 사전 검사 여부

: Unchecked Exception : 컴파일러가 예외 처리 여부를 검사하지 않음

* 시스템 정의 예외

* Error와 RuntimeException

 

: Checked Exception : 컴파일러가 예외 처리 여부를 검사함

* 사용자 정의 예외( 자바 개발자가 클래스 라이브러리에 정의)

* RuntimeException 이외의 예외

 

: 예외의 복원 가능 여부

* Error : 불가능(java.lang.Error의 하부 클래스로 선언됨)

* Exception : 가능(java,lang.Exception의 하부 클래스로 선언됨)

 

- 자바 클래스 라이브러리에 정의된 예외 클래스들의 상속도

 

 

 

JAVA공부하기 116

익명(anonymous) 클래스

- 의미적으로는 지역 클래스와 동일하나 이름이 없다는 특징이 있다.

 

앞의 예에서 지역 클래스 Command는 getRunnable 메소드 내에서 단 한번 참조되는데도 불구하고 이를 위해서 완전한 클래스를 작성하고, 이로부터 객체를 생성하는 2단계가 필요

 

- 이 두 단계를 하나의 문법으로 통합

 

- new 기능의 확장

: 후속하는 명칭이 클래스인 경우 익명 클래스는 그 클래스의 서브 클래스

: 인터페이스인 경우 그 인터페이스를 구현하는 클래스가 된다.

: 인터페이스를 구현하는 클래스는 항상 Object의 서브클래스

 

- 익명클래스는 생성자 정의 못함

: 명칭이 없음

 

익명 클래스 예제

 

 

 

JAVA공부하기 115

지역클래스

 

코드 블록 내부에 지역적으로 선언된 클래스

- 지역 클래스는 그들이 정의된 코드 블록 내부에서만 가시적이므로 블록 외부에서는 참조할 수 없다.

 

- 그들이 정의된 코드 블록 외부에서 final로 선언된 모든 지역 변수와 인수를 사용할 수 있다.

이를 위해서 자바에서는 지역변수와 인수를 final로 선언할 수 있는 기능이 있다.

 

- 어떠한 static 멤버도 가질 수 없고, 맴버 클래스와는 달리 지역 클래스에는 접근 지정자를 부여할 수 없다.

 

앞에서 제시했던 Enumerator멤버 클래스를 지역 클래스로 재 작성

- 코드의 명확성 개선

 

지역 클래스 예제

 

 

JAVA공부하기 113.

내부클래스

 

- 내부 클래스의 모든 인스턴스는 그 클래스를 정의하거나 포함하고 있는 클래스의 인스턴스와 내부적으로 연관된다.

 

- 내부클래스의 메소드는 멤버클래스의 필드 뿐만아니라 그 클래스를 포함하고 있는 외부클래스의(Private필드 포함) 모든 필드 참조 가능

 

- 내부 클래스는 어떤 static 멤버도 가질 수 없다.

 

클래스 메소드 내부에는 묵시적으로 this 생략가능하다

 

멤버 클래스의 인스턴스 생성 방법

 

LinkecList aList = new LinkedList();

Enumerator naEnum = aList.new Enumerator();

 

 내부 클래스 예

 

 

JAVA공부하기 112.

중첩된 최상위 클래스

 

- 중첩된 최상위 클래스는 일반적인 패키지 멤버 클래스와 유사하나 단지 구성의 편리성을 위해서 다른 클래스나 인터페이스에 포함된 것

: 다른 클래스 내에 정의된 클래스, 인터페이스

: 항상 static으로 선언

: 가독성 증가

: 서로의 private필드와 메서드에 접근 가능

 

- 최상위 클래스나 인터페이스에만 포함될 수 있고 다른 내부 클래스에는 포함될 수 없다.

 

 중첩된 최상위 클래스 예제

 

 

JAVA공부하기 111

중첩클래스

 

- 중첩 클래스는 필드나 메소드가 클래스 내부에 정의될 수 있듯이 클래스가 다른 클래스의 멤버로 정의될 수 있는 기능을 의미한다.

 

- 코드 블록에서 변수를 정의하듯 클래스를 코드블록 내부에 정의한다.

: 기존에는 모두 클래스는 코드 블록 외부에 정의되었다.

 

- X$Y.class와 같은 형태의 클래스 파일

: X 클래스에 중첩된 Y클래스

 

 

 

JAVA공부하기 110

instanceof

 

//InstanceofTest1.java

class Element {int atomicNumber;}

class Point extends Element {int x, y;}

class InstanceofTest1 {

public static void main(String[] args) {

Element e = new Element();

Point p = new Point();

if (e instanceof Point) {

Stystem.out.println("First Test : I get your point !");

p = (point)e;

}

e = p;

if (e instanceof Point) {

System.out.println("Second Test : I get your point!");
p = (Point)e;

}

if (e instanceof Element) {

System.out.println("Third Test : I get your Element!");

p = (point)e;

}

}

}

 

 

 

 

+ Recent posts