黑馬程序員——關於static關鍵字

            ---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IO開發S</a>、<a href="http://edu.csdn.net"target="blank">.Net培訓</a>、期待與您交流! ----------------------

3.6 static關鍵字

1、共享數據:static用於修飾成員(成員函數,成員變量),這些成員都是被對象共享的成員。

2、特點

        ①、隨類的加載而加載,消失而消失。

        ②、優先於對象而存在

        ③、被所有對象所共享

        ④、可以直接被類名所調用

        代碼示例

class Chinese
{
static String country = "中國";//共享數據
String name;
int age;
void singOurCountry(){
System.out.println("啊,親愛的"+country);
}
}
public class AboutStaticKey {
public static void main(String[] args) {
System.out.println(Chinese.country);
//當成員被靜態修飾後,除了可以被對象調用之外,還可以被類名調用
Chinese ch = new Chinese();
System.out.println("Chinese country is " + ch.country);
ch.singOurCountry();
}
}

    3、實例變量與類變量的區別

        ①、存儲位置

            前者隨對象的建立而存在於堆內存中

            後者隨着類的加載而存在於方法區中

        ②、生命週期

            前者隨着對象的消失而消失

            前者隨着類的的消失而消失

        ③、調用方式

            前者可以被對象及類名調用,但建議用類名調用

            後者只能被對象調用

    4、靜態的使用注意事項:

        ①、靜態的方法只能訪問靜態成員

        ②、靜態方法中不可以使用thissuper關鍵字

        ③、靜態省略的是類名,成員變量省略的是this

        ④、主函數是靜態的

        public static void main(String[] args)

          1)public:代表着該函數的權限最大

         2)static:代表主函數歲類的加載而加載就已經存在

         3)void:主函數沒有返回值

          4)main:不是關鍵字,是一個特殊的單詞,可以被jvm識別。

        5)String[] args:函數的參數,參數類型是一個數組,該數組中的元素師字符串,字符串類型的數組。

    5、靜態的利弊

        ①、利:對對象的共享數據進行單獨空間的存儲,節省空間,可以被類名直接調用。

        ②、弊:生命週期過長,而且訪問有侷限性

    6、什麼時候使用靜態?

        ①、靜態變量:如果對象中出現共享數據時,該數據被靜態修飾,對象中的特有數據定義在堆內存中

        ②、靜態函數:函數是否用靜態修飾,就看該函數功能是否需要訪問對象中的特有數據,需要,該功能爲非靜態;不需要,就定義成靜態

    7、靜態代碼塊

        ①、格式:

        static

        {

            code

        }

        ②、特點:隨類的加載而執行,且只執行一次,並優先於主函數而執行

        ③、作用:給類進行初始化

    8、面試題:

class StaticCode {
StaticCode(){
System.out.println("b");//因爲沒有創建過與之相關的對象,從而沒有被執行過,所以不打印b
}
static//靜態代碼塊給類初始化
{
System.out.println("a");
}
{//構造代碼塊給對象初始化,其優先級比構造函數高,因爲構造函數有針對性,而構造代碼塊可以初始化所有對象
System.out.println("c");
}
StaticCode(int x){//構造函數給對應的對象初始化
System.out.println("d");
}
public static void show(){
System.out.println("show run");
}
}
class StaticCodeDemo {
public static void main(String[] args) {
new StaticCode(4);
}
}
問打印結果是?爲什麼?
結果:a c d,

 ---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS開發</a>、<a href="http://edu.csdn.net"target="blank">.Net培訓</a>、期待與您交流! ----------------------

詳細請查看:<ahref="http://edu.csdn.net" target="blank">http://edu.csdn.net</a>

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