總網頁瀏覽量

2016年2月14日 星期日

ByteCod test ByteCodetest001

JAVA 是一個 type-safe language, 他的 field, local Variable, 和methods都會除存,
這稱呼為 Signatures.

而字串則會儲存在 constant pool中.

以下範例兩行敘述跟maia方法的回傳:

ByteCodetest001.java

class ByteCodetest001{
    public static void main(String args[]){
       
    }
}

用jd-gui-windows-1.4.0 的 Java Decompiler做反組譯:
ByteCodetest001.class

class ByteCodetest001
{
  public static void main(String[] paramArrayOfString) {}
}


用Sandmark 的 View JarFile 功能來看 ByteCodetest001.class ,
他的 Signatures, 也就是位於 [View] 中的 Method Sort 所顯示的像目,
會看到

ByteCode001
- <init>()V
- main([Ljava/lang/String;)V

Classes are internally represented by strings like "java/lang/string"
由文中敘述他將此稱為 Class 類,
兩行敘述比對一下

class ByteCodetest001{                        | <init>()V
public static void main(String args[]){     | main([Ljava/lang/String;)V


main([Ljava/lang/String;)V

main 表示此敘述為 main method
main([ 表示這是一個一為陣列 Arrays are denoted with a [ at the start of the signature.
main([L 表示 fully-qualified-class
main([Ljava/lang/String;) 我看來是main mothed 的輸入參數是一個string,
                                       而String 是一個位於lang類別抵下的參數, 就全不顯示上來了.

main([Ljava/lang/String;)V我看來是 is a void method on java.lang.Object.





 

javap ByteCodetest001 查看 bytecode

javap ByteCodetest001

Compiled from "ByteCodetest001.java"
class ByteCodetest001 {
  ByteCodetest001();
  public static void main(java.lang.String[]);
}

存成 bc檔
 -c ByteCodetest001 > ByteCodetest001.bc

Compiled from "ByteCodetest001.java"
class ByteCodetest001 {
  ByteCodetest001();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  public static void main(java.lang.String[]);
    Code:
       0: return
}



沒有留言:

張貼留言