2015-10-05 35 views
0

只是一個公共類A,將有由JVM定義,並打算在運行時調用默認的構造函數我可以看到默認構造函數調用一旦對象正在創建|在Java中

public class A { 

} 

主要類有這將創造A級的對象並自動調用默認的主要方法在A級

public class Main { 
    public static void main(String[] args) { 
     A a = new A(); 
    } 
} 

的構造是否有可能爲我做調試,可以看到光標流量爲此,成調用類A的默認構造函數?

+0

我試過用Intellij做,但沒有運氣 – Reg

回答

2

除非內部有一些業務邏輯,否則不會使用調試。否則它是空的。

但是,你可以。

public class A { 

    /* Default no arg constructor */ 
    public A(){ 
     System.out.println("Put a break point at this line"); 
    } 
    } 

您仍然可以在沒有默認構造函數的情況下運行此代碼,其中JVM內部插入它。

如果你想添加一些功能,你需要手動編寫它。

+0

不需要在構造函數中打印東西...... DEFAULT構造函數不會執行任何操作(包括打印) –

2

沒有直接的辦法。

您可以定義默認構造函數並在其中輸入內容。

class A { 
    public A() { 
    System.out.println("constructor is called"); 
    } 
} 

現在,當您在Main類中創建A類的實例時,將會打印該消息。您可以將調試點放入print語句並查看運行時光標到達它。

+1

他想調試到默認構造函數中......無需打印東西 –

+0

@Parker_Halo你可以調試到一個空的構造函數?從構造函數中打印某些內容也僅用於調試。 – YoungHobbit

+1

我不知道他在做什麼,但這是他的問題;) –

1

你爲什麼要這麼做? 由於jls狀態:

如果所聲明的類是原始類的對象,那麼默認的構造函數有一個空的機構。否則,默認構造函數只是簡單地調用沒有參數的超類構造函數。

所以沒有什麼有趣的事情要看。只需要調用一些默認構造函數,即Object。至於調試問題,這很大程度上取決於您使用的調試器。

0

由於默認的構造函數根據定義是空的,所以將代碼放在裏面就像一些建議的答案是沒有意義的:它不再是默認構造函數。

我現在還沒有IDE(在電話中),但我認爲您應該能夠從創建該類的新實例的語句(例如從一個語句)進入默認構造函數線如下:

Something something = new Something(); 

但是,有什麼意義呢?默認的構造函數是空的,所以沒有什麼可以看到或調試的。

如果要在默認構造函數創建類的實例時停止執行,請創建一個無參數構造函數,並在其中包含啞元語句。 (當然,不會,如前所述,不會有默認的構造函數。)

如果您不能編輯該類的源代碼,那麼我不知道如何在默認構造函數中停止執行。我對學習很感興趣。

相關問題