當前位置:
首頁 > 最新 > static和final

static和final

【static關鍵字】

1、static修飾成員變數

用static修飾的成員變數不屬於對象的數據結構;static變數是屬於類的變數,通常可以通過類名來引用static成員;static成員變數和類的信息一起存儲在方法區,而不是在堆中,一個類的static成員變數只有「一份」,無論該類創建了多少對象。

2、static修飾方法

通常的方法都會涉及到對具體對象的操作,這些方法在調用時,需要隱式的傳遞對象的引用(this)。看下列代碼:

class Moo{

int a;

static void test(){

System.out.println(a);//編譯錯誤,應改為this.a

}

}

static修飾的方法則不需要針對某些對象進行操作,其運行結果僅僅與輸入的參數有關,調用時直接用類名引用。看下列代碼:

double c = Math.sqrt(3.0*3.0+4.0*4.0);

以上代碼輸出的結果僅僅與輸入的參數有關,調用時直接用類名Math引出。

由於static在調用時沒有具體的對象,因此在static方法中不能對非static成員(對象成員)進行訪問。static方法的作用在於提供一些「工具方法」和「工廠方法」等。

3、static塊

屬於類的代碼塊,在類載入期間執行的代碼塊,只執行一次,可以用來在軟體中載入靜態資源。看下列代碼:

class Foo{

static{

}

public Foo(){

}

}

Foo foo=new Foo();

輸出的結果為:

Load Foo.class

Foo();

Foo類載入時,運行靜態塊,在創建對象之前。

【final關鍵字】

1、final修飾變數

final關鍵字修飾成員變數,意為不可改變。

final修飾成員變數,兩種方式初始化:1)聲明同時初始化;2)構造函數中初始化。

final關鍵字也可以修飾局部變數,使用之前初始化即可。

看下列代碼:

public class Emp{

private final int no=100;//final變數聲明時初始化

public void testFinal(){

no=99;//編譯錯誤,final的變數不可被改變

}

}

2、final修飾方法

final關鍵字修飾的方法不可以被重寫。

使一個方法不能被重寫的意義在於:防止子類在定義新方法時造成的「不經意」重寫。

3、final修飾類

final關鍵字修飾的類不可以被繼承。看下列代碼:

final class Foo{}

class Goo extends Foo{}//會有編譯錯誤

JDK中的一些基礎類庫被定義為final的,例如:String、Math、Integer、Double等等。

使一個類不能被繼承的意義在於:可以保護類不被繼承修改,可以控制濫用繼承對系統造成的傷害。

4、static final常量

static final修飾的成員變數稱為常量,必須聲明同時初始化,不可被改變。

static final常量會在編譯期被替換,例如:

class Foo{

public static final int NUM=100;

}

class Goo{

public static void main(String[] args){

System.out.println(Foo.NUM);//代碼編譯時,會替換為其常量值(100),在運行Goo類時,Foo類不需要被載入。

}

}

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 鄰家零 的精彩文章:

TAG:鄰家零 |