Java编译时与运行时很重要的概念,但是一直没有明晰,这次专门博客写明白概念.
基础概念
编译时
编译时顾名思义就是正在编译的时候.那啥叫编译呢?就是编译器帮你把源代码翻译成机器能识别的代码.(当然只是一般意义上这么说,实际上可能只是翻译成某个中间状态的语言.比如Java只有JVM识别的字节码,.另外还有啥链接器.汇编器.为了了便于理解我们可以统称为编译器)
那编译时就是简单的作一些翻译工作,比如检查老兄你有没有粗心写错啥关键字了啊.有啥词法分析,语法分析之类的过程.就像个老师检查学生的作文中有没有错别字和病句一样.如果发现啥错误编译器就告诉你.所以有时一些人说编译时还分配内存啥的肯定是错误的说法.
运行时
所谓运行时就是代码跑起来了.被装载到内存中去了.(你的代码保存在磁盘上没装入内存之前是个死家伙.只有跑到内存中才变成活的).而运行时类型检查就与前面讲的编译时类型检查(或者静态类型检查)不一样.不是简单的扫描代码.而是在内存中做些操作,做些判断.(这样很多编译时无法发现的错误,在运行就可以发现报错了,最好还是写的的时候就避免这个逻辑错误就好了)
举列子
int arr[] = {1,2,3};
int result = arr[4];
System.out.println(result);
Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 4
上面的代码你一瞧你知道是错误的代码,数组越界了.但用编译器没有报错,run后才出现了ArrayIndexOutOfBoundsException.可见编译器其实还是挺笨的,还没你脑瓜子那么聪明啊,于是你想虽然编译器笨了点,但运行起来时发现了错误也还不算太坏.
面试题
理解这几个概念可以更好地帮助你去了解一些基本的原理。下面是初学者晋级中级水平需要知道的一些问题。
Q.下面的代码片段中&#