java运行时跟编译时的区别,欢迎大家指正
个人博客地址:https://blog.csdn.net/qq_41907991
关于java运行时及编译时期的区别:
首先我们要了解编译以及运行的概念:
编译就是指,编译器帮你把源码翻译成机器能识别的字节码,编译时主要做的事情时检查语法以及优化代码
运行就是指,代码被加载到内存中,并开始跑起来
从以下代码开始说明,欢迎大家指正
public class Test{
static final int a=10;
static final int b=20;
static int c=10;
static int d=20;
public static void main(String[] args){
int num1=a*b; // 第一行
int num2=c*d; //第二行
}
}
可以思考下,第一行跟第二行在编译时期有什么区别?
java编译时会做一些优化操作。第一行,因为是两个常量做运算,那么他们的结果就是确定的,即num1的值是确定的。
所以在编译时,编译器就会直接算出num1的值。第二行则不会,java在运行时期才为变量分配内存空间。
所以反编译后可以得到如下代码:
public static void main (String [] args){
int num1=200;
int num2=c*d;
}
由此,可以证码以上结论。
泛型,重写,重载分别时在运行时还是在编译时期执行?
1.我们知道,泛型的类型检测发生在编译时期,这也正是泛型的好处之一,可以提前暴露问题,而不是等到运行时出现ClassCastException。另外,在检测后编译器会把它重写成实际的对象类型(非泛型类型),这样就可以被JVM执行了,这个过程被称为泛型的擦除。
泛型的擦除关键在于从泛型类型中清楚泛型参数的相关信息,再在必要时添加类型转换和类型检查的方法(例如调用某个泛型方法时,就会执行类型检测)。
泛型的擦除可以简单理解为,将泛型类型java代码转换成为普通代码。泛型擦除的主要过程如下:
1).将所有泛型参数用最左边界(最顶级的父类型)的的类型替换
2).移除所有类型参数
2.方法的重载,重载时在编译时期执行,因为在编译时期如果发生了方法的重载,那么在编译时必须明确具体方法是哪一个
3.方法的重写,重写发生在运行时期。编译时期只会检测父类中是否存在重写的方法,但是并不能明确具体子类的方法。只有在运行时,才知道父子类中到底哪个方法被调用了。这个也被称为运行时多态的体现
java运行时跟编译时的区别,欢迎大家指正的更多相关文章
- Java 泛型优点之编译时类型检查
Java 泛型优点之编译时类型检查 使用泛型代码要比非泛型代码更有优势,下面是 Java 官方教程对泛型其中一个优点的介绍: "Stronger type checks at compile ...
- java如何在eclipse编译时自动生成代码
用eclipse写java代码,自动编译时,如何能够触发一个动作,这个动作是生成本项目的代码,并且编译完成后,自动生成的代码也编译好了, java编辑器中就可以做到对新生成的代码的自动提示? 不生成代 ...
- 运行时异常&编译时异常
/* 异常体系: --------| Throwable 所有错误或者异常的父类 --------------| Error(错误) --------------| Exception(异常) 异常一 ...
- java运行代码连接mysql时提示:找不到类错误
使用IntelliJ IDEA Community Edition进行代码编写.. 使用一下代码连接mysql时出现了:java.lang.ClassNotFoundException: com.my ...
- 正确理解java编译时,运行时以及构建时这三个概念
Java中的许多对象(一般都是具有父子类关系的父类对象)在运行时都会出现两种类型:编译时类型和运行时类型,例如:Person person = new Student();这行代码将会生成一个pers ...
- 《Effective C#》读书笔记-1.C# 语言习惯-2.使用运行时常量(readonly)而不是编译时常量(const)
概念 编译时 编译时顾名思义就是正在编译的时候.那啥叫编译呢?就是编译器帮你把源代码翻译成机器能识别的代码.(当然只是一般意义上这么说,实际上可能只是翻译成某个中间状态的语言.比如Java只有JVM识 ...
- 代码编译时JDK版本和运行时JDK版本不一致启动项目报错
java编译: java编译就是.java文件变成.class文件的过程,这个过程一般在我们常用的编译器中进行,例如Ecliplse和IDEA等:下面以IDEA举例: 执行上述编译使用的JDK版本就是 ...
- 实验 1 Java 运行环境的安装、配置与运行
一.实验目的 1. 掌握下载 Java SDK 软件包. 2. 掌握设置 Java 程序运行环境的方法. 3. 掌握编写与运行 Java 程序的方法. 4. 了解 Ja ...
- Java之运行时异常与编译时异常区别
Java中用2种方法处理异常: 1.在发生异常的地方直接处理: 2.将异常抛给调用者,让调用者处理. Java异常可分为3种: (1)编译时异常:Java.lang.Exception (2)运行期异 ...
随机推荐
- Math.max.apply()用法
apply的一些其他巧妙用法 Math.max.apply( null, [12,23,34,45] ); //细心的人可能已经察觉到,在我调用apply方法的时候, // 第一个参数是对象(this ...
- C语言小练习之学生信息管理系统
C语言小练习之学生信息管理系统 main.c文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 2 ...
- stand up meeting 12/28/2015
part 组员 今日工作 工作耗时/h 明日计划 工作耗时/h UI 冯晓云 解决生词本显示[阅读页面]的滑动条和PDF的滑动条冲突 ...
- jdbctemplate打印sql
在logback.xml里加入如下配置即可: <include resource="org/springframework/boot/logging/logback/base.xml& ...
- HTML+CSS教程(二)frameset框架和iframe内嵌
一.框架 (frameset)1.用<frameset></frameset>代替了<body></body>2.rows设置行的占页面的百分比:col ...
- Java 多线程 --死锁及解决方案
在java 多线程中 过多的同步造成相互不释放资源 从而相互等待,造成死锁线现象,一般发生于同步中持有多个对象锁 如以下代码: public class DeadLock { public stati ...
- webug3.0靶场渗透基础Day_2(完)
第八关: 管理员每天晚上十点上线 这题我没看懂什么意思,网上搜索到就是用bp生成一个poc让管理员点击,最简单的CSRF,这里就不多讲了,网上的教程很多. 第九关: 能不能从我到百度那边去? 构造下面 ...
- libeay32.dll 1.0.2j crash
https://github.com/BOINC/boinc/issues/2470 他们认为是CPU不同造成的 另外一个可能的原因 Changes between 1.0.2j and 1.0.2k ...
- Node 接入阿里云实现短信验证码
本文介绍在案例云开通短信服务的流程以及在Node项目中使用的方法. 一.开通阿里云短信服务 登陆阿里云,然后进入 https://dysms.console.aliyun.com/dysms.htm ...
- 第八章服务器raid及配置实战
版本 特点 磁盘个数 可用空间 故障磁盘数 应用环境 RAID0 读写速度快,数据容易丢失 两个 全部 一块 测试,临时性 RAID1 读写速度慢,数据可靠 至少两个,可以2的倍数 总容量的一半 ...