谈谈对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 }

 


 

转载于:https://www.cnblogs.com/bce1100/p/10489579.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值