為什么我的這個靜態變量不是優先,而且第二次創建對象的時候,static初始化塊還會出現?跟講的不一樣
public class HelloWorld{
?? ?int num1;
?? ?int num2;
?? ?static int num3;
??? public HelloWorld(){
?? ?num1=10;
?? ?System.out.println("通過構造方法為變量num1賦值");
??? }
???? {
?? ?num2=20;
?? ?System.out.println("通過初始化塊為變量num2賦值");
??? }
?? {
?? ?num3=30;
?? ?System.out.println("通過靜態初始化塊為變量num3賦值");
??? }
????? public static void main(String[] args){
?? ?HelloWorld hello=new HelloWorld();
?? ?System.out.println("調用num1:"+hello.num1);
?? ?System.out.println("調用num2:"+hello.num2);
?? ?System.out.println("調用num3:"+num3);
?? ?HelloWorld hello2=new HelloWorld();
??? }
}
2020-02-09
2020-10-26
static {
?? ?num3=30;
?? ?System.out.println("通過靜態初始化塊為變量num3賦值");
??? }
這里加上static
2020-03-23
我從內存管理給你解釋一下為什么吧,static稱為靜態變量,它在內存管理中單獨放在一塊內存中,程序開始的時候需要經歷先編譯在執行,如果聲明的該變量是static,那么就會在編譯的時候就直接把該變量放到了內存區里面()注意這是在程序還沒有開始執行的時候),如果你后面初始化模塊前不加static的話,會導致程序是順序執行的,只有到執行的時候才會賦值(而不是編譯的時候),所以這里兩個都需要加static
2020-02-05
同意樓上看法,在13行加static
2020-02-01
你改成
static
{
?? ?num3=30;
?? ?System.out.println("通過靜態初始化塊為變量num3賦值");
??? }
下面的“通過靜態初始化塊為num3賦值”不就沒了嗎?
2020-01-09
因為你的num3不是在靜態初始化塊中賦值的。。
你少加了個static
2020-01-06
對問題補充下