为什么没有导入类就创建了对象?

时间:2014-08-08 11:14:14

标签: java class import

我遇到了一些java代码,其中包含以下语句。

com.myproject.bar.Foo foo = new com.myproject.bar.Foo();

com.myproject.bar.Foo尚未导入到类中,但在编写此语句的类中创建了Foo的对象。

为什么要实施这样的实施?使用这样的实现比导入类Foo

有什么好处

5 个答案:

答案 0 :(得分:7)

使用类的完全限定名称进行实例化。

com.myproject.bar.Foo foo = new com.myproject.bar.Foo();

这不需要添加import语句,因为您已经告诉编译器哪个是要实例化的类的包。

有时,如果有多个类具有同一个简单名称,则会使用此方法。

如果您愿意这样做:

Foo foo = new Foo();

然后你必须导入这个类:

import com.myproject.bar.Foo;

答案 1 :(得分:5)

导入语句只是通过其短名称使类型可用,而不指定包。就是这样。如果没有导入,就不能使用该类。

通常使用导入更清楚,但有时候这是不可能的 - 例如,您可能希望使用两个名为Foo的类,这些类来自具有相同类的不同包。 (当您有两个相同实体的表示时,这是最常见的 - 例如,API表示和存储表示。)

在不知道真实代码是什么样的情况下,我们无法分辨这是否是这种情况,或者导入是否合适。如果可以工作,导入通常更具可读性。

答案 2 :(得分:1)

如果您使用完全限定名称(例如com.myproject.bar.Foo)来解决课程,那么当您尝试访问该课程时,您需要每次都指定

但是在导入的情况下,你不需要。

优势之一

答案 3 :(得分:0)

没有特别的优势。

但是如果两个类具有相同的类名并且属于不同的包,则需要指定完全限定的包名,以便在类中使用它们时区分它们。

考虑2个班级

com.myproject.bar.Foo 
com.myproject.bar.innerbar.Foo 

现在在其他一些课程中你会像

那样进行实例化
Foo foo = new Foo();

现在导入哪个Foo

为避免这种歧义,我们需要指定完整的包名。

答案 4 :(得分:0)

com.myproject.bar.Foo是绝对的类名。

Foo只是类名(相对),它可以在任何包中,因此要指定包,使用import语句。

如果您有多个具有相同名称的类,则必须在代码中使用绝对类名来区分重复的名称。示例com.Fooorg.Foo然后您对Foo使用com.Fooorg.Foo使用org.Foo