java文件,class文件与dex文件的转化。(详细教程)
这张图是一个整体框架
.java文件
的Java的源文件
.class文件
Java的字节码文件,是一种能够被的Java虚拟机(JVM:Java的虚拟机)识别,加载并且执行的文件格式。
.class文件生成
在java的中是由的.java文件转化而来的(也可由蟒,C ++等通过编译转化而来),下面举例Hello.java转化为Hello.class的两种方法:
•生成时不指定JDK的版本,则可以执行javac Hello.java
•通常为了兼容低版本,例如Android的系统,我们一般指定比较低版本的JDK,否则无法运行,如要指定1.6版本的JDK,命令如下:
.class文件执行命令
如要执行hello.class,命令为:java hello,注意不加.class后缀,
类文件的作用
类文件的作用是记录一个类文件的所有信息。
例如记住了当前类的引用这一点,父类超等等的的.class文件记录的信息往往比Java的的文件多。
类文件的结构
•8位字节的二进制流文件
•各个数据紧密排列,无间隙,减少了文件体积,加快加载速度
•每个类或者接口单独占据一个类文件,每个类单独管理,没有交叉
类文件的弊端
•内存占用大,不适合于移动端
•堆栈的加载模式导致加载速度慢
•文件IO操作多,类查找慢
.DEX文件
Dalvik字节码文件,是一种能够被Dalvik虚拟机(DVM:Dalvik Virtual Machine)或者Art虚拟机执行并且加载的文件格式。
DEX文件的生成
是由的的.class文件转化而来的,先生成的的.class文件(注意执行低版本的JDK版本,否则手机无法运行),然后需要dx.bat工具,执行:
DEX文件执行
•第一步:打开Android Vitual Device Manager
•第二步:将.DEX文件放进安卓模拟器环境
•adb push Hello.dex / data / local
•第三步:执行.DEX文件
adb shell dalvikvm -cp /data/local/Hello.dex Hello(注意这里最后的java原文件名HelloXidian要与文件中类名同名,否则在编译时不会出错,到了这里才会出错)
此时命令输出:你好
DEX文件的作用
DEX文件的作用是记录整个工程(通常是一个的Android的工程)的所有类文件的信息。
类文件与DEX文件的比较
本质上都是一样的,都是二进制流文件格式,DEX文件是从类文件演变而来的
类文件存在冗余信息,DEX文件则去掉了冗余,并且整合了整个工程的类信息。