Java import语句语法
这是一个简单的问题,但我真的被它搞砸了。 我试图找到一个复制品,并用谷歌搜索它,但当我找不到令人满意的答案时,我更加惊讶。
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的子包,则PQ是子包的完全限定名,并且还表示包。
所以你可以从中收集:
-
java
是一个没有类的包,只有子包。 -
util
是java
的子包,其完全限定名是java.util
。 -
util
不能表示包,java.util
可以。
“我也发现了这张照片:……这是真的吗?”
是的, util
是java
的子包。 但是, util
不是一个包。 java.util
是一个包。
如果愿意,您可以将包视为目录结构,其中每个子包都是其外包中的文件夹。 所以会有一个“文件夹”java,在其中,另一个“文件夹”util。 包由其完全限定名称(“完整路径”)表示,因此java
是包, java/util
是包。 /util
不是包。 但是目录结构所代表的包不是规范。 这只是一种常见的实施方式。 由主机系统决定如何存储包( JLS 7.2 )。
Java中的类由完全限定的名称标识,该名称包含类的包和类的名称(以及任何外部类,如果有的话)的串联。 通常,在导入语句中,例如:
import foo.bar.baz.MyClass;
除了最后一个以点分隔的字段之外的所有内容都是包名称( foo.bar.baz
),最后一个字段是类名( MyClass
)。 在您的示例中, java.util
是包名称, Scanner
是类名。
这个过程实际上有点复杂,因为可能涉及内部/嵌套类和接口,但是你明白了。
import java.util.Scanner
说。
- 查看包java。
- 在包中的那个外观。
- 在其中找到类Scanner。
- 现在,只要我们在这个java文件中使用类/ etc的名称(例如
Scanner s = new Scanner()
),就会使用import找到的类。
或者你不能进行导入并执行java.util.Scanner s = new java.util.Scanner()
但你可以看到它会如何迅速变得难以处理,特别是如果你在文件中的很多地方使用它。 导入只是一种方便的方法,可以减少重复指定您在引用Scanner
时指定的Scanner
类的版本。
几点:
- 包名是
java.util
,而不是util
。 “java”只是包名称的一部分。 - 包名称是由点分隔的任何系列的有效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
使用ALL类名。
import static java.util.Scanner.*
指令允许您在Scanner
使用所有静态成员,而不使用路径。 但没有。
JRE中所有软件包的列表如下: http : //docs.oracle.com/javase/7/docs/api/overview-summary.html
1)java是一个包。 (也表示文件系统中的文件夹)。
它直接位于类路径中,因此程序将其引用为“java”。 (java文件夹中的子文件夹)
2)util是java包中的一个包(因此被称为’java.util’)。
3)Scanner是一个util包内的类(因此’java.util.Scanner’)
您可以拥有任意数量的嵌套包,例如’mypackage1.mypackage2.mypackage3。 ……等等,只要mypackage1在类路径中。
希望这可以帮助
import语句表示层次结构
import java.util.Scanner;
java是包
util是子包(在java中)
扫描仪是类(内部工具)
import java.util。*;
class级名称可以用星号进行整理,
这意味着在上述子包中导入所有类。