對局部變量和成員變量的初始化的探討

參考鏈接:https://www.oschina.net/question/2986939_2283331

java爲了提高代碼安全性,規定:

  1. 在類中定義的成員變量如果你沒有初始化java會自動幫你初始化,如果變量是數字會自動初始化成 0,變量是字符會初始化成 'a', 變量是對象引用會初始化成 null, 變量是布爾型,則自動初始化成 false.
  2. 如果你定義的是以後要用到的(要從那裏提取數值的)局部變量,那就必須在聲明的時候就初始化,否則編譯會報錯。
  3. 不過,你的案例是以後就先給它(newImg)賦值(創建新對象,newImg 成了這個對象的引用),而不是從它那裏取值,所以聲明它(newImg)的時候,不必初始化,即聲明它(newImg)的時候的初始化是多餘的。
  4. import java.awt.image.BufferedImage;
    class Person{
    	int age;// 無須初始化
    	String name;// 無須初始化
    	char c;
    	boolean mariage;
    	public String toString(){
    		String s="";
    		s += "姓名:"+ name;
    		s += ",, 年齡:" + age;
    		s += ", 字母: " + c;
    		s += ", 婚否: " + mariage;
    		return s;
    	}
    	
    }
    public class initTest {
    	
    	static void cal(){
    		int a=5; //必須初始化,因爲以後要用到
    		int b; //無需初始化,因爲以後沒用
    		System.out.println(a);
    	}
       
        public static void main(String[] args) {
            BufferedImage bf = null;//必須初始化, 因爲以後要用到
            if (bf == null) System.out.println("緩衝影像無效。 ");
            Person p = new Person();
            System.out.println(p.toString());
            cal();
            
        }
    }

    Java中所有變量在使用前都初始化嗎

  5. 對 你就得這麼記“所有對變量在使用前都得初始化

  6. 1.尤其是在方法中聲明的局部變量,必須得由手動進行顯示的初始化
    2.而聲明在類體中的成員變量虛擬機會自動幫你初始化 爲各種 0 值(數值類型爲0 字符則爲編碼爲0的那個 boolean 爲false(編碼還是0)引用型初始化爲null)
    比較特殊的一種變量final(這裏叫常量了 一旦賦值初始化之後就不能更改 )這種變量想想也知道必須手動賦值初始化了,(虛擬機給你賦值個0有啥用呢?你又不能改它的值),於是再按照上述1、2的原則,1.局部的final型變量還是只要在使用前進行手動初始化即可 2,final成員變量要麼你在聲明的時候就賦值了,要麼你在聲明的時候沒賦值的話,就必須在所在的類實例化的時候就賦值了(即必須在所有的構造方法中初始化了)。

  7. 在談static成員何時初始化

  8. 參考鏈接:
  9. https://blog.csdn.net/jisuanji198509/article/details/81260487
  10. static成員是所有類對象公共的
  11. static成員可以直接用類名調用,無需創建對象
  12. static方法中不能使用this關鍵字
  13. 我們在試想,當我們直接用類名去調用一個靜態成員的時候,這個靜態成員肯定必須要在我們調用之前就要被初始化好,那麼也就是說在類被加載的時候就會被初始化好,因爲在類被裝載到jvm虛擬機後,如果不初始化static修飾的成員,那麼就不能正確的使用類名去調用靜態成員了{類(class)什麼時候被加載?}

    總結
    一句話:類中的靜態成員會隨着類的加載而加載。

  14. 靜態變量在類被裝載到jvm虛擬機後,就進行初始化。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章