这是一个简单的问题,但我真的被它搞砸了。我试图找到一个复制品,并用谷歌搜索它,但当我找不到令人满意的答案时,我更加惊讶。
import java.util.Scanner;
在此声明中.Scanner
是类,
.util
是包的名称
java
或javax
或一般情况下第一期之前的内容是什么?
更新:
我也发现了这张照片:
http://www.javatpoint.com/package
这是真的吗?
答案 0 :(得分:8)
根据JLS 7.1:
包的成员是其子包和所有顶级类类型(第7.6节,第8节)和顶级接口类型(第9节)在包的所有编译单元(第7.3节)中声明。
例如,在Java SE平台API中:
包java有子包awt,applet,io,lang,net和util,但没有编译单元。
java.awt包有一个名为image的子包,以及一些包含类和接口类型声明的编译单元。
如果包的完全限定名称(第6.7节)是P,并且Q是P的子包,则P.Q是子包的完全限定名称,并且还表示包。
所以你可以从那里收集:
java
是一个没有类的包,只有子包。util
是java
的子包,其完全限定名称为java.util
。util
不表示包,java.util
表示。“我也发现了这张照片:......这是真的吗?”
是的,util
是java
的子包。但是,util
不是一个包。 java.util
是一个包。
如果愿意,您可以将包视为目录结构,其中每个子包都是其外包中的文件夹。所以会有一个“文件夹”java,在其中,另一个“文件夹”util。包由其完全限定名称(“完整路径”)表示,因此java
是包,java/util
是包。 /util
不是一个包。但是目录结构所代表的包不是规范。这只是一种常见的实施方式。由主机系统决定如何存储包(JLS 7.2)。
答案 1 :(得分:5)
Java中的类由完全限定名称标识,该名称包含在类的包和类的名称(以及任何外部类,如果有)的串联中。通常,在一个导入语句中,如:
import foo.bar.baz.MyClass;
除最后一个以点分隔的字段外的所有内容都是包名称(foo.bar.baz
),最后一个字段是类名(MyClass
)。在您的示例中,java.util
是包名称,Scanner
是类名。
这个过程实际上有点复杂,因为可能涉及内部/嵌套类和接口,但你明白了。
答案 2 :(得分:1)
import java.util.Scanner
说。
Scanner s = new Scanner()
)时,就会使用import找到的类。 或者你无法进行导入并执行java.util.Scanner s = new java.util.Scanner()
,但你可以看到它会很快变得难以处理,特别是如果你在文件中的很多地方使用它。导入只是一种方便的方法,可以在您引用Scanner
时重复指定您所指的Scanner
类的哪个版本。
答案 3 :(得分:1)
几点:
java.util
,而不是util
。 “java”只是包名的一部分。AbC123.XYZ.foo
是有效的包名称java
开头的包是JDK的一部分(加上扩展名)。语言中没有任何内容可以指定或强制执行答案 4 :(得分:1)
java
和util
是嵌套包的名称。 java.util
是最终包的路径。
它们是rt.jar
文件中的目录。
rt.jar
文件是zip
存档,您可以使用7-zip
程序进行查看。
Scanner
是Scanner.class
java/util
目录内的rt.jar
个文件
import java.util.Scanner
指令只允许您在代码中使用Scanner
类名而不指定它的完整路径。
import java.util.*
指令允许您在没有路径的java.util
中使用所有类名。
import static java.util.Scanner.*
指令允许您在Scanner
内使用所有静态成员,而不使用路径。但没有。
JRE中所有包的列表如下:http://docs.oracle.com/javase/7/docs/api/overview-summary.html
答案 5 :(得分:0)
1)java是一个包。 (也代表文件系统中的文件夹)
它直接在类路径中,因此程序将其引用为“java”。 (java文件夹中的子文件夹)
2)util是java包中的一个包(因此被称为'java.util')。
3)Scanner是util包内的类(因此是'java.util.Scanner')
您可以拥有任意数量的嵌套包,例如'mypackage1.mypackage2.mypackage3。 ......等等,只要mypackage1在类路径中。
希望这有帮助
答案 6 :(得分:-2)
import语句表示层次结构
import java.util.Scanner;
java
是包util
是子包(在java中) Scanner
是类(在util中)
import java.util。*;
班级名称可以用星号进行整理,
这意味着在提到的子包中导入所有类。