一分鐘學會Java中的final、static關鍵詞

final關鍵詞

概念:final的意思爲最終,不可變。final是個修飾符,它能夠用來修飾類,類的成員,以及局部變量。不能修飾構造方法。this

特色:code

1.final修飾的類不能夠被繼承,但能夠繼承別的類。對象

class Yy {}
final class Fu extends Yy{} //能夠繼承Yy類
class Zi extends Fu{} //不能繼承Fu類

2.final修飾的方法不能夠被子類重寫,但父類中沒有被final修飾方法,子類重寫後能夠加final。繼承

class Fu {    
    // final修飾的方法,不能夠被覆蓋,但能夠繼承使用
    public final void method1(){}
    public void method2(){}
}
class Zi extends Fu {
    //重寫method2方法
    public final void method2(){}
}//加入Java開發交流君樣:756584822一塊兒吹水聊天

3 final修飾的變量稱爲常量,這些變量只能賦值一次。並且終身不變。接口

final int i = 20;
i = 30; //賦值報錯,final修飾的變量只能賦值一次

4.引用類型的變量值爲對象地址值,地址值不能更改,可是地址內的對象屬性值能夠修改。開發

final Person p = new Person();
Person p2 = new Person();
p = p2; //final修飾的變量p,所記錄的地址值不能改變
p.name = "小明";//能夠更改p對象中name屬性值

5.修飾成員變量,須要在建立對象前賦值,不然報錯。(當沒有顯式賦值時,多個構造方法的均須要`爲其賦值。)編譯

class Demo {
    //直接賦值
    final int m = 100;
    
    //final修飾的成員變量,須要在建立對象前賦值,不然報錯。
    final int n; 
    public Demo(){
        //能夠在建立對象時所調用的構造方法中,爲變量n賦值
        n = 2016;
    }
}

static關鍵詞

概念:static是靜態修飾符,通常用來修飾類中的成員。不建立對象,就能夠調用方法。class

特色:變量

1.被static修飾的成員變量屬於類,不屬於這個類的某個對象。(也就是說,多個對象在訪問或修改static修飾的成員變量時,其中一個對象將static成員變量值進行了修改,其餘對象中的static成員變量值跟着改變,即多個對象共享同一個static成員變量)數據類型

class Demo {
   public static int num = 100;
}

class Test {
   public static void main(String[] args) {
       Demo d1 = new Demo();
       Demo d2 = new Demo();
       d1.num = 200;
       System.out.println(d1.num); //結果爲200
       System.out.println(d2.num); //結果爲200
   }
}

2.被static修飾的成員能夠而且建議經過類名直接訪問。

訪問靜態成員的格式:
類名.靜態成員變量名
類名.靜態成員方法名(參數)
對象名.靜態成員變量名         ------不建議使用該方式,會出現警告
對象名.靜態成員方法名(參數)     ------不建議使用該方式,會出現警告
class Demo {
    //靜態成員變量
    public static int num = 100;
    //靜態方法
    public static void method(){
        System.out.println("靜態方法");
    }
}
class Test {
    public static void main(String[] args) {
        System.out.println(Demo.num);
        Demo.method();
    }
}

注意事項

  1. 靜態內容是優先於對象存在,只能訪問靜態,不能使用this/super。靜態修飾的內容存於靜態區。
class Demo {
    //成員變量
    public int num = 100;
    //靜態方法
    public static void method(){
        //this.num; 不能使用this/super。
        System.out.println(this.num);
    }//加入Java開發交流君樣:756584822一塊兒吹水聊天
}
  1. 同一個類中,靜態成員只能訪問靜態成員
class Demo {
    //成員變量
    public int num = 100;
    //靜態成員變量
    public static int count = 200;
    //靜態方法
    public static void method(){
        //System.out.println(num); 靜態方法中,只能訪問靜態成員變量或靜態成員方法
        System.out.println(count);
    }
}

3.main方法爲靜態方法僅僅爲程序執行入口,它不屬於任何一個對象,能夠定義在任意類中。

4.多態調用方法中,編譯看=左邊,父類有,編譯成功,父類沒有,編譯失敗

  • 運行,靜態方法,運行父類中的靜態方法,
  • 運行,非靜態方法,運行子類的重寫方法
  • 成員變量,編譯運行全是父類

定義靜態常量

概念:開發中,咱們想在類中定義一個靜態常量,一般使用public static final修飾的變量來完成定義。此時變量名所有大寫,多個單詞使用下劃線鏈接。

定義格式:public static final 數據類型 變量名 = 值;

public class School {
    public static final String SCHOOL_NAME = "北京大學";
    public static void method(){
        System.out.println("一個靜態方法");
    }//加入Java開發交流君樣:756584822一塊兒吹水聊天
}

當咱們想使用類的靜態成員時,不須要建立對象,直接使用類名來訪問便可。

System.out.println(Company.SCHOOL_NAME); 
Company.method(); // 調用一個靜態方法

注意:

接口中的每一個成員變量都默認使用public static final修飾。

全部接口中的成員變量已經是靜態常量,因爲接口沒有構造方法,因此必須顯示賦值。能夠直接用接口名訪問。

interface Inter {
    public static final int COUNT = 100;
}

訪問接口的成員變量:

Inter.COUNT

相關文章
相關標籤/搜索