Java import语句语法

这是一个简单的问题,但我真的被它搞砸了。 我试图找到一个复制品,并用谷歌搜索它,但当我找不到令人满意的答案时,我更加惊讶。

import java.util.Scanner; 

在这个声明中。 .Scanner就是这个类,

.util是包的名称

什么是javajavax或一般在第一个时期之前会有什么?

更新:

我也发现了这张照片:

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是一个没有类的包,只有子包。
  • utiljava的子包,其完全限定名是java.util
  • util不能表示包, java.util可以。

“我也发现了这张照片:……这是真的吗?”

是的, utiljava的子包。 但是, 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说。

  1. 查看包java。
  2. 在包中的那个外观。
  3. 在其中找到类Scanner。
  4. 现在,只要我们在这个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的一部分(加上扩展)。 语言中没有任何内容指定或执行它

javautil是嵌套包的名称。 java.util是最终包的路径。

它们是rt.jar文件中的目录。

rt.jar文件是一个zip存档,您可以使用7-zip程序查看它。

Scannerrt.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级名称可以用星号进行整理,
这意味着在上述子包中导入所有类。