Java 정적 내부 클래스 <br /> 내부 클래스를 정적 클래스로 정의하는 것은 기본적으로 다른 클래스를 정적 클래스로 정의하는 것과 동일하며 참조 규칙은 기본적으로 동일합니다. 그러나 세부 사항은 여전히 매우 다릅니다. 특히, 모든 프로그램 개발자의 관심을 끌기위한 다음과 같은 영역이 있습니다.
(1) 일반적으로 내부 클래스가 정적 내부 클래스로 정의되지 않은 경우 멤버 변수 또는 멤버 메소드를 정의 할 때 정적 멤버 변수 및 정적 멤버 메소드로 정의 할 수 없습니다. 즉, 정적이 아닌 내부 클래스에서 정적 멤버를 선언 할 수 없습니다.
(ii) 일반적으로 비 정적 외부 클래스는 외부 클래스의 멤버 변수 및 방법에 액세스 할 수 있지만 (내부 클래스가 정적으로 선언되면) 자체 등급을 포함한 많은 외부 클래스가 있습니다. 제한. 정적 내부 클래스는 비 정적 멤버 변수 및 외부 클래스의 메소드에 액세스 할 수 없습니다.
(3) 클래스에서 비 정적 멤버 내부 클래스를 만들 때 필수 조항이 있습니다. 즉, 내부 클래스의 사례는 외부 클래스의 사례에 구속되어야합니다. 그런 다음 외부 클래스에서 정적 내부 클래스를 정의해야하며, 내부 클래스의 인스턴스를 만들기 위해 새로운 키워드를 사용할 필요가 없습니다. 즉, 정적 클래스의 내부 객체를 만들 때 외부 클래스의 객체는 필요하지 않습니다.
Java는 LinkedList를 구현할 때 다음 내부 클래스를 사용합니다.
Public Class LinkedList <E>는 Abstract Aectientientlist <e> 구현 목록 <e>, deque <e>, clonable, java.io.serializable {............ 개인 정적 클래스 en try <e> {e 요소 <E> Entry <E> Entry; Previous ous; Newen.
정적 내부 클래스의 일반적인 사용은 다음과 같습니다
Java 동기화 도구 클래스
/** * 대상으로 인터페이스 데이터를 가져 오기 시작해야합니다. 이것은 * 스레드 간 동기화 문제의 본질입니다 이를 통해 하나 이상의 스레드에서 실행되는 * 작업 세트를 완료하기 전에 완료 할 수 있습니다. * 주어진 수로 CountdownLatch를 초기화하십시오. Countdown () 메소드가 호출되므로 * Await 메소드는 현재 카운트가 0에 도달 할 때까지 차단됩니다. 그 후, 모든 대기 스레드가 릴리스되며 기다려야 할 모든 호출이 즉시 반환됩니다. *이 현상은 한 번만 발생합니다. 카운트를 재설정 할 수 없습니다 (이것은 매우 중요합니다). 카운트를 재설정 해야하는 경우 Cyclicbarrier 사용을 고려하십시오. * 다음은이 요구 사항을 시뮬레이션하는 간단한 예입니다. * 클래스 컨텐츠는 비교적 복잡합니다. **/ import java.util.random; <intger> strlist {int i = 0; i <50; } public static void main (string args []) {boolean isend = true; )> : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 0 && count <20) {countdownLatch = new CountdownLatch (1); ++ i) {새 스레드 (D.New Worker (startIngal, donesignal, i)). ) {random r = new random (); (); add (i)}}}} 최종 Countdownlatch는 Worker; Countdown.aw ait (); ) {int start = (i)*(50/5); strlist.get (i) + "---" + "삭제");