编译时
编译时将代码翻译成机器能够看懂的代码,通过Java编译器(javac)翻译成jvm能识别的字节码文件(.class文件),可以检查出语法,关键字占用等错误,为了后面类加载做准备,不会出现分配内存的操作;
运行时:
将编译后储存在磁盘上的字节码文件(.class)通过在通过类加载器等一系列运行操作,这个过程发生的错误是无法在编译前知道的,是不可预知的,只有在运行后才能知道;
java中涉及到以上知识点的:
方法重载(编译时多态): 编译器能根据方法的参数来选择使用哪个方法;
方法重写(运行时多态):只有运行时才能知道具体是去加载哪个类;
异常:
- 编译时异常:能被编译器运行前检测出来的,需要加上try catch throw等语句来进行保护;
- 运行时异常:只能在程序运行的时候才会报出来,比较常见的就NullPointerException,ArrayIndexOutOfBoundsException等等;
Java文件被读取过程:
.java文件通过Java编译器翻译成.class字节码,能够直接被JVM识别然后运行,但是如果要在android的DVM上被识别,需要进一步被翻译为.dex文件