導航:首頁 > 知識科普 > 類和方法怎麼看哪個調用哪個

類和方法怎麼看哪個調用哪個

發布時間:2022-07-31 00:16:23

A. java 怎樣才知道某個方面是哪個對象調用的

你好。某個類的方法只能被本類或者本類的衍生類調用,你說的"A類的實例對象調用B類的C方法"其實是不正確的,方法的調用者,必須是方法的歸屬類或者其衍生類。但是你可以在A類中創建B類的一個實例,再通過這個實例去調用C方法,這樣是可行的,希望對你有用。

B. java問題 如何知道類被哪些類調用了

你在A類的a()方法中加一個Class參數,調用的時候傳入當前類的Class

C. 如何獲得一個類的某個方法是被那個類調用的

利用堆棧元素StackTraceElement可以實現

StackTraceElement[] mStacks = Thread.currentThread().getStackTrace();
for(StackTraceElement s: mStacks){
System.out.println("方法名:"+s.getMethodName()+
"類名:"+s.getClassName()+"行數:"+s.getLineNumber()+"文件名:"+s.getFileName()+"----"+s);
}

D. C#如何判斷是哪個類的那個方法調用了當前方

你已經寫出來了,只要略加判斷就是了
trace.GetFrame(1).GetMethod();
這個括弧裡面的參數從0開始,0就是自己,1就是上一個,2就是上上一個3就是上上上一個
如果再上面沒有了的話,就會返回一個異常字元串,你判斷這個異常字元串是什麼,就停止循環就好了
只要循環,不需要遞歸。

E. JAVA中父類能知道是哪個子類調用他的方法嗎

所有子類都可以直接調用父類的方法,所以光看父類的方法就直接想知道是哪個子類調用的,難度很大。

F. java 當一個介面被多個類繼承時 如何知道是調用的哪個類的實現

這個問題太籠統了,一個介面被多個類實現時,每個類的功能實現的地方肯定也不一樣,想知道當前是調用的哪個實現類,需要看當前用的是什麼功能和階段名稱,根據功能和階段名稱找實現此功能方法的實現類即可。
還有一個最笨的方法,在所有實現此介面方法的實現類的方法上打上斷點,進行debugger測試,當實現功能時進入的是哪個debugger斷點,那就是調用的那個實現類。

G. Java通過介面調用方法的時候,怎麼知道調用的是哪個實現類里的方法

  1. ctrl點擊方法名,選擇open implementation就可以進入對應的實現類

  2. 通過上文new直接看實現介面的類

H. 在java 中 父類定義的靜態方法 子類 調用時候 如何 知道 是哪個子類調用的

1)父類構造函數
java中當調用某個類的構造方法的時候,系統總會調用父類的非靜態初始化塊進行初始化,這個調用是隱式的,而且父類的靜態初始化代碼
塊總是會被執行,接著調用父類的一個或者多個構造器執行初始化,這個調用也可以通過super進行顯式調用。
例如:
父類代碼如下:
public class Creature {//父類
{//非靜態代碼塊
System.out.println("creature的非靜態代碼塊正在執行");
}

public Creature(){
System.out.println("creature的構造函數正在執行");
}
}
子類代碼如下:
public class Animal extends Creature {
{
System.out.println("animal的初始化代碼塊正在執行");
}
public Animal(){
System.out.println("animal的構造方法正在執行");
}

public static void main(String[] args){
Animal a = new Animal() ;
}
}
則運行程序後的結果為:
creature的非靜態代碼塊正在執行
creature的構造函數正在執行
animal的初始化代碼塊正在執行
animal的構造方法正在執行
從結果中可以看出:調用某個類的構造方法的時候總是會先執行父類的非靜態代碼塊,然後執行父類的構造方法,最後才是執行當前類的。
非靜態代碼塊和構造方法。執行過程中有先後順序。
若果想要顯式調用父類的構造方法則可以使用super(),來調用,但是super關鍵字和this關鍵字都必須放在構造放的第一行,而且只能使用第一個。
註:super用於顯式調用父類的構造器,this可以顯式調用本類中的重載的構造器。

2)訪問子類對象的實例變數
子類的方法可以訪問父類中的實例變數,這是因為子類繼承父類就會獲得父類中的成員變數和方法,但是父類方法不能訪問子類的實例變數,因為父類根本無法知道它將被哪個類繼承,它的子類將會增加怎麼樣的成員變數。但是,在極端的情況下,父類也可以訪問子類中的變數。
例如:
父類代碼如下:
public class Base {//父類
private int i = 2 ;
public Base(){
this.display() ;
}
public void display(){
System.out.println(i);
}
}
子類中代碼如下:
public class Derived extends Base {
private int i = 22 ;
public Derived(){
i = 222 ;
}
public void display(){
System.out.println(i);
}
}
測試用例如下:
public class Test {
public static void main(String[] args) {
new Derived() ;
}
}
程序的執行結果為:
0
調用new Derived() ;創建Derived
實例的時候,系統會為Derived對象分配內存空間,Derived會有兩個i實例變數,會分配兩個空間來保存i的值。分配完空間以後i的值為0
,如果有引用類型則引用類型的值為null。接下來程序在執行Derived的構造器之前會執行Base的構造器,表面上看Base的構造器中只有
一行代碼,但是在父類中定義i的時候執行的初始值2,因此經過編譯之後,該構造方法中應該包含如下兩行代碼:
i =2 ;
this.display() ;
程序先將Base中的i賦值為2,然後執行display方法。此處有一個關鍵字this,this到底代表誰呢?表面上看this代表的是Base的當前實例,但是實際上代碼是放在Derived的構造器中的,所以this最終代表的是Derived的當前實例(編譯類型是Base而實際引用一個Derived對象),所以如果在父類的構造方法中直接輸出System.out.println(this.i) ;則輸出的結果為2。但是調用this.display()方法,此時調用的是子類中重寫的display方法,輸出的變數i也是子類中的i,但是此時子類中的變數i還沒有賦值,所以輸出結果為0。
為了詳細的看清楚this變數到底代表什麼實例,我們將Base的構造方法修改如下:
public Base(){
System.out.println(this.i);
System.out.println(this.getClass());
this.display() ;
}
再次運行程序,結果為:
2
class e.qichao.chapter2.Derived
0
可以看到this代表的是Derived的實例,但是編譯的時候類型為Base,所以輸出this.i的值為2。

3)調用被子類重寫的方法
默認情況下,子類可以調用父類的方法,但是父類不能調用子類的方法,因為父類不知道它將被哪個子類繼承,也不知道子類將增加怎麼
樣的方法。
例如:
父類Animal的代碼如下:
public class Animal {
private String desc ;

public Animal(){
this.desc = getDesc() ;
}

public String getDesc(){
return "Animal" ;
}

public String toString(){
return desc ;
}
}
子類Wolf的代碼如下:
public class Wolf extends Animal {
private String name ;
private double weight ;
public Wolf(String name , double weight){
this.name = name ;
this.weight = weight ;
}
public String getDesc(){
return "Wolf[name=" + name + ",weight=" + weight + "]" ;
}

public static void main(String[] args){
System.out.println(new Wolf("灰太狼" , 3));
}
}
程序的運行結果為:
Wolf[name=null,weight=0.0]
在main方法中通過new Wolf("灰太狼" , 3);來創建一個Wolf的實例,子類會隱式調用父類的構造方法,在父類構造方法中初始化desc變數this.desc = getDesc() ;此處需要注意this變數,雖然這個this放在Animal的構造放中,但是是在Wolf的構造方法中調用父類的構造方法,所以this編譯時類型為Animal,運行時類型為Wolf,此處調用的getDesc方法是子類Wolf的方法,但是子類中的name和weight變數都沒有初始化,默認為null和0.0.所以程序的最終結果為:Wolf[name=null,weight=0.0]

4)繼承成員變數和成員方法的區別
java中隊成員變數的繼承和成員方法的繼承是不同的。
例如:
父類代碼如下:
public class Base {
int count = 2 ;
public void display(){
System.out.println(this.count);
}
}
子類代碼如下:
public class Derived extends Base {
int count = 20 ;
@Override
public void display(){
System.out.println(this.count);
}
}
測試用例如下:
public class Test {
public static void main(String[] args) {
Base b = new Base() ;
System.out.println(b.count);
b.display() ;
System.out.println("-----------------");
Derived d = new Derived() ;
System.out.println(d.count);
d.display() ;
System.out.println("-----------------");
Base bd = new Derived() ;
System.out.println(bd.count);
bd.display() ;
System.out.println("-----------------");
Base d2b = d ;
System.out.println(d2b.count);
}
}
程序運行結果為:
2
2
-----------------
20
20
-----------------
2
20
-----------------
2

閱讀全文

與類和方法怎麼看哪個調用哪個相關的資料

熱點內容
尿蛋白高的治療方法 瀏覽:603
肚子撐脹右側脹氣有什麼方法 瀏覽:619
手腕腱鞘囊腫治療方法 瀏覽:304
一般分析化學的方法 瀏覽:248
如何用數數的方法做減法 瀏覽:454
水彩碼頭使用方法視頻 瀏覽:345
如何激勵孩子的學習方法 瀏覽:995
八年級物理學中常見的測量方法 瀏覽:150
防蚊扣使用方法 瀏覽:320
夏天洗衣服衣領技巧方法 瀏覽:105
球囊炎的治療方法 瀏覽:580
電腦關機關閉鍵盤燈光的方法 瀏覽:905
什麼方法去額頭皺紋 瀏覽:860
如何在初中時學習好的方法 瀏覽:448
硅化木的鑒別方法 瀏覽:252
無創呼吸機的使用方法 瀏覽:859
香葯炮製作方法視頻 瀏覽:432
數據沖突的四種解決方法 瀏覽:554
帕金森的治療方法和注意事項 瀏覽:419
色素胎記治療方法 瀏覽:233