谈谈对java的理解
围绕以下特性展开来谈:
-
平台无关性(一次编译到处运行compile once,run anywhere
-
GC(垃圾回收机制
-
语言特性(泛型、反射、lambda表达式……
-
面向对象(封装、继承、多态
-
类库(Java自带的集合、并发库、网络库、IO\NIO
-
异常处理
一次编译到处运行是如何实现的
Java源码首先被编译成字节码,再由不同的JVM进行解析Java语言在不同的平台上运行时不需要进行重新的编译,Java虚拟机在执行字节码时,把字节码转换成具体平台上的机器指令。
查看字节码:javac编译后,javap -c查看
例:
1 public class Test{2 public static void main(String [] args){3 int i = 4;4 i = i++;5 int j = 5;6 j = ++j;7 }8 }
1 Compiled from "Test.java" 2 public class Test { 3 public Test(); 4 Code: 5 0: aload_0 6 1: invokespecial #1 // Method java/lang/Object."":()V 7 4: return 8 9 public static void main(java.lang.String[]);10 Code:11 0: iconst_4 //把4放到栈顶12 1: istore_1 //把栈顶的值放到局部变量1中(即4赋给i)13 2: iload_1 //把局部变量1的值放到栈顶,此时栈顶值为414 3: iinc 1, 1 //局部变量1(即i)增加1,但不会使栈发生变化,此时i变成515 6: istore_1 //把栈顶的值放到局部变量1中,即i这时由5变成416 7: iconst_517 8: istore_218 9: iinc 2, 1 //把局部变量2(即j)加1值变为6,但是栈顶中仍是5没有变19 12: iload_2 //把局部变量2的值放到栈顶,此时栈顶值为620 13: istore_2 //把栈顶的值放到局部变量2中,即j由5变621 14: return22 }