1. 程式人生 > >final關鍵字,static關鍵字

final關鍵字,static關鍵字

其他 數據類型 通過 分享 pub 默認值 pri main 測試

Final

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

註意

  被final修飾的類不能被繼承但可以繼承別的類

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

final修飾成員方法:
1.該方法可以被子類繼承,但是不能被重寫
2.從父類那裏繼承來的方法重寫後可以加final關鍵字

class Fu {    
    // final修飾的方法,不可以被覆蓋,但可以繼承使用
    public
final void method1(){} public void method2(){} } class Zi extends Fu { //重寫method2方法 public final void method2(){} }

final修飾變量(基本類型還是引用數據類型)
一次賦值,終身不變

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

final修飾成員變量,
1.成員變量的初始值不能為系統的默認值(需要手動賦初始值)
2.可以通過構造方法賦值
3.一次賦1值,終身不變

class
Demo { //直接賦值 final int m = 100; //final修飾的成員變量,需要在創建對象前賦值,否則報錯。 final int n; public Demo(){ //可以在創建對象時所調用的構造方法中,為變量n賦值 n = 2016; } }

static關鍵字

static它是靜態修飾符,一般用來修飾類中的成員。

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

例子:

package com.oricle.School;

public class Student {
    private String  name;
    private int  age;
    private static String  school ="清華大學";
    public Student(String  name,int  age){
        
        this.age=age;
        this.name=name;
        
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getSchool() {
        return school;
    }
    public void setSchool(String school) {
        this.school = school;
    }
    
    public String toString() {
        return "Student [name=" + name + ", age=" + age + ", school=" + school + "]";
    }
    
}

測試類:

package com.oricle.School;

public class Test {

    public static void main(String[] args) {
        Student s1=new Student("熊大",15);
        Student s2=new Student("熊1",14);
        Student s3=new Student("熊2",13);
        Student s4=new Student("熊3",12);
        s1.setSchool("北京大學");
        System.out.println(s1.toString());
        System.out.println(s2.toString());
        System.out.println(s3.toString());
        System.out.println(s4.toString());
        
    }

}

結果演示:

技術分享圖片

註意
  靜態成員只能訪問靜態成員

class Demo {
    //成員變量
    public int num = 100;
    //靜態成員變量
    public static int count = 200;
    //靜態方法
    public static void method(){
        //System.out.println(num); 靜態方法中,只能訪問靜態成員變量或靜態成員方法
        System.out.println(count);
    }
}

  靜態內容存於靜態區,優先被掃描,優先於對象存在,不能使用this/super,掃描完靜態區,隨後再main方法進棧,其中 main方法為靜態方法僅僅為程序執行入口,它不屬於任何一個對象,可以定義在任意類中。

class Demo {
    //成員變量
    public int num = 100;
    //靜態方法
    public static void method(){
        //this.num; 不能使用this/super。
        System.out.println(this.num);
    }
}

定義靜態常量

開發中,我們想在類中定義一個靜態常量,通常使用public static final修飾的變量來完成定義。此時變量名用全部大寫,多個單詞使用下劃線連接。

定義格式:

public static final 數據類型 變量名 = 值;

例如:

class School {
    public static final String SCHOOL_NAME = "北京大學";
    public static void method(){
        System.out.println("一個靜態方法");
    }
}

當我們想使用類的靜態成員時,不需要創建對象,直接使用類名來訪問即可。

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

註意

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

所有接口中的成員變量已是靜態常量,由於接口沒有構造方法,所以必須顯示賦值。可以直接用接口名訪問。

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

訪問接口中的靜態變量

Inter.COUNT//類名.靜態變量

final關鍵字,static關鍵字