天天看點

Java中static、final、static final關鍵字所能修飾的範圍

final:

  • final可以修飾:屬性,方法,類,局部變量(方法中的變量)
  • final修飾的屬性的初始化可以在編譯期,也可以在運作期,初始化後不能被改變。
  • final修飾的屬性跟具體對象有關,在運作期初始化的final屬性,不同對象可以有不同的值。
  • final修飾的屬性表明是一個常數(建立後不能被修改)。
  • final修飾的方法表示該方法在子類中不能被重寫,final修飾的類表示該類不能被繼承。
  • 對于基本類型資料,final會将值變為一個常數(建立後不能被修改);但是對于對象句柄(亦可稱作引用或者指針),final會将句柄變為一個常數(進行聲明時,必須将句柄初始化到一個具體的對象。而且不能再将句柄指向另一個對象。但是,對象的本身是可以修改的。這一限制也适用于數組,數組也屬于對象,數組本身也是可以修改的。方法參數中的final句柄,意味着在該方法内部,我們不能改變參數句柄指向的實際東西,也就是說在方法内部不能給形參句柄再另外指派)。

static:

  • static可以修飾:屬性,方法,代碼段,内部類(靜态内部類或嵌套内部類)
  • static修飾的屬性的初始化在編譯期(類加載的時候),初始化後能改變。
  • static修飾的屬性所有對象都隻有一個值。
  • static修飾的屬性強調它們隻有一個。
  • static修飾的屬性、方法、代碼段跟該類的具體對象無關,不建立對象也能調用static修飾的屬性、方法等
  • static和“this、super”勢不兩立,static跟具體對象無關,而this、super正好跟具體對象有關。
  • static不可以修飾局部變量。
  • import static方式導入的包,調用靜态方法時不需要使用 對象.方法(Math.random)可以直接使用方法(random())

static final:

  • static修飾的屬性強調它們隻有一個,final修飾的屬性表明是一個常數(建立後不能被修改)。static final修飾的屬性表示一旦給值,就不可修改,并且可以通過類名通路。
  • static final也可以修飾方法,表示該方法不能重寫,可以在不new對象的情況下調用
  • 對于變量,表示一旦指派就不可以修改,并且通過類名可以通路;
  • 對于方法,表示不可覆寫,并且可以通過類名直接通路。