這稱呼為 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
}
沒有留言:
張貼留言