一、對象導論 1:多態的可互換對象 面向對象程式設計語言使用了後期綁定的概念。 當向對象發送消息時,被調用的代碼直到運行時才能確定。也叫動態綁定。 2:單根繼承結構 所有的類最終都繼承自單一的基類,這個終極基類的名字就是Object 3:對象的創建和生命期 對象的數據處於作用域,Java完全採用了動 ...
一、對象導論
1:多態的可互換對象
面向對象程式設計語言使用了後期綁定的概念。
當向對象發送消息時,被調用的代碼直到運行時才能確定。也叫動態綁定。
2:單根繼承結構
所有的類最終都繼承自單一的基類,這個終極基類的名字就是Object
3:對象的創建和生命期
對象的數據處於作用域,Java完全採用了動態記憶體分配方式(基本類型只是一種特例)
二、一切都是對象
1:基本類型
基本類型是一個並非是引用的“自動”變數。這個變數直接存儲“值”,並置於堆棧中
2:Java中的數組
Java確保數組會被初始化。而且不能在它的範圍之外被訪問
3:作用域(scope)
Java對象不具備和基本類型一樣的生命周期。當用new創建一個Java對象時,它可以存活於作用域之外
{
String s = new String("a string"); } // End of scope
引用 s
在作用域終點就消失了。然而,s
指向的 String 對象仍繼續占據記憶體空間
import 關鍵字
指示編譯器導入一個包,也就是一個類庫,Java中所有的代碼都必須寫在類里。特定類 java.lang
會被自動導入到每一個Java文件中。
5:static 關鍵字
- 只想為某一特定域分配單一存儲空間,而不去考慮空間要創建多少對象,甚至根本就不創建任何對象。
- 希望某個方法不與包含它的類的任何對象關聯在一起。也就是說,即使沒有創建對象,也能夠調用這個方法。
static
作用於欄位時,會改變數據的創建方式static
方法的一個重要用法就是在不創建任何對象的前提下就可以調用它;static
方法就是沒有this
的方法,不能直接調用非靜態方法,但可以傳遞一個對象引用到靜態方法里,然後通過這個引用(和this
效果相同)來調用非靜態方法和訪問非靜態數據成員。。
三、關係操作符
1:==
和 !=
比較的是對象的引用
2:特殊方法equals()
的預設行為也是比較引用
四、控制執行流程
1:if else
2:switch
JDK1.7開始,switch開始支持String作為選擇因數。在switch語句中,String的比較用的是String.equals()
。
因此,需要註意,傳給switch的String變數不能為null,同時switch的case子句中使用的字元串也不能為null
五、初始化與清理
1:方法重載
重載方法,方法名相同,形式參數列表不同(參數列表又叫參數簽名,包括參數的類型、參數的個數和參數的順序,只要有一個不同就叫做參數列表不同)
2:重載約束
- 聲明為final的方法不能被重載
- 聲明為static的方法不能重載,但是能夠被再次聲明。
- 重載方法的返回類型可以相同也可以不同,但僅返回類型不同不足以成為方法的重載。
class Animal {
public static void walk() { System.out.println("Animal行走方法"); }
}
public class Horse extends Animal {
public void walk(String s) {
System.out.println("Horse四條腿行走");
}
public static void main(String [] args) {
new Horse().walk("");
}
}
class Animal {
public static void walk() { System.out.println("Animal行走方法"); }
}
public class Horse extends Animal {
public static void walk() { //重新定義
System.out.println("Horse四條腿行走");
}
public static void main(String [] args) {
new Horse().walk();
}
}
3:成員初始化
有變數在使用前都能得到恰當的初始化。
Java 中類的成員變數會被自動初始化,但是方法裡頭的局部變數不會被自動初始化
自動初始化的進行,它將在構造器被調用之前發生
成員變數是基本類型,Java會自動初始化初值0;
成員變數是引用類型,Java會自動初始化初值null;
4:對象的創建過程
類載入檢查-->分配記憶體-->初始化零值-->設置對象頭-->執行成員變數的初始化-->執行init方法,執行構造方法
5:數組初始化
初始化:
int[] a = new int[3];
初始化各元素值為0
,對於boolean
,初始值為false
;int[] a = {1, 2, 3};
初始化元素分別為1, 2, 3
;
六、訪問許可權控制
- 同一個.java文件,只能有一個與文件同名的public類,可以有其它非public類;
- 同一個package內的不同文件中的類,可以互相訪問。
- 不同package中的類,如需訪問,需要使用全限定名,如biz.superalloy.MyClass或通過import把biz.superalloy包引進來;
- default有時候也稱friendly,它是針對本包訪問而設計的
- 類中的成員變數,不聲明訪問修飾符時,為“包訪問許可權”,有時也表示friendly,同一個文件的不同類之間可以互相訪問。
- 如果沒能為類訪問許可權指定一個訪問修飾符,它將會預設得到包訪問許可權。
- 1. public修飾符具有最大的訪問許可權,可以訪問任何一個CLASSPATH下的類,介面、異常等。它往往對於對外的情況,也就是對象或類對外的一種介面形式。
- 2. default有時候也稱friendly,它是針對本包訪問而設計的,任何處於本包下的類,介面,異常等,都可以互相訪問,即使是父類沒有用protected修飾的成員也可以。
- 3. protected修飾符它的主要作用就是保護子類的。它的含義在於子類可以使用它修飾的成員,其他的不可以,它相當於傳遞給子類的一種繼承的東西。
- 4. private修飾符它的訪問許可權僅限於類的內部,是一種封裝(Java的三大特點之一,繼承,封裝和多態)的體現。
七、復用類
1:@Override註解-它的作用是告訴編譯器我想重寫這個方法,避免不必要的異常
2:final關鍵字-使用到final的三種情況:數據、方法和類
- final 基本類型,數據編譯期常量在定義(聲明)時必須對其賦值(聲明時也可以不賦(此時叫空白final),但必須在構造器中賦值,所以final域在使用前總是被初始化)。
- final常量常與
static
一起使用,強調只有一份。 - final 對象引用
- final參數這一特性主要用來向匿名內部類傳遞數據
- final方法-鎖定方法,以防任何繼承類修改它的含義。這是出於設計的考慮;
- 類中所有的
private
方法都隱式地指定為是final
的。由於無法取用private
方法,所以也就無法覆蓋它 - final類不希望它有子類。因為final類禁止繼承,所以final類中所有的方法都隱式指定為是final的,因為無法覆蓋它們
3:初始化及類的載入
類的代碼在初次使用時才載入,通常是指載入發生於構造類的第一個對象之時,但是當訪問static域或static方法時,也會發生載入
(構造器也是static方法,儘管static關鍵字並沒有地寫出來。因此更準確地講,++類是在其任何static成員被訪問時載入的++。)
4:初始化
初次使用之處也是staic初始化發生之處