1. 程式人生 > >讀書筆記6-《crazy java》

讀書筆記6-《crazy java》

instanceof運算子
1. 運算子的前一個操作是一個引用型別的變數,後一個操作是一個類或介面 ,用於判斷前面物件是否是後面的類或其子類、實現類的例項;
2. instance前面的運算元的編譯時型別必須是:要麼與後面的類相同,要麼是後面類的父類,要麼是後面型別的子類;
3. instance運算子可以保證某個引用變數是特定型別的例項外,還可以保證該變數沒有引用一個null,這樣就可以將該引用變數轉型為該變數,並呼叫該型別的方法,而不用擔心引發ClassCastExecption或NullPointerExecption。

java的強制型別轉換
在編譯階段,強制轉型要求轉型變數的編譯時型別必須為:
1. 被轉型變數的編譯時型別與目標型別相同
2. 被轉型變數的編譯時型別是目標型別父類
3. 被轉型變數的編譯時型別是目標型別的子類,這種情況下可以自動向上轉型
強制轉型的編譯階段只關心引用變數的編譯時型別
在執行階段,被轉型變數所引用物件的實際型別必須是目標型別的例項,或者是目標型別的子類、實現類的例項,否則報錯ClassCastException

構造器
1. 構造器不能宣告返回值型別,也不能使用void宣告構造器沒有返回值;
2. 當為構造器宣告新增任何返回值型別或新增void宣告該構造器沒有返回值時,編譯器並不會提示這個構造器有錯誤,只會當做普通方法進行處理;
3. 構造器不負責建立java物件,只負責執行java的初始化,new關鍵字為java物件申請空間

建立java物件無需使用構造器:
1. 使用反序列化的方式恢復java物件
2. 使用clone方法複製java物件

單例類提供的readResolve()方法即使通過反序列化機制來恢復java例項,該方法保證反序列化時得到已有的java例項

java類的例項是可複製的兩個要求:


1. 該java類實現Cloneable介面;
2. 該java類提供clone()方法負責複製。

避免遞迴呼叫構造器:
1. 儘量不要在定義例項變數時指定例項變數的值為當前類的例項;
2. 儘量不要在初始化塊中建立當前類的例項;
3. 儘量不要在構造器內呼叫本構造器建立java物件。

選擇建構函式的精確匹配原則:當實際呼叫時傳入的實參同時滿足多個方法時,如果某個方法的形參要求引數範圍越小,那這個方法就越準確。

非靜態內部類的規則:
非靜態內部類必須寄生在外部類的例項中,沒有外部類物件,就不能產生非靜態內部類的物件。因此,非靜態內部類不可能有無引數的構造器,即使系統為非靜態內部類提供了一個預設的構造器,這個預設構造器也需要一個外部類形參。

系統在編譯階段總會為非靜態內部類的構造器增加一個引數,非靜態內部類的構造器的第一個形參總是外部類,因此呼叫非靜態內部類的構造器時必須傳入一個外部類物件作為引數,否則程式會引發執行是異常。

非靜態內部類不允許擁有靜態成員

static關鍵字:
1. static修飾的成員屬於類本身,而不屬於java物件
2. 當程式使用靜態內部類時,外部類相當於靜態內部類的一個包;
3. 靜態內部類不能訪問外部類的非靜態成員。

native方法依賴於具體實現的平臺。

相關推薦

讀書筆記6-《crazy java

instanceof運算子 1. 運算子的前一個操作是一個引用型別的變數,後一個操作是一個類或介面 ,用於判斷前面物件是否是後面的類或其子類、實現類的例項; 2. instance前面的運算元的編譯時型別必須是:要麼與後面的類相同,要麼是後面類的父類,要麼是

java並發編程實戰》讀書筆記6--取消與關閉

特殊 指令 1.5 搶占 用法 tor wid cto hook 這章的主要內容是關於如何使任務和線程安全,快速,可靠的停止下來。 7.1 任務取消 在Java中沒有一種安全的搶占方式來停止線程,但是可以使用一些協作機制,比如: 讓素數生成器運行1秒後取消(並不會剛好在運

讀書筆記-《Effective Java》第6條:消除過期的物件引用

記憶體洩漏的三種可能 1. 類自己管理記憶體,一旦元素被釋放掉,則該元素中包含的任何物件引用都應該被清空。 例如:ArrayList類的remove方法。  elementData[--size] = null; // clear to let GC do its wor

JAVA程式設計思想》讀書筆記6——訪問許可權控制

1、private修飾詞,表示成員是私有的,只有自身可以訪問;    2、protected,表示受保護許可權,體現在繼承,即子類可以訪問父類受保護成員,同時相同包內的其他類也可以訪問protected成員。    3、無修飾詞(預設),表示包訪問許可權(friendl

<C和指針---讀書筆記6>

返回值 log enter val 其他 9.png 筆記 align eight 指針 指針是一種變量,和int、float、char一樣,是一種基本的變量。只不過它比較抽象一些。 我們知道在C語言中,聲明一個變量a、b,編譯器會為其分配一個物理地址 addr_1 、ad

副本機制與副本同步------《Designing Data-Intensive Applications》讀書筆記6

一致性 不響應 rabbit 故障恢復 logs 啟動 markdown 分布式系統 觸發器 進入到第五章了,來到了分布式系統之中最核心與復雜的內容:副本與一致性。通常分布式系統會通過網絡連接的多臺機器上保存相同數據的副本,所以在本篇之中,我們來展開看看如何去管理和維護這

[隨筆][Java][讀書筆記][thinking in java][第十四章 類型信息]

found 構造 att main 數組 test 第一個 eating urn 主要理解如何在運行時獲取類型信息。主要有兩種方式:一是RTTI,假定我們在編譯時已經知道了所有的類型;二是反射機制,允許在運行時發現和使用類的信息。 14.1 為什麽需要RTTI 一個多

[隨筆][Java][讀書筆記][thinking in java][第十章 內部類]

10.6 效果 getc tps 啟動 implement bool 多個 tina 可以將一個類定義在另一個類的內部,這就是內部類。 10.1 創建內部類 public class Parcell { class Contents { priv

[隨筆][Java][讀書筆記][thinking in java][第十八章 Java I/O系統]

參數 數列 == tar 目錄樹 返回 匿名類 string 筆記 18.1 File類 目錄列表器。兩種方法使用File對象查看一個目錄列表。 import java.util.regex.*; import java.io.*; import java.util.*

python自然語言處理-讀書筆記6

# -*- coding:utf-8 -*- # __author__ = 'lipzhang' #4.1 回到基礎 #賦值 #等式 #條件語句 #all()函式和any()函式可以應用到一個連結串列(或其他序列),來檢查是否全部或任一項 目滿足一些條件: # sent = ['No',

RocketMQ讀書筆記6——可靠性優先的使用場景

【順序訊息】 順序消費是指訊息的產生順序和消費順序相同。 比如訂單的生成、付款、發貨,這三個訊息必須按順序處理才可以。   【順序訊息的分類】 全域性順序訊息和部分順序訊息。 上面訂單的例子,其實是部分順序訊息,只要保證同一個訂單ID的三個訊息能順序消費即可。   【全

讀書筆記-深入理解Java虛擬機器#2

一、物件已死 引用計數演算法,引用加1,失效減1;為0時被回收。 可達分析演算法,從GC Root開始搜尋,當一個物件在GC ROOT沒有任何引用鏈則物件不可用。 GC ROOT 物件包括下面幾種: 1.虛擬機器棧中引用的物件; 2.方法區中類靜態屬

《WCDMA空中介面技術》讀書筆記6: R99 通道與通道解碼

    工作在WCDMA RBS系統上很多年了,感覺RBS系統絕對是世界上最複雜的系統之一;除了要基於通訊原理和3GPP協議來實現,還要考慮到:空口資源、硬體資源、功率分配、系統容量、監控管理、系統排程... ...而一本好書《WCDMA空中介面技術》恰恰是對我這麼多年工作的

讀書筆記-《Effective Java》第10、11條:覆蓋toString方法與clone方法

第10條 始終要覆蓋toString方法 提供合適的輸出,會經常用到。 第11條 謹慎地覆蓋clone 特別注意(謹慎的源頭)    如果直接使用super.clone(),那麼基本資料型別會複製,但是物件、陣列這種型別就會只複製引用。 也就是說如果修改clo

讀書筆記-《Effective Java》第9條:覆蓋equals時總要覆蓋hashCode

如果覆蓋equals方法卻不覆蓋hashCode方法,那麼就很有可能出現兩個物件equals方法返回true,但hashCode卻不一致的情況,例如:在HashMap中取不到正確的value。 HashMap的get方法是用hashCode匹配的。 public V get(Obje

讀書筆記-《Effective Java》第8條:覆蓋equals時請遵守通用約定

如果覆蓋equals方法的目的是判斷物件之間是否相等,那麼使用超類(Object)的方法即可。 public boolean equals(Object obj) { return (this == obj); } 在覆蓋equals方法的時候,必須要遵守它的通用約

讀書筆記-《Effective Java》第5條:避免建立不必要的物件

 1. 這種寫法每次執行都會建立一個物件(存放於堆)。 String str1 = new String("ttt"); 改進後(存放於方法區常量池),當常量池已存在,則不會重複建立。 String str2 = "ttt"; 2. 應優先使用基本資料型別(int、long

讀書筆記-《Effective Java》第3條、第4條: 強化Singleton屬性—私有構造器或者列舉型別

第3條:用私有構造器或者列舉型別強化Singleton屬性 把構造器私有這個是單例基本要求,本條介紹了一種不知道為啥沒有流行起來的單例方式(實現Singleton的最佳方式),包含單個元素的列舉型別(INSTANCE不是關鍵字,寫別的也行) package org.test; p

讀書筆記-《Effective Java》第2條:遇到多個構造器引數時要考慮用構建器

當一個類有很多個屬性時,建立物件的時候要麼就先建立個物件然後給物件賦值,要麼就根據業務需要寫很多個構造器, 這樣的構造器可讀性差。就算用靜態工廠也得寫很多個,這時候就可以用構建器了。 例如: package org.test; public class People { pr

讀書筆記-《Effective Java》第1條:考慮用靜態工廠方法代替構造器

優勢 它們有名稱    構造器沒有名稱, 當一個類有多個構造器的時候就不容易分清楚哪個是自己想要的。 不必在每次呼叫它們的時候都建立一個新物件 如果新建立的物件的成員屬性是可以重用的, 那麼可以先把第一次建立的物件儲存起來,以後想用的時候就不用