1. 程式人生 > >java原始碼常用關鍵字

java原始碼常用關鍵字

native 

我們先來看看native關鍵字

jdk1.8 中的Class類中有這麼一個方法:

 public native boolean isInstance(Object obj);

我們不管這個方法是做什麼的,但是一看這個方法我們會覺得很奇怪,因為Class是一個類,而不是一個介面,居然還存在沒有方法體的方法,帶著疑問繼續瞭解;

那麼native這個單詞有本地的意思,被native修飾的方法稱作本地方法,是一個原生態的方法,它的實現不在當前檔案中。

那麼為什麼不在當前檔案中實現呢?要搞得這麼麻煩!!

首先我們瞭解了虛擬機器,知道java跨平臺是因為虛擬機器,而虛擬機器通過介面來和不同的平臺對接,因此java語言有了跨平臺的特性,但也是因為如此,java語言不能去對作業系統的底層進行訪問和操作,需要來藉助其他語言來實現(比如C/C++);

volatile

這個關鍵字說起來,估計要連帶出一系列的問題(balabala.....)

簡單的說Volatile關鍵字實際下有兩層含義:

    A)保證了記憶體的可見性;

    B)禁止了指令的重排序;

何為記憶體的可見性,就是在我從主存中讀取資料放到快取區中的時候,我們修改資料,就會造成快取中的資料和主記憶體中的資料不一致,而用volatile修飾的變數,一旦修改,就會寫入記憶體中,而普通變數寫入主記憶體的時機我們是不確定的;

指令的重排序:在我們寫的程式碼中,jvm執行的時候並非都是按照程式碼的順序來執行的,可以通過重排序來優化程式碼;

重排序:

int a=1;
int b=20;
int c=a+b;

我們先給a賦值,然後給b賦值,但是在執行時,jvm很有可能會先給b賦值,在給a賦值;

final 表示常量

  1. 修飾基礎變數時,表示不可改變變數的值

     2. 修飾引用變數的時候,表示不可改變引用的地址,但是引用物件中的資料可以改變

 3.修飾類表示類不可被繼承

4.修飾方法且方法使用public修飾,表示方法不可被重寫,但方法可以被繼承

重寫報錯

繼承

public class Userfinal {
	public final void show(){
		System.out.println("i am show");
	}
	public static void main(String[] args) {
		Sonfinal sonfinal=new Sonfinal();
		sonfinal.show();
	}
}
class  Sonfinal extends Userfinal{

}

結果

i am show

 如果使用private修飾方法:則表示次方法不可被繼承,但是在son中可以有方法show


public class Userfinal {
	private final void show(){
		System.out.println("i am show");
	}
	public static void main(String[] args) {
		Sonfinal sonfinal=new Sonfinal();
		sonfinal.show();
	}
}
class  Sonfinal extends Userfinal{
	public void show(){
		System.out.println("i  am  son  show");
	}
}
i  am  son  show