Java 프로그램 개발 및 학습의 내부 및 비정상 클래스

(학습 참고서 : Java2 실습 튜토리얼 제 5 판)

하나, 내부 클래스

Java는 다른 클래스의 클래스 정의를 지원합니다. 이러한 클래스를 내부 클래스라고하고 내부 클래스에 포함 된 클래스를 내부 클래스의 외부 클래스라고합니다. 내부 클래스와 외부 임베디드 클래스의 관계는 다음과 같습니다.

  • 외부 클래스의 멤버 변수는 내부 클래스에서 여전히 유효하며 내부 클래스의 메서드는 외부 클래스의 메서드를 호출 할 수도 있습니다.
  • 클래스 변수 및 클래스 메서드 (정적)는 내부 클래스의 본문에서 선언 할 수 없습니다. 외부 클래스는 내부 클래스를 사용하여 객체를 외부 클래스의 멤버로 선언 할 수 있습니다.
  • 내부 클래스는 외부 클래스에서만 사용되며 다른 클래스는 특정 클래스의 내부 클래스를 사용하여 객체를 선언 할 수 없습니다.

Java 컴파일러에 의해 생성 된 내부 클래스의 바이트 코드 파일은 일반적인 클래스 (class name.class)와 다르지만, 외부 클래스 이름 $ internal class name.class
가 가지고 있으며 내부 클래스 만 정적 클래스로 수정할 수 있습니다. 프로그램은 정적 내부 클래스를 사용하여 다른 클래스의 개체를 만들 수 있습니다. 정적 내부 클래스는 외부 포함 클래스의 인스턴스 멤버 변수를 조작 할 수 없습니다.

두, 익명의 클래스

Java를 사용하면 클래스 하위 클래스의 클래스 본문을 사용하여 직접 하위 클래스 개체를 만들 수 있습니다. 즉, 부모 클래스의 생성 방법 외에도 하위 클래스 객체를 생성 할 수있는 클래스 본문이 있습니다. 이 클래스 본문은 클래스 선언이없는 하위 클래스로 간주되며 익명 클래스라고합니다. 익명 클래스는 하위 클래스로 이름이 없기 때문에 익명 클래스를 사용하여 객체를 선언하는 것은 불가능하지만 객체는 직접 생성 할 수 있습니다. 다음은 익명 클래스가있는 객체를 만드는 것입니다.

new 父类名() {
    
    
	匿名类的类体
};

익명 클래스에서 만든 개체는 코드를 단순화하기위한 메서드 매개 변수로 상위 변환 개체로만 사용할 수 있습니다.

(1) 익명 클래스의 특징

  • 익명 클래스는 부모 클래스의 메서드를 상속하거나 부모 클래스의 메서드를 재정의 할 수 있습니다.
  • 익명 클래스를 사용하는 경우 특정 클래스에서 객체를 생성하는 데 직접 사용해야하므로 익명 클래스는 내부 클래스 여야합니다.
  • 익명 클래스는 외부 클래스의 멤버 변수와 메서드에 액세스 할 수 있으며, 익명 클래스의 클래스 본문에는 정적 멤버 변수와 메서드를 선언 할 수 없습니다.
  • 익명 클래스는 하위 클래스이지만 클래스 이름이 없기 때문에 익명 클래스로 객체를 만들 때는 부모 클래스의 생성 방법을 직접 사용해야합니다.

(2) 익명 클래스의 역할
사용자가 메서드에 하위 클래스 매개 변수를 전달하려는 경우 메서드의 매개 변수 목록에서 직접 익명 클래스 개체를 만들 수 있습니다.

(3) 인터페이스
Java 와 관련된 익명 클래스 는 인터페이스 이름과 클래스 본문으로 직접 익명 객체를 생성 할 수 있습니다. 이 클래스 본문은 클래스 선언없이 인터페이스를 구현하는 클래스 본문으로 간주됩니다. 클래스 본문은 인터페이스의 모든 메서드를 재정의해야합니다. 다음과 같이 :

new 接口名() {
    
    
	实现接口的匿名类的类体
};

세, 비정상 클래스

Java는 throw关键字Exception 하위 클래스를 발생시키는 객체를 사용 하여 예외가 발생했음을 나타냅니다.

(1) Try-catch 문
Java는 try-catch 문을 사용하여 예외를 처리하고 try-catch 문의 try 부분에 가능한 비정상 작업을 배치합니다. 일단 try는 예외 개체를 throw하거나 예외 개체를 throw 할 수있는 메서드를 호출합니다. 메서드가 예외 객체를 던지면 try 부분은 즉시 실행을 중지 한 다음 (try 블록 외부에서) catch 부분을 실행합니다. try-catch는 여러 개의 catch로 구성 될 수 있습니다.

try {
    
    
	可能发生异常的语句
}
catch(ExceptionSubClass1 e) {
    
    
	...
}
catch(ExceptionSubClass2 e) {
    
    
	...
}

(2) 사용자 정의 예외 클래스
프로그램을 작성할 때 Exception 클래스 (시스템 예외 클래스)를 확장하여 고유 한 예외 클래스를 정의한 다음 프로그램의 필요에 따라 이러한 예외를 생성 할 메서드를 지정할 수 있습니다. 메서드가 선언되면 선언에 throws关键字의해 생성 될 여러 예외를 사용할 수 있으며 (메서드 선언은 사용자 지정 예외 클래스 이름을 throw 함) 메서드의 메서드 본문에 예외를 생성하는 작업을 지정합니다. 해당 예외 클래스. throw 키워드를 사용하여 예외 개체를 throw하면 메서드 실행이 종료됩니다. 프로그램은 try-catch 문 블록에서 가능한 예외의 메서드를 호출해야합니다. 여기서 catch의 역할은 throw 키워드에 의해 throw 된 예외 개체를 캡처하는 것입니다.

throw:用在方法体中表示抛出异常
throws:用在自定义异常方法声明时表示这个方法会抛出异常。

넷, 주장

Assertion 문은 코드의 디버깅 단계에서 매우 효과적이며 일반적으로 프로그램이 예외를 포착하여 처리 할 준비가되지 않은 오류에 사용됩니다.

(1) 구문 형식
assert 키워드를 사용하여 assertion 문을 선언합니다. 두 가지 형식이 있습니다.

assert 返回值为boolean类型的表达式;

식이 true를 반환하면 프로그램이 계속 실행되고 그렇지 않으면 프로그램이 즉시 중지됩니다.

assert 返回值为boolean类型的表达式:执行表达式;

부울 유형 표현식이 true를 리턴하면 프로그램이 계속 실행됩니다. 반환 값이 false이면 프로그램은 어설 션에서 실행을 중지하고 실행 식의 값을 출력합니다.

(2) assert 문 활성화 및 비활성화

Java 인터프리터를 사용하여 응용 프로그램을 직접 실행하는 경우 기본적으로 어설 션 문이 꺼져 있습니다. 프로그램을 디버깅 할 때 -ea를 사용하여 어설 션 문을 활성화 할 수 있습니다.java -ea mainClass

추천

출처blog.csdn.net/YCF8746/article/details/112999025