參考鏈接:https://www.oschina.net/question/2986939_2283331
java爲了提高代碼安全性,規定:
- 在類中定義的成員變量如果你沒有初始化java會自動幫你初始化,如果變量是數字會自動初始化成 0,變量是字符會初始化成 'a', 變量是對象引用會初始化成 null, 變量是布爾型,則自動初始化成 false.
- 如果你定義的是以後要用到的(要從那裏提取數值的)局部變量,那就必須在聲明的時候就初始化,否則編譯會報錯。
- 不過,你的案例是以後就先給它(newImg)賦值(創建新對象,newImg 成了這個對象的引用),而不是從它那裏取值,所以聲明它(newImg)的時候,不必初始化,即聲明它(newImg)的時候的初始化是多餘的。
-
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中所有變量在使用前都初始化嗎
-
對 你就得這麼記“所有對變量在使用前都得初始化”
-
1.尤其是在方法中聲明的局部變量,必須得由手動進行顯示的初始化
2.而聲明在類體中的成員變量,虛擬機會自動幫你初始化 爲各種 0 值(數值類型爲0 字符則爲編碼爲0的那個 boolean 爲false(編碼還是0)引用型初始化爲null)
比較特殊的一種變量final(這裏叫常量了 一旦賦值初始化之後就不能更改 )這種變量想想也知道必須手動賦值初始化了,(虛擬機給你賦值個0有啥用呢?你又不能改它的值),於是再按照上述1、2的原則,1.局部的final型變量還是只要在使用前進行手動初始化即可 2,final成員變量要麼你在聲明的時候就賦值了,要麼你在聲明的時候沒賦值的話,就必須在所在的類實例化的時候就賦值了(即必須在所有的構造方法中初始化了)。 -
在談static成員何時初始化
- 參考鏈接:
- https://blog.csdn.net/jisuanji198509/article/details/81260487
- static成員是所有類對象公共的
- static成員可以直接用類名調用,無需創建對象
- static方法中不能使用this關鍵字
-
我們在試想,當我們直接用類名去調用一個靜態成員的時候,這個靜態成員肯定必須要在我們調用之前就要被初始化好,那麼也就是說在類被加載的時候就會被初始化好,因爲在類被裝載到jvm虛擬機後,如果不初始化static修飾的成員,那麼就不能正確的使用類名去調用靜態成員了{類(class)什麼時候被加載?}
總結
一句話:類中的靜態成員會隨着類的加載而加載。 -
靜態變量在類被裝載到jvm虛擬機後,就進行初始化。