摘要:实际上,一个完整的类名就是包名与类名的组合。例如一个文件内容如下这表示和都属于这个包,它们的完整类名分别是和。包就是文件夹包代表的是一种树形结构的路径,而在操作系统和压缩包当中,路径都是以文件夹的形式展现的。
1. 为什么 Java 会有包的概念?
我们知道 Class(类)是 Java 中的一等公民,所有的 Java 代码,都要写在类里面。
我们也知道,在命名规则下,你可以给类起任何名字。当你使用别人的类时,首先知道的是类名,然后再了解如何使用这个类。
随着人们编写的 Java 类越来越多,就会有个问题:如果出现了名字相同的类怎么办?两个名字相同的 User 类,其内涵是否也一样呢?如果不一样,要如何区分它们呢?
Package (包)就是用来解决这个问题的。通过将同名的类放到不同的包里面,我们就可以:
对同名的类进行区分;
精确地指明我们需要其中的哪一个;
让同名的类在一个程序当中共存。
例如有两个 User 类,把它们分别放到包 p1 和 p2 中,就得到两个不同的类: p1.User 和 p2.User。
所以,包的存在对于 Java 语言来说是非常重要的,没有它,Java 的世界将会十分混乱,我们可能会遇到同名的类冲突,可能会为了避免这种情况而给类起一个非常长的名字。不管怎样这都是十分痛苦的。
2. 包是类的一部分为什么这么说呢?因为每个类都会属于一个包,那些没有指定属于哪个包的类,我们认为它们属于缺省包(default package)。实际上,一个完整的类名就是包名与类名的组合。比如当我们说 Date 类时,通常指的是 java.util.Date 类。要使用这个类,我们需要给出完整的类名。下面是一个例子:
public static void main(String[] args) { System.out.println("现在是 " + new java.util.Date()); }
上面的例子涉及到两个类,一个是 System,一个是 Date。为什么后者要给出完整类名,而前者不需要呢?因为 Java 有个规定:凡是在 java.lang 包下面的类,使用时都无需给出完整类名。这里的 System 类,指的就是 java.lang.System,所以只要写类名就可以了。
3. 声明类属于哪个包我们可以在 java 文件的最开头声明这个 java 文件中的类属于哪个包。如果文件当中有多个类,那么它们都属于这个包。例如一个文件 Class1.java 内容如下:
package p1; public class Class1 { // ... } class Class2 { // ... }
这表示 Class1 和 Class2 都属于 p1 这个包,它们的完整类名分别是 p1.Class1 和 p1.Class2。
4. import 是一种简写规则因为写完整的类名仍然是比较痛苦的一件事(当然比没有包的概念还是舒服多了),所以 Java 又增加了一个方便编码的规则:import。
import 的用法,简单的说就是,在源代码的开头声明了 import java.util.Date;之后,下面的源代码中使用 Date 类就无需用完整的类名了:
import java.util.Date; public static void main(String[] args) { System.out.println("现在是 " + new Date()); }
所以 import 的作用很简单,就是省略包名,减少不必要的重复。不过它不是万能的,如果你要在一个 java 文件中同时使用 java.util.Date 和 java.sql.Date 的话,那么 import 就只能适用其中的一个,另一个你还得用完整的类名。
5. 包就是文件夹包代表的是一种树形结构的路径,而在操作系统和压缩包当中,路径都是以文件夹的形式展现的。所以对初学者来说,“包就是文件夹” 这样理解就可以了。
所以,如果一个类声明自己在 p1 包下,那么它也要放在名为 p1 的目录下,否则 Java 就会认为这是错的。
以上就是关于 Java 包的一些基础知识。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/65778.html
摘要:本文接上一篇乐字节关键字关键字块。本文是接着讲述垃圾回收机制和语句。一垃圾回收机制全名垃圾回收机制程序员无权调用垃圾回收器。通知运行,但是规范并不能保证立刻运行。若缺省该语句,则指定为无名包。 本文接上一篇:乐字节Java|this关键字、static关键字、block块。本文是接着讲述JavaGC垃圾回收机制、package 和 import语句。showImg(https://se...
摘要:老夫的老夫的主页谢谢阅读那点事访问级别修饰符注本文讨论的所有情况没有考虑嵌套类。这种访问级别是范围最大的,当泥萌使用该修饰符修饰类的成员的时候,代表该成员可以被所有类访问,即整个项目下都是可以访问的。 老夫的gayhub老夫的主页谢谢阅读 Java那点事-访问级别修饰符 注:本文讨论的所有情况没有考虑嵌套类。 Java的访问级别修饰符(Access Level Modifiers)有四...
摘要:一用途在创建项目的时候,可以自己手动创建,也可以利用工具创建,也就是来创建。可以用来创建项目部署项目安装管理依赖编译代码管理二进制等。的目的是使项目过程规范化自动化高效化及强大的可扩展性。 一、maven用途 java在创建项目的时候,可以自己手动创建,也可以利用工具创建,也就是maven来创建。 maven可以用来创建项目、部署项目、安装管理依赖、编译代码、管理二进制等。 mave...
摘要:应用化极简教程陈光剑基于的企业级应用开发最佳实践前面的章节中,我们都是在环境中开发运行测试应用程序。关键字是分布式应用微服务容器虚拟化。通常,在企业项目实践中,会实现一套应用部署发布的自动化运维平台工具。 Spring Boot 应用 Docker 化 《Spring Boot 2.0极简教程》(陈光剑)—— 基于 Gradle + Kotlin的企业级应用开发最佳实践 前面的章节中,...
摘要:应用化极简教程陈光剑基于的企业级应用开发最佳实践前面的章节中,我们都是在环境中开发运行测试应用程序。关键字是分布式应用微服务容器虚拟化。通常,在企业项目实践中,会实现一套应用部署发布的自动化运维平台工具。 Spring Boot 应用 Docker 化 《Spring Boot 2.0极简教程》(陈光剑)—— 基于 Gradle + Kotlin的企业级应用开发最佳实践 前面的章节中,...
阅读 2158·2023-04-25 20:45
阅读 1067·2021-09-22 15:13
阅读 3640·2021-09-04 16:48
阅读 2579·2019-08-30 15:53
阅读 926·2019-08-30 15:44
阅读 936·2019-08-30 15:43
阅读 1001·2019-08-29 16:33
阅读 3432·2019-08-29 13:08