首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在java中导入包?

如何在java中导入包?
EN

Stack Overflow用户
提问于 2017-05-02 04:51:13
回答 4查看 2.1K关注 0票数 2

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

代码语言:javascript
复制
import java.awt.*  //pollutes global namespace and results in hard-to-trace class names

我也不想每次使用awt包的类时都引用java包:

代码语言:javascript
复制
setLayout(new java.awt.FlowLayout()) //cumbersome and redundant

我想做的是这样的:

代码语言:javascript
复制
from java import awt
setLayout(new awt.FlowLayout()) //I want to use awt here without saying java.awt

在java中这样的事情可能发生吗,还是语言不允许这样做呢?

我也不知道setLayout是从哪里来的,但这不是重点所在。我假设这是一种静态的帧方法,被隐式调用?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-05-02 04:54:45

如果您担心污染,可以导入各个类。

示例

代码语言:javascript
复制
import java.awt.Rectangle;
import java.awt.Graphics2D;
...

我不相信有任何事情要做你所描述的那样。

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

代码语言:javascript
复制
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();
}

更多信息请参见此:https://stackoverflow.com/a/149282/4484072

@LewBloch提出了一个重要的观点,即java包没有真正的层次结构。例如,java.awt.*将只包含包中的内容,而不包括以java.awt开头的其他包,如java.awt.event。这些名称看起来似乎与您相关,但实际上JVM是单独处理的。

票数 3
EN

Stack Overflow用户

发布于 2017-05-02 05:10:39

不不能分开包裹的名字。你有两个选择:

  1. import java.awt.FlowLayot;此导入包java.awt的类FlowLayout
  2. import java.awt.*; --导入包java.awt的所有类。
票数 1
EN

Stack Overflow用户

发布于 2017-05-02 06:01:59

在Java中,您可以通过

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

相反,你可以通过指定类名来做你想做的事。导入java.awt.FlowLayout;这将只导入类文件。这是java中的标准和公认的方法。

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43730293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档