从Java文件到字节码文件】的更多相关文章

本文涉及的javac编译器来自openjdk. javac的目录地址为:解压目录/langtools/src/share/classes/com/sun/tools/javac/ javac编译器将Java编译成为一个有效的字节码文件会经历4个步骤: 词法解析:将Java关键字排序,使得程序能有序运行. 语法解析:词法解析后的Token序列整合为一颗抽象的语法树. 语义解析:将抽象语法树扩展地更加完善. 字节码解析:将字节码解析成完整的类. 词法解析 词法解析是编译器执行的字节码编译的第一步.这…
Java代码到字节码——第一部分 原文地址 作者:James Bloom 译者:张坤 理解在Java虚拟机中Java代码如何别被编译成字节码并执行是非常重要的,因为这可以帮助你理解你的程序在运行时发生了什么.这种理解不仅能确保你对语言特性有逻辑上的认识而且做具体的讨论时可以理解在语言特性上的妥协和副作用. 这篇文章讲解了在Java虚拟机上Java代码是如何编译成字节码并执行的.想了解JVM内部架构和在字节码执行期间不同内存区域之间的差异可以查看我的上一篇文章 JVM 内部原理. 这篇文章共分为三…
理解Java代码是如何被编译为字节码并在Java虚拟机(JVM)上执行是非常重要的,这将帮助理解你的程序是如何执行的.这样的理解不仅仅能够让你在逻辑上更好的掌握语言特性,而且能够有机会理解在做出重要决定时所需的权衡以及相应的副作用. 这篇文章解释了Java代码是如何被编译为字节码并在JVM上执行的,如果想要理解JVM的内部结构和以及字节码在运行过程中占用的不同的内存区域,请看我之前的深入JVM一文. 这篇文章被分为了3个部分,每个部分又分为若干个章节.你可以单独的阅读任何一个章节,但是如果按顺序…
http://www.importnew.com/13107.html http://blog.csdn.net/dc_726/article/details/7944154/ http://www.importnew.com/1486.html…
另一个篇:获取 类 的 方法 和 属性(包括构造函数) 先贴上Java反射机制的概念: AVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法: 对于任意一个对象,都能够调用它的任意一个方法和属性: 这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. 这么一讲很强大有没有! 反射的机制的实现还有仰仗Class类,因为想要剖析一个类就必须先要获取到该类的字节码文件对象,而Class类用于表示.class文件(字节码) 而且从获取到剖析使用的都是Cla…
在上一篇OpenJDK源码研究笔记(七)–Java字节码文件(.class)的结构中,我们大致了解了Java字节码文件的结构. 本篇详细地介绍了如何读取.class文件的大部分细节. 1.构造文件  // 字节码文件User.class String userClass = "C:/User.class"; File file = new File(userClass); 2.构造输入流 FileInputStream fin = new FileInputStream(file);…
本篇文章的思维导图 一.JVM的简单介绍 1.1 JVM是什么? JVM (java virtual machine),java虚拟机,是一个虚构出来的计算机,但是有自己完善的硬件结构:处理器.堆栈.寄存器等.java虚拟机是用于执行字节码文件的. 1.2 JAVA为什么能跨平台? 首先我们可以问一个这样的问题,为什么 C 语言不能跨平台?如下图: C语言在不同平台上的对应的编译器会将其编译为不同的机器码文件,不同的机器码文件只能在本平台中运行. 而java文件的执行过程如图: java通过ja…
匿名函数: 匿名函数是不存储在程序文件中.但与数据类型是 function_handle 的变量相关的函数.匿名函数可以接受输入并返回输出,就像标准函数一样.但是,它们可能只包含一个可执行语句. 例如,创建用于计算平方数的匿名函数的句柄: sqr = @(x) x.^2; 向量化和预分配(提高程序执行速度): 向量化:要使得matlab更高速工作,把.m文件算法向量化,其他语言使用for循环,Matlab可用向量或矩阵运算. 例:原算法: x=0.01; : y(k)=log10(x); x=x…
在很多初学者刚刚接触eclipse的时候,写完一个代码文件.例如 Demo.java 通过run as a java application生成之后,会产生一个Demo.class. Demo.class 地址(D:Demo.class) 我们打开DOS命令,找到Demo.class. 以为已经时字节码文件,所以不需要javac Demo.java D: cd java Demo 系统会报错,找不到主函数main,不能运行此程序! 什么原因导致的嘞? 因为eclipse中会产生一个package…
Java代码 \\A.java public class A{} 1 2 1 2 javac A.java \\得到 A.class javap -v A.class 下面是javap工具帮我们生成的文本的字节码文件 Classfile /home/yao/test/javap/A.class Last modified Aug 30, 2016; size 176 bytes MD5 checksum f35fe1f44d02cd491e6561a30327ceb5 Compiled from…
在Sun公司提供的JDK中,就已经内置了Java字节码文件反编译工具javap.exe(位于JDK安装目录的bin文件夹下). 我们可以在dos窗口中使用javap来反汇编指定的Java字节码文件.在使用javap的相关dos命令之前,你必须确保已经将JDK安装目录\bin添加到环境变量path中. 接着,我们就可以使用javap来反编译指定的Java字节码文件了.在此之前,我们先通过javap的帮助命令javap -help查看javap相关指令的用法. C:\Users\winner_071…
最近在看OpenJDK源码的过程中,顺便看了Java编译器(javac)的源码. 为了理解javac的源码,需要先搞懂Java字节码文件(.class)的结构. 于是,我就认真看了下OpenJDK中Java字节码文件的相关源码,结合大学期间对JVM的研究,参考JVM规范第2版(英文原版),特意整理下. JVM规范中定义的类文件的结构 注:使用是类似于C语言的表示方法 u1: unsigned one-byte  无符号一个字节 u2: unsigned two-byte  无符号两个字节 u4:…
介绍 C/C++语言都直接编译成针对特定平台机器码.如果要跨平台,需要使用相应的编译器重新编译. Java源程序(.java)要先编译成与平台无关的字节码文件(.class),然后字节码文件再解释成机器码运行.解释是通过 Java虚拟机来执行的. 字节码文件不面向任何具体平台,只面向虚拟机. Java虚拟机是可运行Java字节码文件的虚拟计算机.不同平台的虚拟机是不同的,但它们都提供了相同的接口. Java语言具有一次编译,到处运行的特点.就是说编译后的.class可以跨平台运行,前提是该平台具…
本文要解决的问题:"键盘输入一段英语语句,将这段话写入content.txt中,然后输出这段话,并且统计语句中英文单词的数目以及各个单词出现的次数." 分析问题知,核心是文件读写和单词统计. 单词统计可以参考我以前的一篇文章:java源码--统计字符串中字符出现的次数,不过要注意的是以前这篇文章是统计字符,不用判断是否是单词,本问题中统计单词就要判断多少字符是一个单词,同时忽略大小写问题. 文件读写不是很难,方法基本是死的,不用考虑方法.代码解决问题的难点还是单词的统计,我的代码中用了…
1. 需要用javac,javap命令,所以先配下环境变量 2.配置环境变量 单击“计算机-属性-高级系统设置”,单击“环境变量”.在“系统变量”栏下单击“新建”,创建新的系统环境变量. 3.写需要用到的测试类 4.命令运行生成字节码文件(.class结尾的文件),或者工具run生成class文件 这个时候 bin下面就产生了class文件 5.命令查看字节码文件 然后查自己想要的内容就好了…
查看字节码文件: javap  -verbose  HellloWorld.class…
package downloadTest; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.Out…
最近实现录音功能,主要涉及到录音的上传和下载,以及转码问题.微信,QQ默认的的音频文件是amr格式的,而播放器却不识别amr格式的音频,必须尽行转码.amr文件分为两种,一种是通用的amr格式,这种文件可以用任意播放器打开播放.但是还有另外一种amr文件,这种文件的后缀虽然是amr,但其实其内部并不是真正的amr格式.有不对的地方有请各方大神批评指正,具体实现如下: 1.调用微信录音接口(开始录音,暂停录音,上传录音,) 具体接口请你参考 http://mp.weixin.qq.com/wiki…
前言 今天是五一假期第一天,按理应该是快乐玩耍的日子,但是作为一个北漂到京师的开发人员,实在难想出去那玩耍.好玩的地方比较远,近处又感觉没意思.于是乎,闲着写篇文章,总结下昨天写的程序吧. 昨天下午朋友跟我聊起,他说有个需求,需要把上G的txt文件读取写入到数据库.用普通的io结果自然是OOM了,所以果断用NIO技术.为了提高速度,自然还得用上多线程技术. 接下来就介绍一下实现思路以及相关的知识点. 内容 一.对文件分区 为了充分利用多线程读取,就需要把文件划分成多个区域,供每个线程读取.那么就…
我们在日常的电脑使用中,经常需要在当前目录或当期目录及其子目录中查找文件,并获取相应的文件路径名.在我们的自动化测试中,也经常需要确认文件在目录中是否成功生成或已存在,因而我写了一个小方法来实现. 获取文件在目录中的路径方法源码如下所示: /** * <strong>在目录中查找文件</strong><br> * <ul> * <li>若存在文件则返回文件路径,若不存在则返回空</li> * <li>若存在参数非法,则返回…
java io流(字符流) 文件打开 读取文件 关闭文件 //打开文件 //读取文件内容 //关闭文件 import java.io.*; public class Index{ public static void main(String[] args) throws Exception{ //打开文件 //字符流方式打开 //字符流每次按一个字符读取 FileReader wj = new FileReader("D:/java/kj/javanew/src/Index.java"…
此文源码主要为应用 Java 读取文本文件内容实例的源代码.若有不足之处,敬请大神指正,不胜感激! 第一种:文本文件写入,若文件存在则删除原文件,并重新创建文件.源代码如下所示: /** * @function 文本文件操作:写入数据 * * @author Aaron.ffp * @version V1.0.0: autoUISelenium main.java.aaron.java.tools FileUtils.java txtWrite, 2015-2-2 21:03:53 Exp $…
此文源码主要为应用 Java 读取文本文件内容实例的源代码.若有不足之处,敬请大神指正,不胜感激! 1.读取的文本文件内容以一维数组[LinkedList<String>]的形式返回,源代码如下所示: /** * @function 文本文件操作:读取数据 * * @author Aaron.ffp * @version V1.0.0: autoUISelenium main.java.aaron.java.tools FileUtils.java txtRead, 2015-2-2 21:0…
此文源码主要为应用 Java 创建文件的源代码.若有不足之处,敬请大神指正,不胜感激! 创建文件的源代码如下所示: /** * @function 文件操作:创建文件.若文件不存在,则直接创建文件:若文件存在且未被占用,则删除文件,并重新创建文件 * * @author Aaron.ffp * @version V1.0.0: autoUISelenium main.java.aaron.java.tools FileUtils.java createFile, 2015-2-2 21:03:2…
此文源码主要为应用 Java 创建文件目录的源码.若有不足之处,敬请大神指正,不胜感激! 创建文件夹源代码如下所示: /** * @function 文件操作:创建文件夹.若文件夹不存在,则级联创建文件夹:若存在则不创建. * * @author Aaron.ffp * @version V1.0.0: autoUISelenium main.java.aaron.java.tools FileUtils.java createPath, 2015-2-2 21:03:31 Exp $ * *…
JAVA多线程下载网络文件,开启多个线程,同时下载网络文件.   源码如下:(点击下载 MultiThreadDownload.java) import java.io.InputStream; import java.io.RandomAccessFile; import java.net.HttpURLConnection; import java.net.URL; /** * 说明: * 每一个线程下载的位置计算方式: * 开始位置: (线程id - 1) * 每一块大小 * 结束位置:…
11.3 I/O类使用 由于在IO操作中,需要使用的数据源有很多,作为一个IO技术的初学者,从读写文件开始学习IO技术是一个比较好的选择.因为文件是一种常见的数据源,而且读写文件也是程序员进行IO编程的一个基本能力.本章IO类的使用就从读写文件开始. 11.3.1 文件操作 文件(File)是最常见的数据源之一,在程序中经常需要将数据存储到文件中,例如图片文件.声音文件等数据文件,也经常需要根据需要从指定的文件中进行数据的读取.当然,在实际使用时,文件都包含一个的格式,这个格式需要程序员根据需要…
打开 Jar 文件向导 Jar 文件向导可用于将项目导出为可运行的 jar 包. 打开向导的步骤为: 在 Package Explorer 中选择你要导出的项目内容.如果你要导出项目中所有的类和资源,只需选择整个项目即可. 点击 File 菜单并选择 Export. 在输入框中输入"JAR" . 在选项中选择 JAR file 选项开启向导. 点击 Next 按钮 使用 Jar 文件向导 在 JAR File Specification(JAR 文件描述) 页面可进行以下操作: 输入…
转载自http://blog.csdn.net/mousebaby808/article/details/31788325 概述 诸如tomcat这样的服务器,在启动的时候会加载应用程序中lib目录下的jar文件以及classes目录下的class文件,另外像spring这类框架,也可以根据指定的路径扫描并加载指定的类文件,这个技术可以实现一个容器,容纳各类不同的子应用. Java类由于需要加载和编译字节码,动态加载class文件较为麻烦,不像C加载动态链接库只要一个文件名就可以搞定,但JDK仍…
JAR包是Java中所特有一种压缩文档,其实大家就可以把它理解为.zip包.当然也是有区别的,JAR包中有一个META-INF\MANIFEST.MF文件,当你找成JAR包时,它会自动生成.JAR包是由JDK安装目录\bin\jar.exe命令生成的,当我们安装好JDK,设置好path路径,就可以正常使用jar.exe命令,它会用lib\tool.jar工具包中的类.这些细节就不用管它了. 作为一个有点工作经验的码农,我们经常在玩新的项目的时候都会有自己的一套工具类,如果每次都用来自己将源码放入…