如何导入java中的包?

如何导入java中的包?,java,import,package,Java,Import,Package,我试图从本教程中学习java和awt框架,但遇到了一个障碍:如何导入包?例如,以下是我不想做的事情: import java.awt.* //pollutes global namespace and results in hard-to-trace class names 我也不想每次使用awt包的一个类时都引用java包: setLayout(new java.awt.FlowLayout()) //cumbersome and redundant 我想做的是这样的: from jav

我试图从本教程中学习java和awt框架,但遇到了一个障碍:如何导入包?例如,以下是我不想做的事情:

import java.awt.*  //pollutes global namespace and results in hard-to-trace class names
我也不想每次使用awt包的一个类时都引用java包:

setLayout(new java.awt.FlowLayout()) //cumbersome and redundant
我想做的是这样的:

from java import awt
setLayout(new awt.FlowLayout()) //I want to use awt here without saying java.awt
在java中这样做是可能的,还是该语言不允许这样做


我也不知道setLayout是从哪里来的,但这与问题无关。我假设它是一个被隐式调用的静态Frame方法?

如果担心污染,可以导入单个类

示例

import java.awt.Rectangle;
import java.awt.Graphics2D;
...
我不相信有任何方法可以完全按照你所描述的去做

还值得指出的是,您可以使用通配符进行导入,并使用完整的包名清除任何不明确的情况

import java.awt.*;
import opencv.*; //both awt and opencv have a Rectangle class

void foo() {
    java.awt.Rectangle r1 = new java.awt.Rectangle();
    opencv.Rectangle r2 = new opencv.Rectangle();
}
有关更多信息,请参见此:


@LewBloch提出了一个重要的观点,即java包没有真正的层次结构。因此,例如,
java.awt.*
将只包括该包中的内容,而不包括以
java.awt
开头的其他包,例如
java.awt.event
。这些名字看起来只是与你有关,但实际上是被JVM < /P> < P>单独处理的,据我所知,你想在java中使用类似C++中的命名空间。 答:不,Java没有这种功能。
您可以对整个包使用import(import java.awt.*),对具体类使用import(import java.awt.Rectangle),或者在使用时应该声明完整的类名(new java.awt.FlowLayout())


没有其他内容。

不,您不能拆分包名。您有两个选择:

  • 导入java.awt.FlowLayot
    这将导入java.awt包的类
    FlowLayout

  • import java.awt.*这将导入包java.awt的所有类


  • 在Java中,您可以通过

    导入java.awt.*;这会将所有awt类导入到您的程序中,无论您是否正在使用它们,但您会将所有awt类导入到您的程序中。 通过这种方式,您可以通过导入所有awt类来重载程序

    相反,您可以通过指定类名来执行所需操作。。 导入java.awt.FlowLayout;这将只导入类文件。 这是java中的标准和公认方式

    java静态导入 导入静态java.lang.System.*;如果想在类中使用静态方法,可以这样使用。这样可以避免在静态方法之前使用类名


    如果您打算使用awt软件包。。我建议您按类名导入。大多数awt组件在swing包中进行了翻新。为了避免出现问题,请在包中使用类名,并考虑使用swing组件而不是awt。

    这种方法是正确的,@kloddant。“我也不想每次使用awt包的一个类时都引用java包”,不管怎样,这都是通过单一类型导入完成的。软件包不是真正的层次结构;整个包名是一个命名空间。它就像URL,
    http://testng.org/doc/documentation-main.html
    在您的浏览器中也不能仅使用
    doc/documentation main.html
    。@LewBloch确实如此。重要的是要指出它们不是等级的。很多人一开始并不明白这一点,主要是eclipse这样的IDE的错误,这是一种可怕的语言设计。我想知道代码中的类来自何处。
    from java import awt
    在语义上与
    import java.awt相同*(除了它不是有效的语法之外),并且将具有完全相同的“名称空间污染”效果。不清楚你在问什么,或者为什么。大多数IDE会自动为您修复导入。