背景

之前学Java属于赶鸭子上架,草草学习基础语法便直接做课程作业,许多概念问题仍不清楚,故在此梳理一下,主要参考廖雪峰和互联网资料。

Java运行方式与JVM

Java是介于编译型语言(C++)和解释型语言(Python)之间的。所有Java代码先被编译为.class文件,然后在Java虚拟机(JVM)中运行,跨系统(一次开发,随时可用)。

JDK,JRE,JVM的联系和区别

  • JDK(Java Development Kit):开发工具包

    • 包含JRE+编译器、调试器等开发工具
  • JRE(Java Runtime Environment):Java运行时环境

    • 包含JVM+核心类库
  • JVM(Java Virtual Machine):Java虚拟机

    • Java跨平台最核心的部分

几个可执行文件的意义

  • java:即JVM,运行Java程序,就是启动JVM,然后让JVM执行指定的编译后的代码;
  • javac:Java的编译器,把Java源码文件(.java)编译为Java字节码文件(.class);
  • jar:把一组.class文件打包成一个.jar文件,便于发布;
  • javadoc:从Java源码中自动提取注释并生成文档;
  • jdb:Java调试器,用于开发阶段的运行调试。

jar包相关概念

本贴参考知乎用户:慕课网 的文章《jar包的一些事儿》

什么是jar包

这里要啰嗦一遍概念,jar包就是 Java Archive File,顾名思义,它的应用是与 Java 息息相关的,是 Java 的一种文档格式,是一种与平台无关的文件格式,可将多个文件合成一个文件。jar 包与 zip 包非常相似——准确地说,它就是 zip 包,所以叫它文件包。jar 与 zip 唯一的区别就是在 jar 文件的内容中,包含了一个 META-INF/MANIFEST.MF 文件,该文件是在生成 jar 文件的时候自动创建的,作为jar里面的"详情单",包含了该Jar包的版本、创建人和类搜索路径Class-Path等信息,当然如果是可执行Jar包,会包含Main-Class属性,表明Main方法入口,尤其是较为重要的Class-Path和Main-Class,咱们一会在后续的内容里面会进行详细地讲解。

此外,值得注意的是,因为jar包主要是对class文件进行打包,而java编译生成的class文件是平台无关的,这就意味着jar包是跨平台的,所以不必关心涉及具体平台的问题。

为什么要打jar包

在大致了解了什么是jar包了之后,咱们来讲讲为什么要打jar包。主要从我们自身的徐需求出发,不难发现,当我们开发了一个程序以后,程序中有很多的类,如果需要提供给别人使用,发给对方一大堆源文件是非常不好的,因此通常需要把这些类以及相关的资源文件打包成一个 jar 包,把这个 jar 包提供给别人使用,同时提供给使用者清晰的文档。这样他人在拿到我们提供的jar之后,就能方便地进行调用,具体如何调用后面会进行讲解。
因此,建议大家在平时写代码搬砖的时候,注意把自己代码的通用部分抽离出来,主键积累一些通用的util类,将其逐渐模块化,最后打成jar包供自己在别的项目或者模块中使用,同时不断打磨jar里面的内容,将其做得越来越容易理解和通用,这样的好处是除了会对你的代码重构能力以及模块抽象能力有很好的帮助之外,更是一种从长期解放你的重复工作量,让你有更多的精力去做其他事情的方式,甚至当你抽象出业内足够通用的jar之后,jar包还能为你带来意想不到的利润(当然公司里该保密的东西还是得保密的)。这也是java发展得如此之好的原因,无论出于盈利或者非盈利的目的,将自己的通用工具或者框架抽取出来,打成jar包供他人调用,使得整个java生态圈变得越来越强大–几乎很多业务场景都能找到对应的jar包。

原文提到了一些关于jar包的其他点,我目前没有过多接触,也便没有仔细看下去,感兴趣的自行查看

暂时结束

本贴是概念为主,行文至此便暂时结束,后续有收获会考虑补充或者分类重新开贴。

最后修改:2022 年 04 月 23 日
如果觉得我的文章对你有用,请随意赞赏