import java.util.Scanner;
在这个语句中,
.Scanner
是一个类,
.util
是包的名称。一般情况下,
java
、javax
或者其他任何东西都会出现在第一个句点之前,是用来表示包所属的命名空间的。更新:
我也找到了这张图片:
http://www.javatpoint.com/package
这是真的吗?
import java.util.Scanner;
.Scanner
是一个类,
.util
是包的名称。java
、javax
或者其他任何东西都会出现在第一个句点之前,是用来表示包所属的命名空间的。http://www.javatpoint.com/package
这是真的吗?
根据JLS 7.1:
包的成员是它的子包以及在包的所有编译单元(§7.3)中声明的所有顶层类类型(§7.6,§8)和顶层接口类型(§9)。
例如,在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
是一个包,java/util
也是一个包。但/util
不是一个包。但是,由目录结构表示的包不是规范。这只是一种常见的实现方式。如何存储包取决于主机系统(JLS 7.2)。util
在 java
目录之内,但是 java
和 java.util
的行为就像是完全独立的包。 - DarkhoggP
是一个包,P.Q
是一个包,这并不意味着某个类 P.Q.SomeClass
可以使用另一个类 P.AnotherClass
的简单名称而不需要导入或访问其包私有/受保护成员,反之亦然。尽管根据规范,Q
是 P
的成员。 - RadiodefJava中的类通过一个完全限定名来标识,该完全限定名由类的包名和类名(如果有外部类,则还包括其外部类)连接组成。通常,在导入语句中如下:
import foo.bar.baz.MyClass;
foo.bar.baz
),最后一个字段是类名(MyClass
)。在您的示例中,java.util
是包名,Scanner
是类名。import java.util.Scanner
表示:
Scanner s = new Scanner()
),则将使用导入找到的类。或者,您可以不进行导入并使用 java.util.Scanner s = new java.util.Scanner()
,但您可以看到这会很快变得难以管理,尤其是如果您在文件中的许多地方都使用它。导入只是一个方便的方法,可以减少在引用 Scanner 时反复指定要使用的 Scanner 类的版本。
java.util
,而不是util
。"java"只是包名的一部分。AbC123.XYZ.foo
是一个有效的包名。java
开头的包是JDK的一部分(加上扩展)。语言中没有规定或强制执行此规定。java
和util
是嵌套包的名称。java.util
是最终包的路径。
它们是rt.jar
文件内的目录。
rt.jar
文件是一个zip
归档文件,您可以使用7-zip
程序查看它。
Scanner
是rt.jar
内java/util
目录中的Scanner.class
文件。
import java.util.Scanner
指令允许您在代码中使用Scanner
类名称而不必指定完整路径。
import java.util.*
指令允许您使用java.util
中的所有类名而无需路径。
import static java.util.Scanner.*
指令允许您使用Scanner
内的所有静态成员,而无需路径。但是没有静态成员。
1) Java是一个包(也代表文件系统中的一个文件夹)。它直接在类路径中,因此您的程序可以将其作为“java”引用(Java文件夹中的子文件夹)
2) Util是Java包中的一个包(因此被引用为“java.util”)。
3) Scanner是util包中的一个类(因此为“java.util.Scanner”)。
你可以拥有任意多层嵌套的包,例如 'mypackage1.mypackage2.mypackage3. ...' 等等,只要 mypackage1 在类路径中即可。
希望这能帮到你。
导入语句表示一个层次结构
import java.util.Scanner;
java
是包名 util
是子包名(在 java 包内)Scanner
是类名(在 util 包内)
import java.util.*;
类名可以用星号代替,
这意味着导入所提到的子包中所有类。
java.util
是一个包的名称。 - Oliver Charlesworth