我知道靜態塊在main之前運行。 但是,正常的塊也運行之前主或主後?靜態塊和普通塊
class prog
{
static
{
System.out.println("Static");
}
{
System.out.println("Block");
}
public static void main(String args[])
{
prog obj=new prog();
System.out.println("Main");
}
}
我知道靜態塊在main之前運行。 但是,正常的塊也運行之前主或主後?靜態塊和普通塊
class prog
{
static
{
System.out.println("Static");
}
{
System.out.println("Block");
}
public static void main(String args[])
{
prog obj=new prog();
System.out.println("Main");
}
}
靜態塊在加載類時執行,其中當創建包含該塊的類的實例時執行常規塊。
只是在java 7以前的記錄靜態塊被執行之前,在項目中搜索main()方法。但是從java 7 main()首先查找。所以你會得到一個錯誤,如果你沒有main.So I know the static blocks run before main
有點含糊不清。在執行靜態塊之前查找main()方法,但主要執行將在處理靜態塊之後開始。
在調用相應的構造函數之前,還會執行非靜態塊。 例如
public class Tester {
{
System.out.println("In some random block");
}
static {
System.out.println("In static block");
}
public Tester() {
System.out.println("Constructor");
}
public static void main(String args[]) {
Tester t = new Tester();
}
}
將打印時一個類的實例被實例化
In static block
In some random block
Constructor
非靜態塊一個,只要你實例化一個對象,你的情況inside main
運行。嘗試之前打印的東西prog obj=new prog();
如果我有像下面這樣的東西,它會在main之前運行。
class prog {
static {
System.out.println("Static");
}
{
System.out.println("Block");
}
prog obj = new prog();
public static void main(String args[]) {
System.out.println("Main");
}
}
*每當您實例化包含這些塊的類的對象*時,就會運行非靜態塊。 –
另外值得一提的是,在執行類構造函數之前,類中的* non-'static * *塊將被執行**。請參閱http://stackoverflow.com/a/17001104/1065197 –
是的,非靜態塊是由編譯器爲所有類生成的'init'方法的一部分,並且該方法在構造函數之前運行。 – Claudiu
其實靜態塊或SIB(靜態初始化塊),在加載類加載的時間,因此之前的主()..
執行,但同樣是沒有非靜態的情況下塊或IIB(實例初始化塊),它只是在創建對象(實例)的加載時間,正如其名字也闡明瞭同樣...
我覺得你有我的觀點......
靜態塊是塊,如果我們指定任何變量或類靜態我們可以acc通過類名將其數據成員放入另一個類或該類之外。 Normal Block是創建類或創建該類的對象的塊。如果我們想在另一個類中使用它,我們必須創建該類的構造函數,然後才能訪問它的對象。 所以這是靜態塊和普通塊的主要差別塊
當編譯時創建該類的實例時,將運行普通塊。靜態塊在程序執行中只會運行一次。所以如果你想在創建該類的實例之前打印一些東西,然後將其放在靜態塊中。
正常初始化塊被運行。像main一樣,靜態方法不需要實例,所以這兩個東西是不相關的。
你爲什麼不跑來看看自己? – SudoRahul
說真的,在fav IDE中運行此代碼會更容易。如果您手頭沒有,請使用http://ideone.com –
更具體地說,靜態塊在類被加載時運行......哪一個是在main之前。 –