谈谈对java的理解

谈谈对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."<init>":()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的值放到栈顶,此时栈顶值为4
14        3: iinc          1, 1    //局部变量1(即i)增加1,但不会使栈发生变化,此时i变成5
15        6: istore_1              //把栈顶的值放到局部变量1中,即i这时由5变成4
16        7: iconst_5
17        8: istore_2
18        9: iinc          2, 1    //把局部变量2(即j)加1值变为6,但是栈顶中仍是5没有变
19       12: iload_2               //把局部变量2的值放到栈顶,此时栈顶值为6
20       13: istore_2              //把栈顶的值放到局部变量2中,即j由5变6
21       14: return
22 }

 


 

posted @ 2019-03-07 14:46  bce1100  阅读(355)  评论(0编辑  收藏  举报