2009-08-26 5 views

답변

33

Java 패키지는 중첩되지 않습니다.

import java.awt.*, 당신은 단지 패키지 java.awt에있는 모든 클래스와 인터페이스를 가져 - 당신은 java.awt.eventjava.awt 아래에있는 모든 패키지를 가져 오기 하지됩니다.

패키지가 중첩되어있는 것처럼 보입니다 (즉, 인 "서브 패키지"인 java.awt.event 인 것처럼 보입니다). 실제로는 그렇지 않습니다. java.awtjava.awt.event을 이름에 공통적 인 부분이있는 서로 관련이없는 두 개의 서로 다른 패키지로 간주해야합니다.

+1

import java.awt. *가 java.awt.event도 자동으로 가져 오는 것은 사실이 아닙니까? –

+15

아니요 - 그건 제스퍼의 요점이었습니다. 가져 오기 java.awt. *; 패키지가 정확하게 java.awt 인 모든 클래스를 임포트합니다. 패키지가 단지 java.awt로 시작하는 클래스는 임포트하지 않습니다. – Sbodd

5

첫 번째 유형은 java.awt 패키지 (하위 패키지 제외)에서 가져 오기 유형이고 다른 패키지는 java.awt.event (다른 패키지에서는 가져올 수 없음)에서만 가져 오기 유형입니다.

Java 패키지가 계층 구조로 구성 될 수 있지만 가져 오기 문은 "보수적"인 경향이 있습니다. 패키지 내에서 모든 유형을 가져 오면 해당 수준에서만 구체적으로 가져옵니다. 계층의 하위 수준

나는 그이면의 이유가 가짜 수입을 피하는 것이라고 생각한다. 의존성, 모호함을 피하기 위해 가능한 한 최소한의 것을 가져 오는 것이 좋습니다. 예를 들어 이름에 충돌하는 이름으로 새 클래스가 패키지에 추가 된 경우 어떻게됩니까? 다른 패키지?). 따라서 Eclipse를 사용하여 가져 오기를 구성 할 경우 별표가있는 행을 의미하는 경우에도 실제로 별표 버전의 특정 import 문을 추가합니다. 하위 패키지의 모든 것을 가져 오는 것은 더 나빠질 것입니다. 실제로 모든 것을 얻을 수 있습니다.

또한 일반적인 방법은 특수 용도 클래스와 구현 특정 클래스를 자체 하위 패키지에 넣는 것입니다. 특히 중요한 경우가 아니라면 가져 오기를 피하는 것이 좋습니다. 다시 전체 하위 트리를 가져 오는 것은 그와 충돌합니다.

0

java.awt.*이 아니고 정규 표현식입니다. 이것이 내가 예상하고 생각하는 것입니다.

java.awt.*은 중첩 된 패키지가 아닌 정확한 패키지의 클래스만을 제공합니다. 아래에 관련된 이름 공간 충돌을 상상해보십시오!

import com.* 

*을 사용하는 것은 나쁜 습관으로 간주됩니다. 클래스 이름 가져 오기를 선호한다고 설명합니다. 더 읽기

: Wikipedia: Namespace (Computer Science)

+0

가져 오기 *가 지원됩니까? : -o – OscarRyz

+2

@Oscar Reyes : 아니요. "import *"는 Java에 없습니다. – Jesper

+0

동의, 작동하지 않습니다 (실제로 나를 놀라게). 나는 누군가를 혼동하지 않도록 그것을 바꿀 것이다 ... –

1

많은처럼 전에 말했다.

수입하고있는 java.awt. * java.awt.event의 모든 클래스를 가져올 것입니다 ...

그리고 그 두 패키지 사이의 차이는 java.awt의입니다.* Frame, Button 등의 클래스를 포함 해, java.awt.event. * 패키지에는 일어날 수있는 모든 이벤트/청취자가 포함됩니다.

예를 들어 Button을 생성하려면 java.awt.Button 클래스가 필요하지만 버튼을 클릭 할 때 어떤 액션이 발생하기를 원한다면 java.awt.event.ActionListener가 필요합니다. 클릭 해, java.awt.event.ActionEvent를 생성합니다.