java运行class文件
很多同学在进行编程学习时缺乏系统学习的资料。本页面基于java运行class文件内容,从基础理论到综合实战,通过实用的知识类文章,标准的编程教程,丰富的视频课程,为您在java运行class文件相关知识领域提供全面立体的资料补充。同时还包含 j2ee是什么、jar格式、java 的知识内容,欢迎查阅!
java运行class文件相关知识
-
(六)-class文件结构1 什么是JVM的“无关性”?Java具有平台无关性,也就是任何操作系统都能运行Java代码.之所以能实现这一点,是因为Java运行在虚拟机之上,不同的操作系统都拥有各自的Java虚拟机,因此Java能实现"一次编写,处处运行".而JVM不仅具有平台无关性,还具有语言无关性.平台无关性是指不同操作系统都有各自的JVM语言无关性是指Java虚拟机能运行除Java以外的代码!这听起来非常惊人,但JVM对能运行的语言是有严格要求的.首先来了解下Java代码的运行过程.Java源代码首先需要使用Javac编译器编译成class文件,然后启动JVM执行class文件,从而程序开始运行.也就是JVM只认识class文件,它并不管何种语言生成了class文件,只要class文件符合JVM的规范就能运行.因此目前已经有Scala、JRuby、Jython等语言能够在JVM上运行.它们有各自的语法规则,不过它们的编译器都能将各自的源码编译成符合JVM规范的class文件,从而能够借助JVM运行它们.这里写
-
【JVM】深入解析class类文件众所周知,我们在运行java代码时,首先java文件会被编译成class文件,然后将class文件装载到java虚拟机中。那么这个class文件到底是什么呢,今天我们就来分析一下。首先编写一个测试类Test,内容很简单,就是输出“hello,world”Test类java文件以及编译生成的class文件使用WinHex工具打开这个Test.class文件,会发现class文件内容是这样的:class文件内容的一部分观察这些数据,不难发现,class文件是一组以8位字节为基本单位的二进制流,各个数据项目严格地按顺序排列在一起,中间没有空隙。那么图中这些16进制数据代表什么含义呢?1.每个class文件开头的4个字节称为“魔数”,即图中的“CA FE BA BE”,(一个16进制数代表4位,两个就是8位,刚好是一个字节),这个魔数的作用就是:确定这个文件是否是一个能被JVM接受的class文件。2.紧接着魔数的4个字节是Class文件的版本号,其中5、6两个字节是次版本号(0x0000),7和8两个字节是主版本
-
为什么给Java代码加个空行,class文件就翻脸不认人了?public class HelloWorld { public static void main(String[] args) { System.out.println("love xjjdog"); }}为了写出这几行优美的代码,主要是为了让它输出优美动听的乐符,我下了一番功夫。你不要觉得简单,我把它打印出来给普通的保洁阿姨去看,阿姨竟然连xjjdog都认不出来。别说代码了,中英文混血,就秒杀一大堆高干分子。想说爱我就那么难么?怎么这么多的废话呢?这次探讨的主要问题是,给Java源文件加个空行之后,它生成的字节码,会有变化么?1、翻脸不认人Java号称一次编译到处运行,大概就是class文件的功劳。不同的Java版本编译之后的class文件那是肯定不一样的,因为
-
深入JVM:(七)Class文件结构代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。Java虚拟机规范要求在Class文件中使用许多强制性的语法和结构化约束,但任一门功能性语言都可以表示为一个能被Java虚拟机所接受的有效的Class文件。作为一个通用的、机器无关的执行平台,任何其他语言的实现者都可以将Java虚拟机作为语言的产品交付媒介。使用Java编译器可以把Java代码编译为存储字节码的Class文件,使用JRuby等其他语言的编译器一样可以把程序代码编译成Class文件,虚拟机并不关心Class的来源是何种语言。image.pngJava语言中的各种变量、关键字和运算符号的语义最终都是由多条字节码命令组合而成的,因此字节码命令所能提供的语义描述能力肯定会比Java语言本身更加强大。因此,有一些Java语言本身无法有效支持的语言特性不代表字节码本身无法有效支持,这也为其他语言实现一些有别于Java的语言特性提供了基础。Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧
java运行class文件相关课程
-
Android9.0动态运行时权限源码分析及封装改造 透过Android9.0运行时权限检测流程及源码分析Google在安全检测上的设计,在源码基础上利用AOP手动封装属于自己的框架,以及AbstractProcessor调试方式
讲师:LovelyChubby 中级 2753人正在学习
java运行class文件相关教程
- 3. 运行 Java 程序 现在,我们有了一个包含 main 方法的 Java 类了,我们可以在main方法中添加一句打印语句。如果要运行这个 Java 程序,我们可以通过点击工具栏中的绿色运行按钮。如果是第一次运行,我们可以选择点击绿色运行按钮旁边的倒三角选项,在弹出的菜单中选择我们 Run As,接着选择我们要运行的类型,如下图所示:此时,Eclipse 会检查项目中哪些文件没有保存,如果有没有保存的文件,将会弹出窗口询问是否保存,如下图所示:选择 OK 后,我们的程序将会运行,如下图所示:另一种常用的运行程序的方式是通过鼠标右键点击 Java 类中的空白处,在弹出的窗口中选择 Run As,如下图所示:
- 3. Class 文件结构 Class 文件是一组以(8位bit的)byte 字节为基础单位的二进制流。如下图所示 Class 文件的字节码示意图:上图中被绿色框圈起来的则为标准的 Class 文件的样子。左侧为软件本身提供的辅助信息,记录当前行前面总共有多少个 byte (或者说多少个 u1 ),用于快速定位数据(通过数据偏移量的方式。右侧为直接以编辑器打开 Class 文件的样子,显示为乱码。Tips:使用普通的编辑器打开 Class 文件我们会看到乱码,如果想要像上图一样观察 Class 文件的话,需要下载专门的编辑器。WinHex 就具备这个功能,有兴趣的同学可以安装 WinHex 并使用。
- 4. 运行时常量池 我们先来回顾下Class 文件结构中的常量池的相关知识。Class 文件中的常量池:在 Class 文件结构中,最头的 4 个字节用于存储 Megic Number,用于确定一个文件是否能被 JVM 接受,再接着 4 个字节用于存储版本号,前 2 个字节存储次版本号,后 2 个存储主版本号,再接着是用于存放常量的常量池,由于常量的数量是不固定的,所以常量池的入口放置一个 u2 类型的数据 (constant_pool_count) 存储常量池容量计数值。常量池主要用于存放两大类常量:字面量(Literal)和符号引用量(Symbolic References)。更加具体的知识,同学们可以翻看之前相关的小节内容。运行时常量池:我们回到正题,来看下运行时常量池。Tips:其实 Class 文件中的常量池与运行时常量池的关系非常容易理解,Class 文件中的常量池用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后进入方法区的运行时常量池中存放。简单总结来说,编译器使用 Class 文件中的常量池,运行期使用运行时常量池。运行时常量池相对于 Class 文件常量池的另外一个重要特征是具备动态性,Java 语言并不要求常量一定只有编译期才能产生,也就是并非预置入 Class 文件中常量池的内容才能进入方法区运行时常量池,运行期间也可能将新的常量放入池中,这种特性被开发人员利用比较多的就是 String 类的 intern() 方法。
- 1.1 Java 中的编译 在 Java 中,程序不是直接被编译为可执行文件,而是被编译为字节码文件, JVM(Java虚拟机)在运行时执行字节码文件。当我们使用 javac 编译器时,Java 源代码文件被编译为字节码文件,字节码文件以扩展名 .class 的形式保存在磁盘上。当程序运行时,字节码文件将被转换为机器代码,并在内存中执行。总的来说,Java 源代码需要被“转换”两次才能被计算机执行:Java 源代码被编译为字节码:由 javac 前端编译器完成;字节码被编译为机器码:由 JVM 的执行引擎完成。下图描述了一个Java程序从编写到编译,再到执行的步骤:
- 4.1 Class 类和 class 文件的关系 java.lang.Class 类用于表示一个类的字节码(.class)文件。
- 2. Class文件数据类型 根据 Java 虚拟机规范的规定,Class 文件格式采用一种类似于 C 语言结构体的伪结构来存储数据,这种伪结构中只有两种数据类型:无符号数和表。无符号数:无符号数属于基本的数据类型,以 u1、u2、u4、u8 来分别代表 1 个字节、2 个字节、4 个字节和 8 个字节;无符号数可以用来描述数字、索引引用、数量值或者按照 UTF-8 编码构成的字符串值;表:表是由多个无符号数或者其他表作为数据项构成的复合数据类型,所有表都习惯性地以“info”结尾。表用于描述有层次关系的复合结构的数据,整个 Class 文件本质上就是一张表。Tips:无符号数和表这两种类型的数据,初次来看非常的抽象,从概念层面来看似乎很难理解。我们无需着急, 本节所讲述的魔数,次版本号,主版本号以及常量池计数器皆为无符号数类型,而常量池为表类型,讲解这些结构时,我会为大家提供示意图,使学习者从感官上看到这两种数据类型,从而彻底理解这两种数据类型。
java运行class文件相关搜索
-
j2ee
j2ee是什么
jar格式
java
java api
java applet
java c
java jdk
java list
java map
java script
java se
java socket
java swing
java switch
java web
java xml
java 程序设计
java 多线程
java 环境变量