阅读Java反编译后的代码

~~对于一个优秀的JAVA工程师,应关注和研究底层的机制和具体计算机如何执行。所以,将编译后的字节码文件(.class)反编译成.java文件,阅读jvm执行的代码是很重要的研究方法

方法一:
0,widows+R,执行cmd,选择要编译的文件的目录

1,将写好的.java文件编译

2, 将编译成功后的.class文件反编译

如下实例:

javac Decompilation.java
javap -c Decompilation.class  >> a.txt

方法二:
通过反编译工具与插件 查看java *.class 文件源码
https://blog.csdn.net/androidolblog/article/details/46438679

3,查阅资料(字节码指令大全)来阅读反编译后的代码
https://www.cnblogs.com/longjee/p/8675771.html

如实例是我实验的一个小例子:
—>Java文件代码

public class TrieTest {
	public static void main(String[] args) {
		int i = 10;
		int n = i++%5;
		System.out.println(i +  " : " + n);
	}
}

—>反编译后的主要代码

public static void main(java.lang.String[]);
    Code:
       0: bipush        10		   	 	// 10 值带符号扩展成int值入栈
       2: istore_1			    		// 将栈顶int类型值保存到局部变量1(10)中
       3: iload_1			    		// 从局部变量1中装载int类型值入栈(栈顶10)
       4: iinc          1, 1		    // 将整数值constbyte加到indexbyte指定的int类型的局部变量(istore_1)
       7: iconst_5			    		// 5(int)值入栈
       8: irem				    		// 将栈顶两int类型数(10,5)取模,结果入栈
       9: istore_2		            	// 将栈顶int类型值保存到局部变量2(0)中
      10: getstatic     #2              // Field java/lang/System.out:Ljava/io/PrintStream;
      13: new           #3              // class java/lang/StringBuilder
      16: dup
      17: invokespecial #4         	    // Method java/lang/StringBuilder."":()V
      20: iload_1			    		// 从局部变量1(11)中装载int类型值入栈
      21: invokevirtual #5           	// Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
      24: ldc           #6             	// String  :
      26: invokevirtual #7          	// Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      29: iload_2			    		// 从局部变量2(0)中装载int类型值入栈
      30: invokevirtual #5                  // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
      33: invokevirtual #8                  // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      36: invokevirtual #9                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
      39: return
}

执行后结果
在这里插入图片描述

你可能感兴趣的:(阅读Java反编译后的代码)