jar包是什么 (jar包是什么格式)

jar包是什么 (jar包是什么格式)

本文目录导航:

jar包是什么

Jar包是一种Java运行程序的打包方式。

以下是关于Jar包的详细解释:

Jar包的基本概念

Jar是Java Archive的缩写,它实践上是一个以“”为裁减名的文件。

在Java开发中,开发者经常将多个Java文件、类库、性能文件等打包成一个Jar文件,以便于散发、部署和版本治理。

Jar包是Java程序运转的基础,无论是运转一个独立的Java运行程序,还是运转基于Java的企业级运行,都离不开Jar包的支持。

Jar包的结构与特点

Jar包外部是一个紧缩的文件系统,蕴含了编译后的Java类文件。

这些类文件是Java虚构机可以间接口头的。

此外,Jar包还可以蕴含元数据、性能文件等辅佐资源。

经过Jar工具,开发者可以繁难地创立、签名和颁布Jar包。

相比于传统的多个文件区分部署的方式,Jar包极大地简化了部署环节,提高了软件的可保养性。

Jar包的用途

Jar包宽泛运行于Java开发的各个阶段。

在开发环节中,开发者经常经常使用Jar包来治理名目依赖的第三方库,如JDBC驱动、Web框架等。

在软件颁布时,一个或多个Jar包组成了软件的散发版本,繁难用户下载、装置和运转。

此外,Jar包还可以用于构建更大的软件架构,如Java Web运行程序理论会被打包成War文件,实质上是一个特定结构的Jar包。

总结来说,Jar包是Java开发中无法或缺的一部分,它是Java运行程序的打包方式,蕴含了编译后的类文件和辅佐资源,简化了软件的部署和治理。

什么是Java字节码?

它是程序的一种低级示意,可以运转于Java虚构机上。

将程序形象成字节码可以保障Java程序在各种设施上的运转Java号称是一门“一次性编译四处运转”的言语,从咱们写的java文件到经过编译器编译成java字节码文件(文件),这个环节是java编译环节;而咱们的java虚构机口头的就是字节码文件。

不论该字节码文件来自何方,由哪种编译器编译,甚至是手写字节码文件,只需合乎java虚构机的规范,那么它就能够口头该字节码文件。

JAVA程序的运转由于Java具备跨平台个性,为了成功这个个性Java口头在一台虚构机上,这台虚构机也就是JVM,Java经过JVM屏蔽了不同平台之间的差异,从而做到一次性编译四处口头。

JVM位于Java编译器和OS平台之间,Java编译器只需面向JVM,生成JVM能了解的代码,这个代码即字节码,JVM再将字节码翻译成真实机器所能了解的二进制机器码。

字节码是怎样发生的?咱们所编写的程序都是格局,理论在口头的时刻兴许点击一下eclipse的运转键就可以在控制台看到运转结果,然而也可以更酷一些,假设你装了JDK,那就可以间接在以命令行的方式编译运转你的文件,编译后会构成文件,这个文件即字节码。

字节码怎样解读?上图是编译好的字节码文件,即一堆16进制的字节,假设经常使用IDE去关上,兴许看到的是曾经被反编译的咱们所相熟的java代码,但这才是地道的字节码这里只引见字节码由哪些部分组成, 详细的意思自行网络或许看文尾的衔接, 有较为详细的解说上图即字节码文件的组成部分, Class文件的结构不像XML等形容言语那样松懈自在。

由于它没有任何分隔符号,所以,以上数据项无论是顺序还是数量都是被严厉限定的。

哪个字节代表什么含意,长度是多少,先后顺序如何,都不准许扭转,如上图左侧即每一部分规则的长度魔数(Magic Number)魔数是用来区分文件类型的一种标志,普通都是用文件的前几个字节来示意。

比如0XCAFE BABE示意的是class文件,那么有人会问,文件类型可以经过文件名后缀来判别啊?是的,然而文件名是可以修正的(包括后缀),那么为了保障文件的安保性,将文件类型写在文件外部来保障不被窜改。

至于为什么是CAFE BABE预计大家也能猜到, 程序员与咖啡的不解之缘版本号(Version)版本号含主版本号和次版本号,都是各占2个字节。

在此Demo种为0X0000 0033。

其中前面的0000是次版本号,前面的0033是主版本号。

经过进制转换获取的是次版本号为0,主版本号为51。

高版本的JDK能向下兼容以前版本的Class文件,但不能运转以后版本的Class文件,即使文件格局未出现任何变动.这就是target参数的用途,可以在经常使用JDK 1.7编译时指定-target 1.5常量池(Constant Pool)常量池是Class文件中的资源仓库, 量池中重要存储2大类常量:字面量和符号援用。

字面量如文本字符串,java中申明为final的常量值等等,而符号援用如类和接口的全局限定名,字段的称号和形容符,方法的称号和形容符。

常量池是一个表结构,在表的内容前有一个类型的计数器,示意常量池的长度下面的表中形容了11中数据类型的结构,其真实jdk1.7之后又参与了3种(CONSTANT_MethodHandle_info,CONSTANT_MethodType_info以及CONSTANT_InvokeDynamic_info)。

这样算起来一共是14种访问标志(Access_Flag)访问标志消息包括该Class文件是类还是接口,能否被定义成public,能否是abstract,假设是类,能否被申明成final。

经过下面的源代码,咱们知道该文件是类并且是public。

0x 00 21:是0×0020和0×0001的并集。

其中0×0020这个标志值触及到字节码指令类索引(This Class Name)类索援用于确定类的全限定名0×00 03 示意援用第3个常量,同时第3个常量援用第19个常量,查找得”com/demo/Demo”。

#3.#19父类索引(Super Class Name)0×00 04 同理:#4.#20(java/lang/Object)接口索引(Interfaces)经过上边字节码图可以看到,这个接口有2+n个字节,前两个字节示意的是接口数量,前面跟着就是接口的表。

咱们这个类没有任何接口,所以应该是0000。

果不其然,查找字节码文件获取的就是0000。

字段表汇合(fields)字段表用于形容类和接口中申明的变量。

这里的字段蕴含了类级别变量以及实例变量,然而不包括方法外部申明的部分变量。

接上去就是2+n个字段属性。

咱们只要一个属性a,所以应该是0001。

查找文件果不其然是0001。

该区域含有字段的访问标志, 访问权限, 字段的称号索引, 字段的形容符索引, 属性表 形容符的作用就是用来形容字段的数据类型、方法的参数列表和前往值。

而属性表就是为字段表和方法表提供额外消息的表结构。

关于字段来说,此处假设将字段申明为一个static final msg = aaa的常量,则字段后就会跟着一个属性表,其中存在一项名为ConstantValue,指向常量池中的一个常量,值为的aaa。

方法(methods)蕴含访问标志表, 方法名索引 , 方法形容符索引, 属性表数量,等Attribute0×0001 :雷同的,示意有1个Attributes了。

0x000f : #15(“SourceFile”)0×0000 0002 attribute_length=20×0010 : sourcefile_index = #16(“”)SourceFile属性用来记载生成该Class文件的源码文件称号。

什么是字节码文件?

字节码文件是经过编译器预解决过的一种文件,是JAVA的口头文件存在方式,

Java源程序()要先编译成与平台有关的字节码文件(),而后字节码文件再解释成机器码运转。

解释是经过Java虚构机来口头的。

它自身是二进制文件,然而无法以被系统间接口头,而是须要虚构机解释口头,由于被预解决过,所以比普通的解释代码要快,然而依然会比系统间接口头的慢。

裁减资料:

在计算机中,数据只用0和1两种体现方式,(这里只示意一个数据点,不是数字),一个0或许1占一个“位”,而系统中规则8个位为一个字节,用来示意罕用的256个字母、符号、控制标志,其中用一个位来启动数据校验,其余七个位用来记载数据。

按计算机中的规则,一个英文的字符占用一个字节,(如,.:;avcAVC都占用一个字节),而一个汉字以及汉字的标点符号、字符都占用两个字节,(如,。

“”:;AVCavc他们就得占用两个字节)。

另外,他们是没有方法比拟的,只能将一个字符占用一个字节,N个字符占用N个字节。

K是千 M是兆 G是吉咖 T是太拉 8bit(位)=1Byte(字节) 1024Byte(字节)=1KB 1024KB=1MB 1024MB=1GB 1024GB=1TB 1024TB=PB 1024PB=1EB 1024EB=1ZB 1024ZB=1YB 1024YB=1BB。

目前最大的计量单位是1BB (Brontobyte)= 1024 YB=10^27。

你可能想看:
« 上一篇
下一篇 »

相关推荐

java中什么是冒泡,冒泡算法

2026年09月06日

27阅读

java中冒号,java双冒号

2026年09月06日

26阅读

java中的->,java中的是什么意思

2026年09月06日

24阅读

java中的super用法,Java中super的说明

2026年09月06日

28阅读

java中反射的应用,java中反射的应用场景

2026年09月06日

25阅读

java中开关的定义,Java关键字有哪些

2026年09月06日

25阅读