在使用IDEA时,我们有时候可以查看一下,我们具体的代码字节指令是啥,比如:泛型、装箱拆箱等存在一些隐式操作的时候,可以方便的通过IDEA来来查看。
1、IDEA配置
?Preferences --> Tools --> External Tools (如下图)
2、添加自定义的Tools
Name:自定义名称(show byte codes)
Program:?/Library/Java/JavaVirtualMachines/jdk1.8.0_271.jdk/Contents/Home/bin/javap (主要就是使用javap指令)
Arguments:?-c -l $FileClass$ (配置使用的参数)
Working Directory:?$OutputPath$ (输出到哪里)
?3、配置好了如何使用
此时控制台就有了我们看到的字节指令了。
4、案例(装箱拆箱)
package com.wzp.java_type;
public class BaseTypeTest {
public static void main(String[] args){
Integer i = 1;
int i1 = new Integer(128);
}
}
?
/Library/Java/JavaVirtualMachines/jdk1.8.0_271.jdk/Contents/Home/bin/javap -c -l com.wzp.java_type.BaseTypeTest
Compiled from "BaseTypeTest.java"
public class com.wzp.java_type.BaseTypeTest {
public com.wzp.java_type.BaseTypeTest();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
LineNumberTable:
line 3: 0
LocalVariableTable:
Start Length Slot Name Signature
0 5 0 this Lcom/wzp/java_type/BaseTypeTest;
public static void main(java.lang.String[]);
Code:
0: iconst_1
1: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer; (这就是装箱过程,调用了Integer.valueOf方法来进行封装成Integer)
4: astore_1
5: new #3 // class java/lang/Integer
8: dup
9: sipush 128
12: invokespecial #4 // Method java/lang/Integer."<init>":(I)V
15: invokevirtual #5 // Method java/lang/Integer.intValue:()I (这就是拆箱的过程调用了:intValue将Integer类型转成int)
18: istore_2
19: return
LineNumberTable:
line 6: 0
line 7: 5
line 8: 19
LocalVariableTable:
Start Length Slot Name Signature
0 20 0 args [Ljava/lang/String;
5 15 1 i Ljava/lang/Integer;
19 1 2 i1 I
}
Process finished with exit code 0
??
|