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年9月9日
  • 刚刚,苹果新品集体曝光

    随着 12 月份的来临,2021 年逐渐步入尾声。

    科技 2021年12月6日
  • 我手头有一栋闲置的房子。如果我把房子卖了,存银行计息,划算吗?

    很多人在手上有了一些闲钱后,就会纠结于是应该拿去买房好还是存在银行里好。然而,对于已经买了房的人来说,可能又会纠结另外一个问题,那就是要不要把房子卖了,把钱放在银行里吃利息?那么,如果自己手上有一套闲置套房,是不是把房子卖了,钱放银行里吃利息更划算呢?

    生活 2021年11月20日
  • 吃了鱼后,七岁的女孩肚子痛晕了过去,发现肚子里有一根电线。

    孩子在游泳馆学习游泳,突然腹痛晕倒在地,到医院检查竟然发现肚子有一根铁丝。最近发生的一件事把马先生吓坏了,整日整夜无法入睡。马先生一脸愁容地说:女儿像往常一样在游泳馆学习游泳,但是游泳老师突然打过来电话,说她女儿肚子疼得已经晕过去了。当时就把马先生急坏了,立马向公司请假,把女儿送进医院检查,但检查结果把一家人吓了一大跳。据马先生回忆,当时检查后,发现女儿食道附近有一个亮点,起初医生推测的是,孩子可能误食了鱼刺。但是马先生妻子接下里的一番话,让人震惊不已,马先生的妻子说,当时孩子的情况十分危险,女儿体内的不明物品,已经从孩子的食道穿过去,划破了心脏的外皮层,造成了胸腔积血。医院立马准备了手术,幸运的是经过抢救,孩子已经脱离了生命危险,体内的不明物体也被取了出来,当大家看到后,一家人心里一阵后怕,这竟然是一根将近一厘米的铁丝,让人十分疑惑的是,这么坚硬的铁丝,到底怎么出现在孩子肚子里呢?孩子接连转了几家医院,经过几个月的治疗,前前后后一共花费7万元,才终于痊愈出院。这真是不幸中的万幸,经过医生诊断,他们确定这根铁丝,是被孩子误食进去的。在得知消息后,马先生立即找到家中,负责做饭的母亲询问,但是通过孩子奶奶回想,孩子这段时间吃的多是软糯形饭菜,应该不会和饭菜混进去,而且家里使用的清洁工具,都是塑料或者绒线式物品,根本没有铁质物品出现,所以首先可以排除在家中误食,其次孩子几乎不在幼儿园用餐,都是在家里吃饭,所以也排除在校误食。正在这时,马先生似乎想起了什么事情,从马先生口中得知,由于夫妻两个人平常比较,就把孩子送到家里的奶奶家。有一天,邻居带着自己小孩子出去吃饭,就顺便叫上了马先生一家人,随后两家人就去往一家饭店聚餐。在此期间,他们点了一个鱼肉,但是由于还有其他孩子在场,马先生女儿的心思就不在吃饭上面,一心想着赶紧吃完饭出去玩耍,吃的时候狼吞虎咽,所以马先生一家人怀疑,饭店在处理鱼头的时候,没有处理干净,导致刮鱼鳞的钢丝球掉了一根。从而混在鱼肉中,被孩子吃进了肚子里,那事情的真相,是否如马先生说的那样呢?当时带孩子吃饭的邻居,也证实了马先生一家人的话,她说当时来这家饭店吃饭,一共点了八个菜,其中有一道就是胖头鱼。他们就联想到了,会不会是饭店在处理鱼鳞的时候,刮鱼鳞的铁丝混入了饭菜中,而且从带孩子吃饭的邻居口中得知,孩子在吃完后,的确在饭店门口说肚子有点痛,不过当时大家都以为,孩子吃饭吃的太急撑着了,也就没有太在意,据马先生一家人回忆,孩子从饭店回来除了肚子有点痛之外,并没有其他反应,直到两天后,孩子开始不好好吃饭,每次只吃一些水果之类的东西,当时一家人还没有意识到问题的严重性,孩子奶奶还以为,孙女不吃饭是因为白天在游泳馆训练太累。直到第三天早上,游泳馆老师发现孩子腹部疼的在地上打滚时,赶紧联系上了马先生一家人。孩子这才被送往医院进行抢救,主治医生说,如果孩子在晚来一会儿,很有可能会有生命危险,谁也没有想到,短短几毫米的铁丝差点要了孩子的性命,在此小风提醒各位家长,不管在饭店吃饭还是在家吃饭,在孩子进食前,请一定要检查食物是否有其它异物,发生这件事后,马先生一家人立马找到了饭店负责人,但是对方只是简单记录,并没有给出一个解释,原因是因为,当时马先生一家人在饭店吃饭后,当天并没有反应,而是在三天以后才来饭店反映情况,所以他们认为孩子误吞铁丝,不一定是他们饭店造成的,而且马先生也没有拿出确定的证据,饭店的监控也由于时间过程,被系统自动删除,也无法得知当时店里的具体情况,为了证实自己的说法,饭店也同意马先生一家人进入后厨查看,饭店后厨的工作人员表示,店里所有的鱼都是经过她的手处理,而整个饭店,也只有这两把处理鱼鳞的工具,在事情发生后,她们进行仔细查看,发现工具并没有出现任何损坏,,虽然花了很多钱,但孩子已经健康出院。马先生也说:自己并不是想要多少赔偿,只是希望饭店可以足够重视这件事情,不要再让类似的事情出现。而饭店最后也表态,既然事情已经发生了,他们会进行内部整改,加强整个后厨卫生管理。同时也对马先生一家深表歉意,并出于人道主义,会适当补偿给马先生一家损失,这件事到这里就结束了。小风认为,孩子年龄还小,很多不经意之间的小东西都会被误食,对于这件事双方都有责任,家长也没有起到监管作用,希望大家带孩子在外面吃饭的时候,一定要提前检查一下食物,及时发现及时处理,千万不要让自己的粗心马虎,影响到孩子的身体健康。看遍人间百态尝尽天下心酸,我是风言语事期待您的关注!!!

    生活 2021年10月31日
  • 动辄大几百万!为何互联网大厂都热衷于换logo?

    大家好,我是小莫小可爱!俺又来了!

    科技 2021年11月19日
  • 续航702KM,轴长2m 83国产快充SUV,好养,Aeon Aion V实拍。

    #广汽埃安AION V PLUS纯电续航超700km#在城市开新能源纯电汽车,走走停停,把配备的制动能量回收系统,发挥到了极致。但是上了高速就有所不同了,一脚电门下去,电量持续输出,消耗可就是一比一的快,制动能量回收系统的工作效率就好下降许多。制动能量回收系统的工作原理:汽车在刹停制动的时候,把这一部分动能,通过发电机转换成电能,储存到电池中,提升续航里程。如果经常跑高速,又想入手一款好养的纯电新能源汽车,选择一款续航长得比较有保障,而今天给大家带来一款有着702公里续航,快充家用SUV,埃安AION V,高颜值之下,实力也非凡,接下来就一起看看,是你那盘菜吗。

    科技 2021年10月30日