1. 程式人生 > >java關鍵字與其相關含義

java關鍵字與其相關含義

訪問控制 

public (公共的:對所有使用者都開放), protected(受保護的):對繼承類介面之類的開放

private(私有的):對當前類開放

類、方法和變數修飾符

abstract:聲名抽象     抽象的作用就是將可重複使用的類或方法不明確的類提取出來方便後面重複使用,抽象類的目的就是為了在子類中重寫方法。    被abstract修飾的類叫抽象類,方法叫抽象方法,抽象方法不能有主體即{},抽象類中只能有屬性和抽象方法   抽象類不能被例項化,因為抽象類中的方法未具體化,所以抽象類本身就是一種不完整的類   抽象方法用extend來繼承,繼承只能單繼承 class
:宣告這是個類 extends :繼承      被繼承的子類叫派生類,父類叫超類      繼承只能單個繼承,即一個子類只能有一個父類      子類繼承父類,即使子類為空,也同樣可以通過子類去呼叫父類的方法       被繼承的可以不用必須重寫父類方法      子類實際上是將父類定義的更加的具體化的一種手段。父類表示的範圍大,而子類表示的範圍小
     在一個子類繼承的時候,實際上會繼承父類之中的所有操作(屬性、方    法),但是需要注意的是,對於所有的非私有(no private)操作屬於顯式繼承(可以直接利用物件操作),而所有的私有操作屬於隱式繼承(間接完成)。可   通過get和set方法對私有屬性進行設定 implements :(實現)介面     一個類可以實現多個介面,實現介面後必須要重寫介面中的方法 interface
:建立介面    建立的介面類中的方法必須是抽象方法,方法的修飾符只能是public     interface的應用場合   A. 類與類之前需要特定的介面進行協調,而不在乎其如何實現。  B. 作為能夠實現特定功能的標識存在,也可以是什麼介面方法都沒有的純粹標識。  C. 需要將一組類視為單一的 native :本地,原生方法(非Java實現)          有這個方法的原因:java本身執行速度不比c語言無法訪問到系統底層,所以就需要使用native關鍵字去呼叫.cpp檔案          作用:以java去呼叫其他程式語言 new:建立(new是個運算子和+-*/一樣有優先順序)      通常用來例項化物件(建立物件),通常來說當你建立一個類時,這個類在記憶體中是不存在的,當使用new這個方法時才能才記憶體中儲存這個類 static:靜態          static方法就是沒有this的方法。在static方法內部不能呼叫非靜態方法,反過來是可以的。而且可以在沒有建立任何物件的前提下,僅僅通過類本身來呼叫static方法。這實際上正是static方法的主要用途      (構造器不是靜態方法?) static的用途     static變數   (static變數也稱作靜態變數,靜態變數和非靜態變數的區別是:靜態變數被所有的物件所共享,在記憶體中只有一個副本,它當且僅當在類初次載入時會被初始化。而非靜態變數是物件所擁有的,在建立物件的時候被初始化,存在多個副本,各個物件擁有的副本互不影響。   static成員變數的初始化順序按照定義的順序進行初始化。    )      static程式碼塊   (static關鍵字還有一個比較關鍵的作用就是 用來形成靜態程式碼塊以優化程式效能。static塊可以置於類中的任何地方,類中可以有多個static塊。在類初次被載入的時候,會按照static塊的順序來執行每個static塊,並且只會執行一次。   為什麼說static塊可以用來優化程式效能,是因為它的特性:只會在類載入的時候執行一次。下面看個例子:
         isBornBoomer是用來這個人是否是1946-1964年出生的,而每次isBornBoomer被呼叫的時候,都會生成startDate和birthDate兩個物件,造成了空間浪費,如果改成這樣效率會更好:   因此,很多時候會將一些只需要進行一次的初始化操作都放在static程式碼塊中進行。 static的誤區       1.java中的static和c語言中的static不同不會改變方法或屬性的作用域       2.static所修飾的方法或屬性不能被this所呼叫       3.但是在Java中切記: static是不允許用來修飾區域性變數。不要問為什麼,這是Java語法的規定。 有關static的面試題 strictfp:嚴格,精準(的意思是FP-strict,也就是說精確浮點的意思)被此方法註明的將嚴格計算         你可以將一個類、介面以及方法宣告為strictfp,但是不允許對介面中的方法以及建構函式宣告strictfp關鍵字,例如下面的程式碼: 1. 合法的使用關鍵字strictfp strictfp interface A {} public strictfp class FpDemo1 {     strictfp void f() {} } 2. 錯誤的使用方法 interface A {     strictfp void f(); } public class FpDemo2 {     strictfp FpDemo2() {} }          一旦使用了關鍵字strictfp來宣告某個類、介面或者方法時,那麼在這個關鍵字所宣告的範圍內所有浮點運算都是精確的,符合IEEE-754規範的。例如一個類被宣告為strictfp,那麼該類中所有的方法都是strictfp的。        主要的作用的是確保當程式移植到其他 不同的Java實現或硬體平臺, 而一旦使用了strictfp來宣告一個類、介面或者方法時,那麼所宣告的範圍內Java的編譯器以及執行環境會完全依照浮點規範IEEE-754來執行。      結論 1.strictfp 翻譯為“精確的浮點”不夠貼切,容易引起誤解。 2.strictfp關鍵字的使用 IEEE754 沒有直接因果關係。 IEEE 754 ,是 IEEE 制定的,而不是 J2EE 標準 :) 3.使用 strictfp 關鍵字的目的,是保證平臺移植之後,浮點運算結果是一致的。 synchronized:執行緒,同步 transient:短暫
  1. 序列化:就是當資料以流的形式進行傳輸的時候生產的位元組碼
  2. 反序列化:就是將產生的位元組碼反向讀取
    這個關鍵字的作用就是當你要對某資料以流的形式進行傳輸時遮蔽掉被修飾的關鍵字,只要是非序列化操作則不影響資料的互動 volatile:易失        大概意思是保持了併發程式設計中三個特性(原子性,可見性,有序性)中的可見性的保持。        一旦一個共享變數(類的成員變數、類的靜態成員變數)被volatile修飾之後,那麼就具備了兩層語義:   1)保證了不同執行緒對這個變數進行操作時的可見性,即一個執行緒修改了某個變數的值,這新值對其他執行緒來說是立即可見的。   2)禁止進行指令重排序。        https://www.cnblogs.com/dolphin0520/p/3920373.html