Java 17 package 包的使用

Java 17 package 包思维导图

Java 17 package 包

思维导图

Java 17 package 包的使用

package 在 Java 中就是包的意思, 为什么会出现这个知识点, 主要的原因是因为避免类的重复。

任何真实的项目都会有对应的项目名以及开发过程中需要用到的类文件(对于 Java 来说),这些一个一个业务功能的封装成了一个又一个的项目基石。 但是对于类来说, 操作文件可能都叫做 FileUtils.java 也可能所有的主函数都叫做 Application.java。但又怎么能区分这个类是谁写的, 而不会因为类名一样调用的时候不知道应该是使用谁呢?

成百万的开发人员都写 Hello World 程序, 类名都叫做 Hello.java 怎么区分?

既然张三写 Hello.java, 李四也写 Hello.java,那我让你们前面加上你们的标识, 张三.Hello.java 和 李四.Hello.java。这样就可以区分是张三还是李四写的了。 但是张三和李四也有可能重复, 怎么保证这个不重复呢, 在定义 package 的时候一般使用域名的反向编写。 比方说, 你有一个域名 xymiao.com。你的包就可以使用 com.xymiao 进行填写。 可以看现在以后的开源程序大多都是用这个方式进行命名的。这个在其他的语言中也有叫做命名空间的,比方说 .net 体系。 这就是包的机制的由来。

基本上现有的语言都是从一代又一代的迭代而来的,跟得上时代的语言都在一代有一代的版本中加入了新的特性。 那些没有跟上步伐的, 也都被企业开发所放弃, 注意这里是企业放弃, 并不是说那些已经被淘汰的语言就不能学习和使用了。 每个语言都有其特点和思想。 主要的学习语法的同时也要学习思想。

package 格式

package 包名;

package 只能定义在最上层。也就是 calss 之前。

Java 17 package 包的使用

在编译的时候, 会生成 package 的目录 xymiao ,并且把 .class 的文件放到 xymiao 目录中。

Java 17 package 包的使用

在上面的 javac 命令前面详细的讲解了使用方法。 这里直接使用 -d .其中的“.” 代表了当前目录。

从这可以看出来, 对于 package 就是和文件系统中有相同层次的目录结构。

对于执行来说, 有了 package 之后, 就需要理解 classpath 这个知识点。 因为所有的第三方的 jar ,以及自己后续开发中使用的目录结构, 以及当前的开发工具,在进行编译 Java 的时候都是依靠 package 和 classpath 来结合使用。从这个教程之后, 就不需要再使用富文本编辑器, 使用 javac 和 java 进行编译源代码, 可以考虑使用新的更加智能的 IDE 了。

当前章还最好使用手动编译的过程。 这样更容易理解这个构建的过程。易于后续的知识点学习。

如何使用

既然上面生成了 .class 文件, 对于其他的类文件如何使用这个类呢? 这个时候就需要用到 import 关键字了。导入的概念。 import 的让你可以不写代码, 也能生成任何想开发的程序, 只要面向 github 就好了。

import 格式:

import 包名.类名;import 包名.*;

如果对于只想使用一个类文件引用,可以直接指定类名, 如果想引入该包下的所有类, 就可以使用 .* 的方法。

Java 17 package 包的使用

忽略上面的红色波浪, 因为对于 package 有一个语法检测, package 和 目录不一致会有一个错误提醒, 忽略即可。

一般情况下, 一个项目的目录架构基础就是 项目目录下, 包含一个 src 和 对应的 classes。

Java 17 package 包的使用

对于目录有一个目录结构。 这个是学习过程中不使用构建工具的目录结构。 如果是构建工具有一个固定的目录结构。 这个后续用到构建工具的时候, 再详细分析。我们根据上面的目录结构怎么进行编译运行和代码整理。

定义项目名:mzpdemo

目录结构如下:

Java 17 package 包的使用

在 src/xymiao/ 的目录下新建文件: Demo18Package.java 代码如下:

package xymiao;public class Demo18Package {    private  String hello= "xymiao";    public String getHello(){        return this.hello;    }    public static void main(String[] args) {        Demo18Package demo18Package = new Demo18Package();        System.out.println(demo18Package.getHello());    }}

Java 17 package 包的使用

然后编译, 这里编译就需要注意了。 因为我们新定义了项目的目录结构。 所以要根据定义的目录结构进行处理。

首先要把 class 文件编译到 classes 中,打开 powershell 并指定编译的目录。

javac -d ./classes src/xymiao/Demo18Package.java

编译之后, 在 mzpdemo/classes/xymiao/Demo18Package.class 就存在编译的字节码文件了。

Java 17 package 包的使用

运行的时候, 就需要指定 class 的路径, 使用 java -cp 指定一个 classpath:

java -cp ./classes xymiao/Demo18Package

效果如下:

Java 17 package 包的使用

对于这个结构要多做尝试和链接, 出现问题也没有关系。 多尝试才能理解里面圈圈绕绕。

除了在 package 下方使用 import 的引用的方式, 还可以显式的指定package,例如:

xymiao.Demo18Package d = new xymiao.Demo18Package();//xymiao 是 package 。

静态引入 package

从 Java 1.5 之后引入了静态引入的概念。主要是用于导入指定类的某个静态成员变量、方法或者是所有的静态成员变量、方法。

对于静态引入。 格式如下:

import static packageName.className.*;import static packageName.className.[静态成员变量 | 静态方法]

实例如下:

Java 17 package 包的使用

上面演示的代码, 其中全部引用的方式:

import static xymiao.Demo19ImportStatic.*;

可以替换成:

import static xymiao.Demo19ImportStatic.sayHi;

现在可以考虑一个问题,就是在集成开发环境(IDE)中,是如何进行编译的呢。 不管是 Eclipse 和 Idea,都会有配置 JDK 的 Home 问题, 要让 IDE 知道 JDK 在那, 用的那个版本。 然后需要知道编译的文件是什么字符集。 对于 Eclipse 还是默认 GBK, Idea 已经是使用 UTF-8 作为默认值。 并且会有编译目录。 编译目录, 一般是由“项目目录” + "输出目录" + 编译的 class 类, 组合而成。 自己写个简单的编译器? 先关注我吧。 后续到窗口知识点的时候, 可以来做个简单的编译工具。

Java17 的 package 目录结构

因为从 Java 9 开始就进行了模块化。 所以针对 package 目录之上又多了一层模块化分层。

模块 java.base 的 package 包含。

Java 17 package 包的使用

这只是演示让你看到 Java JDK 的 package 的目录结构,多理解他们这样定义的原因和优缺点。

还有一个知识点就是对于 java.lang 包的内容不需要显式的 import。运行期会自动加载该包下的所有类。

package 知识先到这了, 还有什么有遗漏的吗? 评论让我继续学习完善一下该文档吧。

点赞 + 关注 + 收藏, 我是苗子说全栈之 Java。 感谢你的阅读。

每篇一句:健身和读书,是世界上成本最低的升值方式;而懒,是你通往牛逼的路上最大的敌人。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/132918.html

(0)

相关推荐

  • 老年人便秘严重者最有效方法,老人便秘食谱疗法

    慢性便秘患者通常必须多喝水,尤其是白开水,但碳酸饮料、浓茶和咖啡不适合饮用。但是仍然有很多患者每天喝很多水,但是仍然便秘。原因是什么? 便秘的常见原因是粪便在大肠停留时间过长,水分...

    生活 2021年11月1日
  • 特斯拉model3玻璃水,特斯拉model3加玻璃水

    大家也都知道,今年7月份,郑州特大洪灾产生了大量的泡水车,据称泡水车的规模在40万辆以上,之前我们也说过,这对于保险公司来说是一个巨大的压力,所以很多泡水车被保险公司定损为全损或者报废之后,便将这些泡水车回收,但是这些车型到了保险公司手上之后,并没有进行真正意义上的报废处理,而是通过其他方式进行“止损”。所谓的其他方式就是将这些泡水车以比较低的价格卖给二手车商或者修理厂,这些二手车商和修理厂经过维修和清理之后,然后以正常二手车的价格卖给消费者,所以一直以来,在二手车买卖中,对于消费者来说,最大的两个坑就是泡水车和事故车。

    科技 2021年10月30日
  • 河南安阳一幼儿园因“小学化”倾向被查处通报,安阳市一级一类幼儿园名单

    据微信公号“安阳市教育局”11月27日消息,今年年初,河南省教育厅出台了《河南省推进幼小科学衔接攻坚行动实施方案》,河南省安阳市教育局也印发了《关于进一步纠正幼儿园“小学化”倾向的通知》等文件,部署全市开展纠正幼儿园“小学化”倾向、推进科学幼小衔接攻坚行动。

    生活 2021年11月28日
  • 宝贝,你又尿床了。

    回想起来,从宝宝出生后,能影响我睡眠的除了夜奶、还有生病,剩下的就是尿床了。

    生活 2021年10月26日
  • 两款新电动车来了,可上牌,续航远,城市与农村都能上路

    自新国标实施以来,各大地区都加大了对电动车的监管力度,特别是在城市地区。对此,很多用户在购买新电动车时,除了会考虑车辆续航外,还会考虑车辆能否上牌。而由此,行业一些电动车企业也在逐步加大对这类电动车的打造力度,下面就带大家来看看这两款新电动车。

    科技 2021年11月16日
  • 帮你问:健身、减肥、教育、戴眼镜、刷牙。

    空气炸锅炸的食物就无公害吗?不一定

    生活 2021年11月28日