天天看點

java中final和static

final的意思是最終的,最後的額,不可變的,在java中也具有相似的含義。

final修飾基礎資料表示把該資料修飾成常量,意味着不可修改,不可變。

final修飾對象的引用的時候,表示該引用不可變,但是引用的結果是可變的。這裡和修飾數組相似,修飾數組的時候數組裡邊的内容是可變的。

final定義的方法不可被重寫,final定義的類不能被繼承。

static表示靜态的,他修飾的方法和屬性歸類所有不屬于對象,static修飾類的時候隻能修飾嵌套類,static修飾的嵌套類可以被類中的靜态方法調用,沒有被static修飾的嵌套類就是通常所說的内部類。

static修飾的方法中不存在this,因為static修飾的方法不依賴于任何對象就可以通路,既然沒有對象,也就沒有this。在靜态方法中,不能通路類中的非靜态成員變量和非靜态成員方法,因為他們都要依賴于對象。

需要注意的是,在非靜态方法中是可以通路靜态成員方法和變量的。

最常用的static方法是main方法,在程式執行的時候沒有建立對象,直接通過類名來通路。

還需要記住的是,即使沒有顯示的聲明為static,類的構造器實際也都是靜态的。

靜态變量被所有的類共享,在記憶體中僅存在一個副本,也僅在類被初次加載的時候初始化一次。非靜态變量歸對象所有,在建立對象的時候被初始化,存在多個副本互不影響。

static還有一個重要作用是聲明一個靜态代碼塊來優化程式的性能。static塊可以存在類的任何地方,在類被初次加載的時候會被執行一次,并且僅此一次,而執行順序與靜态代碼塊的排列順序一緻。

static關鍵字不會影響變量和方法的作用域和通路權限,static修飾的是全局變量,是以不能來修飾局部變量。

靜态方法和靜态變量獨立于對象,屬于類,但是權限夠的情況下,是可以通過對象和this來通路的。