Java 使用通配符导入类
如果我说:Java 使用通配符导入类,java,class,import,Java,Class,Import,如果我说: import java.awt.event.ActionListener; import java.awt.event.*; 我得到了ActionListener类。 如果我说: import java.awt.event.*; 我得到了包含ActionListener的事件类? 或者更好: import java.awt.*; 我认为,如果您包括一个类,就像在上两个示例中一样,那么您可以有效地导入该类并继承其所有子类。但是,例如,当我仅使用最后一行时,Eclipse经常显示
import java.awt.event.ActionListener;
import java.awt.event.*;
我得到了ActionListener类。
如果我说:
import java.awt.event.*;
我得到了包含ActionListener的事件类? 或者更好:
import java.awt.*;
我认为,如果您包括一个类,就像在上两个示例中一样,那么您可以有效地导入该类并继承其所有子类。但是,例如,当我仅使用最后一行时,Eclipse经常显示错误,表示它无法解析某些项,并建议同时包含java.awt和java.awt.event
java.awt.*
与java.awt.event.*
不同,第一个将导入java.awt
包中的所有类,而第二个将导入java.awt.event
中的所有类,导入函数将只导入类,而不导入包。通配符Java中的导入只适用于实现类的即时级别
也就是说,如果您有类A
、B
和C
,并且具有完全限定名:
李>com.foo.bar.A
李>com.foo.bar.B
李>com.foo.C
com.foo.bar.*
将允许访问A
和B
,无需进一步的ado;但是C
将不可用
同样,导入com.foo.*
将很容易获得C
,但不是A
和B
现在:
我认为,如果您包括一个类,就像在上两个示例中一样,那么您可以有效地导入该类并继承其所有子类
事实并非如此。即使B
“继承”A
,如果选择使用完全限定的导入com.foo.bar.A
,它也不会自动导入com.foo.bar.B
。您必须单独导入B
。这是有意义的:例如,没有任何东西强迫接口或抽象类的实现与其基本接口/基类在同一个包中;在同一个项目中,您可能在不同的包中有两个名为B
的类:编译器应该做什么
现在,根据编码风格惯例,您可以自己编写,也可以在您的工作环境中遵守,这样的通配符导入可能被完全禁止,并且您必须分别导入A
和B
。至于静态导入,他们还有其他问题
最后,请注意,默认情况下,您可以使用所有java.lang.
,而无需声明导入。来自java教程:
起初,包看起来是分层的,但实际上并非如此。例如,Java API包括一个Java.awt
包、一个Java.awt.color
包、一个Java.awt.font
包以及许多其他以Java.awt开头的包。但是,java.awt.color
包、java.awt.font
包和其他java.awt.xxxx
包不包括在java.awt
包中。前缀java.awt
(java抽象窗口工具包)用于许多相关包,以使关系变得明显,但不显示包含
导入java.awt.*
导入java.awt
包中的所有类型,但不导入java.awt.color
、java.awt.font
或任何其他java.awt.xxxx
包。如果计划使用java.awt.color
中的类和其他类型以及java.awt中的类和类型,则必须导入两个包及其所有文件:
import java.awt.*代码>
导入java.awt.color.*代码>
请记住,import语句只是为了方便起见。它使您可以使用类的短名称,而不是完全限定的名称
Java中的包名结构对应于目录结构。因此,您可以将其视为一个名为java的目录,在该目录中还有其他几个目录,如awt和io等
当你说
import java.awt.*;
您基本上是说,您希望对名为java的目录中名为awt的目录中的所有类使用短名称。因此,如果在代码中使用类名,如下所示:
List mylist;
然后,编译器将尝试在当前包中查找名为List的类或名为java.awt.List的类
因此,如果awt目录中有一个名为event的目录,并且该目录中有一个名为ActionEvent的类,则完全限定名为:
java.awt.event.ActionEvent
上面的import语句也没有帮助。因此需要另一个导入语句
import java.awt.event.*;
现在,如果您使用ActionEvent类,编译器将在当前目录或java.awt.ActionEvent或java.awt.event.ActionEvent中查找名为ActionEvent的类,直到找到为止。摘自Sun的文档:
起初,包看起来是分层的,但实际上并非如此。例如,Java
API包括java.awt包、java.awt.color包和
以及许多其他以java.awt开头的包。
但是,java.awt.color包、java.awt.font包和
java.awt包中不包括其他java.awt.xxxx包。
前缀java.awt(java抽象窗口工具包)用于
相关包的数量,以使关系明显,但不
显示包容
导入java.awt.*导入java.awt包中的所有类型,
但它不导入java.awt.color、java.awt.font或任何其他文件
java.awt.xxxx包。如果您计划使用类和其他类型
在java.awt.color和java.awt中,必须同时导入这两个文件
包及其所有文件:
如果你有时间,你可能会很好地通读《太阳报》,它通读了基础知识和更复杂的概念。从你问题中的语言来看,你在哪里