一、1、static變數
對於靜態變數在記憶體中只有乙個拷貝(節省記憶體),jvm只為靜態分配一次記憶體,在載入類的過程中完成靜態變數的記憶體分配,可用類名直接訪問(方便),當然也可以通過物件來訪問(但是這是不推薦的)。
對於例項變數,沒建立乙個例項,就會為例項變數分配一次記憶體,例項變數可以在記憶體中有多個拷貝,互不影響(靈活)。
public
class test
}class myclass
執行這段**就會發現,每次列印的兩個j值都是一樣的,而i的值卻是不同的。從這裡就可以知道final和static變數的區別了
2、靜態方法
靜態方法可以直接通過類名呼叫,任何的例項也都可以呼叫,因此靜態方法中不能用this和super關鍵字,不能直接訪問所屬類的例項變數和例項方法(就是不帶static的成員變數和成員成員方法),只能訪問所屬類的靜態成員變數和成員方法。因為例項成員與特定的物件關聯!這個需要去理解,想明白其中的道理,不是記憶!!!
二、1、final類
final類不能被繼承,因此final類的成員方法沒有機會被覆蓋
,預設都是final的。在設計類時候,如果這個類不需要有子類,類的實現細節不允許改變,並且確信這個類不會載被擴充套件,那麼就設計為final類。
2、final方法
如果乙個類不允許其子類覆蓋某個方法,則可以把這個方法宣告為final方法。
使用final方法的原因有二:
第一、把方法鎖定,防止任何繼承類修改它的意義和實現。
第二、高效。編譯器在遇到呼叫final方法時候會轉入內嵌機制,大大提高執行效率。
3、final變數(常量)
(1)當final變數是基本資料型別以及string型別時,如果在編譯期間能知道它的確切值,則編譯器會把它當做編譯期常量使用。也就是說在用到該final變數的地方,相當於直接訪問的這個常量,不需要在執行時確定。
(2)引用變數被final修飾之後,雖然不能再指向其他物件,但是它指向的物件的內容是可變的。
特別要注意乙個問題:
對於被static和final修飾過的例項常量,例項本身不能再改變了,但對於一些容器型別(比如,arraylist、hashmap)的例項變數,不可以改變容器變數本身,但可以修改容器中存放的物件,這一點在程式設計中用到很多。
final與static的區別於用法
final 修飾類,那麼這個類不能被繼承 修飾方法,那麼這個方法不能被override 修飾屬性,那麼這個屬性值不能被修改 static 表示為靜態成員 方法 屬性 靜態成員與非靜態成員的區別 靜態成員在物件建立之前就存在,呼叫方式 類.方法 類.屬性 非晶態成員,必須在建立物件之後才能使用,呼叫方...
Final和static的區別
首先 final 和static 是完全沒有關係的。final 作用 1.final 修飾屬性,表示屬性 只能賦值一次 1 基本型別 值不能被修改 2 引用型別 引用不可以被修改該。如 public final int rows 1 此時變數rows不管在什麼地方引用,都不能被再次賦值。但是,可以先...
static和final的區別
修飾變數 靜態變數隨著類載入時被完成初始化,記憶體只有乙個,且jvm也只會為他分配一次記憶體,所有類共享靜態變數。修飾方法 在類載入的時候就存在,不依賴任何例項。static方法必須實現,不能用abstract修飾。即abstract修飾的方法不可謂static。修飾 塊 在類載入完成之後就會執行靜...