JavaRush /Java Blog /Random-TW /修飾符或如何在 Java 世界中施展魔法
Petr Gorskin
等級 22
Москва

修飾符或如何在 Java 世界中施展魔法

在 Random-TW 群組發布
銀河日好,同志們!這是我的第一篇星際手稿,由於我是工程師,所以一些概念的解釋可以用外星語言來完成。
修飾符或如何在 Java 世界中施展魔法 - 1
簡介 在我看來,Java 就像一條有門(包包)的無盡走廊。每扇門後面都有可用空間和一個文件櫃,其中存放了大量帶有創建物件的說明(類別)的魔法捲軸。每個捲軸都描述了一組特徵(變數)和能力(方法)-對類別本身或在其基礎上組裝的物件執行的操作(欄位)。在這個階段,讓我們把自己想像成巫師,試著創造一個全新的指令(類)。所以: 修飾符或如何在 Java 世界中施展魔法 - 2讓我們喝下智慧的靈丹妙藥(學習基礎知識)並開始寫說明。 存取和非存取修飾符 讓我們想像一下,任何指令和在其基礎上創建的對象,以及其特徵和能力,最初都會被神奇地迷住,即 他們將被分配特定的修飾符集。讓我們嘗試創建一個關於可能的魔法的指南。
  1. 描述類別、物件或欄位的可訪問性的存取修飾符是必需的:如果沒有存取修飾符,JVM(這是通用魔法的來源)會自動為套件分配一個預設標識符。

    從第二個修飾符開始,有非訪問修飾符,它們不是強制性的,也可能相互衝突(但首先要注意的是)。

  2. Static修飾符指示類別、物件或欄位是靜態的。但這是什麼意思?基本上我們會在田間嘗試。

    靜態變數稱為類別變量,對於該類別的所有實例都是唯一的。可以呼叫靜態方法,而無需建立聲明它們的物件。靜態類別用於將一個類別嵌套到另一個類別中,內部類別與外部類別之間的交互原理類似於方法(這是單獨討論的主題)。也可以用作物件內的單獨區塊。

  3. Final修飾符有效地向變數表明它是常數。對於方法 - 它們在繼承過程中不能被覆蓋,但對於類,這表明它不能從中繼承(不可變)。

    static 和final 修飾符適用於類別、物件和欄位。但是,有些修飾符僅適用於其中的某些修飾符(甚至僅適用於其中的一部分,因為變數和方法都是字段,但並非所有修飾符都適用於兩者)。打個比方,只有靴子和手套可以附魔速度(讓它們移動得更快),但帽子附魔速度是沒有意義的(宇宙監督委員會(編譯器)不會允許)。

  4. Abstract 修飾符僅適用於方法和類別。抽象方法是沒有實現(主體)的方法。

    如果一個類別被標記為抽象,則它要么包含抽象方法,要么被用來阻止創建該類別的實例。如果我們打個比方,在說明的中間你可以看到標題“為物件著色”,之後就沒有任何說明了。那些。使用此指令,您可以建立一個對象,也可以為它著色,但此特定指令沒有說明如何操作(根據此對象編寫您自己的創建紅色對象的指令,並描述如何為其著色)。

在多執行緒環境中工作時,可以使用特殊修飾符:
  1. Synchronized 修飾符僅用於方法。它的存在表明一次只有一個線程可以執行它。也可以用作物件內的單獨程式碼區塊(指定同步物件)。

  2. volatile修飾符-僅用於變數。建議用於可以被多個執行緒同時使用的變數。具有此類修飾符的變數每次更改時都會立即從處理器快取複製到主內存,從而允許並行線程接收最新值。

    值得注意的是,易失性適用於只有一個執行緒可以寫入變量,而其餘執行緒只能讀取變數的情況。對於其他情況,最好將synchronized修飾符加入寫入易失性變數的方法。

  3. Transient修飾符–僅適用於變數。這個修飾符標記了序列化物件時需要跳過的變數(這是一個非常聰明的過程,原則上,您可以自己閱讀它...)*

    * - 我在第 17 級寫了這篇文章,直到那時,序列化作為一個過程還沒有被描述過,所以我建議你在必要時自己研究一下,而不是複製貼上。

衝突修飾符 對 除了修飾符對各種類別、物件和欄位的適用性之外,還存在著衝突對的概念。假設用力量附魔頭盔會使其變重,同時您又想將其附魔變輕。一個與​​另一個不適合。
  1. Final和Volatile - 當涉及變數時,我們不能同時說它是final(常數)並且多個線程有能力改變它......畢竟,它是常數,並且在任何時候線程都可以讀取它,但沒有一個線程可以改變常數(通用監督委員會不會允許)。
  2. Final 和 Abstract - 類別和方法不能同時是抽象的(這在大多數情況下意味著需要澄清它們的實作)和 Final,即 不可變的。事實證明,說明書說明如何用任何材料(抽象部分)製造一個良好耐用的頭盔,但為此其中不能有任何孔(最終強制部分,無法更改)。
  3. 抽象和靜態- 抽象方法不能同時是靜態的或同步的。靜態抽象方法沒有任何意義,因為它不僅不執行任何操作,而且還屬於整個類別 - 結果是一個無用的東西。
  4. 抽象與同步- 將工作與不執行任何操作的方法同步有什麼意義?
總結 那麼,修飾符的描述就結束了,所有的衝突都已經解決了,現在你可以用備忘單 - 結界圖來鞏固結果:總之 修飾符或如何在 Java 世界中施展魔法 - 3,我想說寫這篇文章是我的願望的實現研究修飾符。體驗是否成功,由你來判斷。我正在等待您改進/糾正它的建議,也許我們將一起將其製作成一本對初學者 Java 玩家非常有用的手冊。
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION