2015-07-10 75 views
1

在我現在正在開發的練習程序中,它需要一些導入,如下所示:爲什麼我必須導入java.awt。*和java.awt.event。*(例如)

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.event.HyperlinkEvent; 
import javax.swing.event.HyperlinkListener; 
import java.net.URL; 

ELI5:我的問題(我稍微超過了新手入門教程,現在進入中級階段)正如標題所示。我真的需要導入java.awt.event。*,如果我已經用java.awt。*覆蓋它了嗎?

如果沒有,爲什麼這是看似慣例?

+1

*「我是真正需要'進口java.awt.event中*'如果我已經。用'java.awt。*'?「覆蓋它* - 是的,你需要這樣做。導入只會導入指定包('javax.swing。*')中的指定類('javax.swing.event.HyperlinkListener')或類,它不會導入子包 – MadProgrammer

回答

2

以星號結尾的導入語句僅導入該包中的所有而不是任何子包。所以,如果你有A級居住在com。示例,和B類居住在com.example.subtype,import語句像

import com.example.*; 

將進口A類而不是類B.爲了導入B您類倒是有加

import com.example.subtype.*; 

這是爲了確保,如果你需要從若干等級‘更高’包(層次來講),你不從每一個分裝進口的所有類它,你可能下不需要或不需要,其中一些可能具有相同的名稱導致類名衝突。

即,如果存在com.example.subtype.Type類和com.example.order.Type類,則不希望類似import com.example.*;的導入語句導入這兩個類型。

這也是爲什麼通常更好地從包中明確導入某些類而不是所有類(如同使用星號那樣),除非您需要該包中的許多類,否則導入的負載將僅用於迷惑。

0

你不必使用。*

例如,你只需要使用一個JFrame中,你可以導入

import javax.swing.*; 

但爲什麼進口包裝的所有功能(沒有子包)如果你只需要一個?

更好地運用這個(在本例):

import javax.swing.JFrame; 

參見這裏:Import package.* vs import package.SpecificType

相關問題