1. 昨天發現一個沒有引數的實體方法的args_size=1,而靜態方法并沒有多出來的args_size,在想是不是實體方法多出來的其實是this屬性?后來查書(深入理解JVM 6.3.7章節)發現確實如此,那么this是不是就是一個簡單的區域變數,而不是我以前理解的一個特別高大上的特殊存在?
void m();
descriptor: ()V
flags:
Code:
stack=0, locals=1, args_size=1
2. 發現this之后我又在想super是不是也有這個待遇?可是簡單的實驗之后發現有這個待遇的只有this一個:
class Father {
void m(){}
}
class Son extends Father{
void m2(){}
}class jvm.Son extends jvm.Father那么super是什么(實體常量還是區域變數或者其他)?
minor version: 0
major version: 52
flags: ACC_SUPER
Constant pool:
#1 = Methodref #3.#14 // jvm/Father."<init>":()V
#2 = Class #15 // jvm/Son
#3 = Class #16 // jvm/Father
#4 = Utf8 <init>
#5 = Utf8 ()V
#6 = Utf8 Code
#7 = Utf8 LineNumberTable
#8 = Utf8 LocalVariableTable
#9 = Utf8 this
#10 = Utf8 Ljvm/Son;
#11 = Utf8 m2
#12 = Utf8 SourceFile
#13 = Utf8 Demo2.java
#14 = NameAndType #4:#5 // "<init>":()V
#15 = Utf8 jvm/Son
#16 = Utf8 jvm/Father
{
jvm.Son();
descriptor: ()V
flags:
Code:
stack=1, locals=1, args_size=1
0: aload_0
1: invokespecial #1 // Method jvm/Father."<init>":()V
4: return
LineNumberTable:
line 13: 0
LocalVariableTable:
Start Length Slot Name Signature
0 5 0 this Ljvm/Son;
void m2();
descriptor: ()V
flags:
Code:
stack=0, locals=1, args_size=1
0: return
LineNumberTable:
line 14: 0
LocalVariableTable:
Start Length Slot Name Signature
0 1 0 this Ljvm/Son;
}
uj5u.com熱心網友回復:
this表示當前實體類,super表示父類,跟你說的區域變數,常量沒關系,它們都是關鍵詞。
uj5u.com熱心網友回復:
super表示當前類的父類,super()表示當前類父類的構造方法uj5u.com熱心網友回復:
1 this是個特殊指標(指向當前記憶體區域,它可以指向物件本身,還可以指向方法--構造方法),呼叫成員方法是會把this作為引數傳入成員方法,非靜態代碼塊也一樣可以使用this,內部類也可以使用外部類的this,所以它并不是你所看到的那樣,就是個區域變數。2 super同上,只是super限制為指向父類記憶體區域的指標
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/250835.html
標籤:Java SE
上一篇:2021-01-19:mysql中,一張表里有3億資料,未分表,其中一個欄位是企業型別,企業型別是一般企業和個體戶,個體戶的資料量差不多占50%,根據條件把個體
