java编译做了哪些事?

Javac编译器,主要做了如下的事情:
1、解析与填充符号表;    
2、注解处理器;    
3、语义分析与字节码生成:    
    3.1、标注检查    
    3.2、数据及控制流分析    
    3.3、解语法糖    
        3.3.1、泛型与类型擦除    
        3.3.2、自动装箱、拆箱与遍历循环    
        3.3.3、条件编译    
    3.4、字节码生成

时间: 2024-10-07 17:09:24

java编译做了哪些事?的相关文章

将子类对象引用赋值给超类对象 JAVA 编译时多态性

将子类对象引用赋值给超类对象 JAVA 编译时多态性(转) (2012-05-10 11:24:05) 转载▼ 标签: 杂谈 分类: 也无晴_soft 1.通过将子类对象引用赋值给超类对象引用变量来实现动态方法调用. DerivedC c2=new DerivedC(); BaseClass a1= c2; //BaseClass 基类,DerivedC是继承自BaseClass的子类 a1.play(); //play()在BaseClass,DerivedC中均有定义,即子类覆写了该方法 分

走出浮躁的泥沼:学会享受学习过程的乐趣 坚持做一件事,直到达到一个境界

http://www.nowamagic.net/librarys/veda/detail/2264学习是一辈子的事情,对于程序员来说更是如此,所以如果没有学会享受学习过程的乐趣,那么学习将会是你人生的一个重压. 以学习数据结构为例.大家都知道,对于程序员而言,数据结构是基础,是必须学会的课程.但是现在很多语言,细节都封装得很好,比如Java..Net.PHP,几乎都不需要你用到多少数据结构与算法的知识,以致于很多人觉得,我就不会数据结构,我还不一样好好工作吗?这就是浮躁的开始了. 的确,对大部

搭建java编译环境

一.java编译环境 1.准备工作: 下载 jdk-7u79-linux-x64.tar.gz 压缩包 解压 tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local/ 在/usr/local/ 下 ln -s jdk1.7.0_79/ java (方便更新软件,更新后只要重新软链接就好) 2.修改环境变量 vim /etc/profile source /etc/profile (刷新文件) echo $PATH 查看环境变量 [[email protec

sublime搭建Java编译平台及编码问题

Sublime自带Java编译功能,当时只能编译不能运行,我们做一下小小的修改就可以让sublime一步完成编译运行的功能,实现sublime搭建Java编译平台. 使用Ctrl + B 编译时,所编译的文件不能存放在含有中文的路径中. 第一步:  找到你机器上的jdk开发包,我的是在C:\Program Files\Java\jdk1.6.0_43\bin,新建一个名为  javacexec.bat  的批处理文件,文件内容如下: @ECHO OFF cd %~dp1 javac %~nx1

Java编译后产生class文件的命名规则

今天刚好有同学问了下Java编译后产生的.class文件名的问题,虽然一直都在使用Java做开发,但是之前对编译后产生的.class文件名的规范也基本没做了解过,也真的是忏愧啊!今天无论如何都要总结下.下面是本人今天做的实验 1.创建类ClassA,观察产生的.class文件.目的是测试没有任何继承.实现类以及内部类等情况下产生的.class文件以及命名规则 实验结果: 从下图可以看出,只产生了一个.class文件,文件名为类名.class 2.创建类ClassB,观察产生的.class文件.目

坚持做一件事,直到达到一个境界

学习是一辈子的事情,对于程序员来说更是如此,所以如果没有学会享受学习过程的乐趣,那么学习将会是你人生的一个重压. 以学习数据结构为例.大家都知道,对于程序员而言,数据结构是基础,是必须学会的课程.但是现在很多语言,细节都封装得很好,比如Java..Net.PHP,几乎都不需要你用到多少数据结构与算法的知识,以致于很多人觉得,我就不会数据结构,我还不一样好好工作吗?这就是浮躁的开始了. 的确,对大部分程序员来说,工作上很多时候不需要用到数据结构.但是你会发现,工作若干年后,你的技术水平会停滞不前,

做一些Spring AOP做过的事,封装 jdk动态代理成为一个黑盒子

  怎么使用eclise 抽取方法,请看  利用eclipse 抽取代码片段为方法   抽取完成之后,还需要 ① 将Collection.class换成  target.getClass(),target是Object的,可以来代理所有的对象 ② Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), new InvocationHander(){     invo

Java能做什么?都应用于哪些方面?

Java能做什么?都应用于哪些方面? Java自诞生至今已有20多年了,在编程语言界也可谓是常青树的般的存在.随着互联网的发展,技术的更新迭代,Java作为目前较流行的计算机编程语言之一,吸引了众的IT爱好者.那么,Java具体的应用领域都有哪些呢? 许多的Android应用都是Java程序员开发者开发.虽然Android运用了不同的JVM以及不同的封装方式,但是代码还是用Java语言所编写.相当一部分的手机中都支持JAVA游戏,这就使很多非编程人员都认识了JAVA.而现在有很多Java程序员成

Java编译期和运行期 & JVM

Java整个编译以及运行的过程相当繁琐,本文通过一个简单的程序来简单的说明整个流程. 首先两张图,描述编译和执行的过程: Java代码编译是由Java源码编译器来完成,流程图如下所示: Java字节码的执行是由JVM执行引擎来完成,流程图如下所示: 如下图,Java程序从源文件创建到程序运行要经过两大步骤:1.源文件由编译器编译成字节码(ByteCode)  2.字节码由java虚拟机解释运行.因为java程序既要编译同时也要经过JVM的解释运行,所以说Java被称为半解释语言( "semi-i