2015年5月12日 星期二

關於 Java 反編譯

command  line :
  • javap -private {class name}

example :   javap -private Learn_2_1.class



使用Intellij IDEA 14 ,開發scala (未使用sbt),IDE會將scala轉成 .class檔,會放置out資料夾中,此時就可使用  javap -private {class name} 來查看scala 如何將 scala轉成 java程式碼。



另外在反編譯上有個好用的JAD(Java Decompiler)  一個小咖啡杯,只要將要反編譯的拖拉過去就可以看到結果啦。


JAD:
  • wiki  :   http://en.wikipedia.org/wiki/JAD_(JAva_Decompiler)
  • tools  :   http://jd.benow.ca/
  • tools  :   http://www.brouhaha.com/~eric/software/mocha/



實際範例:

scala  的 Class

package learn2

/** * Created by ocean on 2015/5/12. *///scala calass 參數會直接變成 類別的變數class Learn_2_1 (val year : Int){

  private var milesDriven : Int = 0
  def miles() = milesDriven
  def drive(distance:Int): Unit ={
    milesDriven += Math.abs(distance)
  }
}


//在終端機中使用 javap 命令的結果

 javap -private Learn_2_1.class

Compiled from "Learn_2_1.scala"
public class learn2.Learn_2_1 {
  private final int year;
  private int milesDriven;
  public int year();
  private int milesDriven();
  private void milesDriven_$eq(int);
  public int miles();
  public void drive(int);
  public learn2.Learn_2_1(int);
}

沒有留言:

張貼留言