2016-01-08 70 views
1

我正在阅读有关预定义的方法并正在了解导入语句。我已经看到并经常使用这些方法来使用某些预定义的方法,但我总是将它们放在程序的开头。我的问题是,这些可以放在一个特定的代码块中,以便它只能在该块中看到吗?我不确定会有真正的原因,主要是好奇。Java导入语句

+1

@PritamBanerjee他指的是Java,指向'Scala'的链接。 –

+0

对,我的坏。复制了错误的一个。 –

+0

其他人已经发布了正确的答案,但关于你的陈述“我不确定实际上是否有这样做的理由......”,实际上有很好的理由去做这些事情,斯卡拉允许它。一个原因的一个例子是限制导入的范围,以便它仅在特定块中可用。 –

回答

2

不,您需要在package声明之后的class/interface之前定义它。

因此,导入对于整个.class文件总是可见的。没有指定类的全名(例如,您需要导入java.util.List,或者您需要在任何地方都使用它的全名),您可以使用除本地包以外的其他包的成员,而不指定类的全名。

Oracle有一个tutorial on using package members

.class -file顺序是defined为:

  1. package规范(可选)
  2. import语句
  3. class/interface/enum定义
+1

值得注意的是''java.lang。*'会自动导入 –

+0

@ cricket_007 true,我将它改为'java.util.List' :) –

+1

[JLS specification here](https://docs.oracle.com/ javase/specs/jls/se7/html/jls-7.html#jls-7.3) –

4

java文件包含三个零件:

  1. 包定义
  2. 进口定义(可选)
  3. 的类(或接口/枚举)定义。

,它也必须是这个顺序,你会得到编译错误,如果它不是顺序

0

我的猜测是,会给你一个编译器错误。但是,如果您在实例化类时指定了类的完整软件包名称,则可以有效地实现相同的功能。

如:

public String getString() { 
    return new com.package.some.Class("hello world").toString(); 
} 

在这种情况下,你不需要在类的顶部有一个“进口”指令,因为你是在告诉你想要的类所在的方法中,编译器在com.package.some包中,该类称为Class。

这实际上发生在野外,例如,您必须在具有相同名称的不同包中使用类。您只能导入其中一个,另一个则必须在代码内部内联包定义。

import com.package.some.Class; 

public class Yolo { 

    private Class classA; 
    private com.package.other.Class classB; 

    public Yolo(Class classA, com.package.other.Class classB) { 
     this.classA = classA; 
     this.classB = classB; 
    } 
} 

您不能只导入'Class'对象并将它们引用为Class,因为编译器不会知道哪一个。所以,这是一种有效的情况,你会发现这种事情真的发生了。

0

对于Oracle文档:

导入封装部件

要导入的特定成员到当前文件,在任何类型定义,但 后放一个进口 声明在文件的开头包声明,如果有的话。以下是如何从 上一节中创建的图形包中导入Rectangle类的方法。