标签:后缀 字符 代码 包括 类构造 utf-8 运行 语法 签名
什么是“JVM”的无关性
Java具有平台无关性,也就是任何操作系统都能够运行Java代码,之所以能够实现这一点,是因为Java运行在虚拟机上,不同的操作系统都有各自的Java虚拟机,从而实现一次编译,到处运行。
JVM不仅具有平台无关性,还具有语言无关性。平台无关性是指不同的操作系统都有各自的JVM来运行Java代码,但语言无关性是指Java虚拟机能运行除了Java之外的代码,只是对能运行的语言有严格的要求。
Java源代码首先需要使用Javac编译器编译程class文件,然后启动JVM执行class文件,从而程序开始执行。言外之意就是JVM只认识class文件,它不管是何种语言生成了class文件,只要class文件符合JVM的规范就行。因此目前已经有Scala、JRuby、Jython等语言能够在JVM上运行。它们有各自的语法规则,不过它们的编译器都能将各自的源码编译成符合JVM规范的class文件,从而能够借助JVM运行它们。
Class文件结构:
class文件是二进制文件,它的内容具有严格的规范,文件中没有空格,全部都是连续的0/1,class文件中的全部内容被分为两部分内容:无符号数(它表示class文件中的值,这些值没有任何类型,但有不同的长度)和表(class文件中的数据要么是单个值,要么是二维表。)。
class文件的组织结构:
a) 通常存放两种类型的常量:字面值常量和符号引用。
b) 常量池的特点:
1) 常量池的长度不固定
2) 常量池中的常量由二维表来表示
3) 常量池是class文件的资源仓库
4) 常量池是与本class文中其他部分联系最紧密的一部分
5) 常量池是class文件中占空间最大的一部分
c) 为什么Java中定义的类名、变量名必须小于64K:类、接口、变量等名字都属于符号引用,它们都存储在常量池中,这种类型的常量使用u2存储字符串的长度。由于2字节最多能表示65535个数,因此这些名字的最大长度最多只能是64K。
d) 什么是UTF-8编码?什么是缩略UTF-8编码:前者每个字符使用3个字节表示,而后者把128个ASKII码用1字节表示,某些字符用2字节表示,某些字符用3字节表示。
a) 如果class文件没有重写父类的方法,那么本class文件的方法表集合中不会出现父类/父接口的方法表
b) 本class文件的方法表中可能出现程序员没有定义的方法,因为在编译类的时候编译器会在class文件的方法表集合中加入类构造器和实例构造器。
c) 重载一个方法需要有相同的简单名称和不同的特征签名。JVM的特征签名和Java的特征签名不一样:Java的特征签名(方法参数在常量池中的字段符号引用的集合);JVM的特征签名(方法参数+返回值)
标签:后缀 字符 代码 包括 类构造 utf-8 运行 语法 签名
原文地址:https://www.cnblogs.com/BaoZiY/p/10632248.html