面向對象編程(一)程序員
1、繼承正則表達式
1. 在類圖表示中,使用一個分爲三塊的矩形表示一個類。矩形的第一塊表示類名,第二塊描述這個類的屬性及屬性的數據類型,第三塊描述這個類的操做,也就是方法以及返回類型。 編程
2. 訪問控制數組
修飾符 類自身 同包內 子類 全部其餘類app
private Yesthis
default Yes Yesspa
protected Yes Yes Yes調試
public Yes Yes Yes Yescode
3. 覆蓋方法的注意點:對象
方法覆蓋必須保證方法名、返回類型、參數列表都必須相同。另外,子類中的覆蓋方法的可訪問範圍不能比其在父類中被覆蓋的方法的訪問範圍小
4. 方法的重載必須注意:
Ø 方法名必須相同
若是方法名都不一樣,重載方法就根本無從談起。
Ø 參數列表必須不一樣(參數的類型或者個數不一樣便可)
調用語句的參數列表之間的差異必須足夠清晰。例如println(inti) println(int k)就徹底不是重載,而是重複了,雖然參數名稱不一樣,但參數列表的類型是相同的。
返回類型能夠不一樣,也能夠相同
5. 可變參數的方法:
public double avg(int... nums){}
6. 調用父類構造器:
注意:a.super()或this()調用必須放在構造器的第一行。然而,super 和this 調用不能同時顯式存在在同一個構造器內,若是顯式調用了super,就不能再寫this 調用;一樣有了this 調用就不能顯示調用super。
b.不能繼承構造器。儘管子類從父類集成了全部方法和變量,但它不能繼承構造器。一個類只有兩種方法得到構造器:編寫構造器或者因爲沒有編寫任何構造器而得到一個默認構造器。子類只能調用父類構造器。
7. 構造和初始化對象的完整過程:
對象初始化是一個至關複雜的過程。首先,爲整個對象分配內存和爲屬性賦默認初始值。(靜態變量優先於普通變量)而後,調用頂層構造器,而且按照以下步驟遞歸繼承樹:
1、綁定構造器參數
2、若是顯式調用this(),遞歸調用,而後跳至第5 步
3、遞歸調用隱式或顯式的super(…)(Object 除外,由於Object 沒有父類,Object 是全部類的父類,將在下一節做詳細介紹)。
4、執行顯式的實例變量初始化。
5、執行當前構造器的構造體。
例:構造new Manager(1, 「Burns」, 10000, 8000)的步驟
1. 基本初始化
1.1爲整個Manager對象分配內存
1.2將全部屬性初始化爲默認初始值
2. 調用構造器:Manager(int id, String name, double salary, double bonus)
2.1綁定構造器參數 id=1, name=「Burns」, salary=10000, bonus=8000
2.2沒有顯式的this()調用
2.3調用 Employee(int id, String name, double salary)的super(id, name, salary)
2.3.1 綁定構造器參數 id=1, name=「Burns」, salary=10000
2.3.2 沒有顯式的this()調用
2.3.3 隱式調用Object的super()
2.3.3.1 不須要參數綁定
2.3.3.2 沒有this()調用
2.3.3.3 沒有super()調用(Object是根)
2.3.3.4 沒有Object的顯式變量初始化
2.3.3.5 沒有要調用的方法體
2.3.4 顯式初始化Employee屬性(若是沒有則繼續使用默認初始值)
2.4顯式初始化Manager的屬性
2.5執行構造體this.bonus = 8000;
8. Object 類
Java 中,只有基本數據類型不是對象,其餘每一個類、數組等都是由Object 類擴展而來的
9. 強烈建議給每一個自定義類增長一個toString方法。這樣在調試過程當中能夠隨時輸出對象的狀態信息,並且對團隊開發的全部使用到該類的程序員有利。
2、 多態
1.多態的聲明:
Employee m = new Manager(); //也是合法的
可是這個時候使用變量m,只能訪問Employee 中的屬性和調用Employee 類中聲明的方法,而Manager部分的屬性和方法被隱藏。例如:
m.setBonus(8000); //錯誤
2.虛方法調用:
若是出現以下狀況:
Employee e = new Manager();
e.getDetails();
事實上雖然聲明的e 是Employee 類型,但實際上實例化出來的是Manager 對象。也就是說,得到的是運行時與變量引用的對象相關的行爲而不是編譯時的變量類型決定的。這一行爲一般稱爲虛擬方法調用。上面的示例中,執行的e.getDetails()源於對象的真實類型Manager,它將執行Manager 的getDetails()方法。
3.多態參數
多態參數是一個能夠接受普通對象的方法參數,這種參數除了能夠接收某個類的對象外還能接收該類任意子類的對象。
4.異類集合
Employee[] emp = new Employee[3];
emp[0] = new Employee(1, 「Homer」, 6000);
emp[1] = new Manager(2, 「Jam」, 8000);
emp[2] = new Programmer(3, 「Fred」, 6000);
5. Wrapper 類,裝箱和拆箱
a.各基本數據類型對應的Wrapper 類:
基本 Wrapper 默認值
byte Byte 0
short Short 0
int integer 0
long Long 0L
double Double 0.0D
float Float 0.0F
char character ‘\u0000’
Boolean Boolean false
拆包、裝包:
int myInt = 100;
Integer wInt = new Integer(myInt);
int p2 = wInt.intValue();
//把基本數據轉換成字符串引用類型
String s = String.valueOf(100);
int x = Integer.valueOf(s).intValue();
或者
//取得字符串引用數據類型的數值
int x = Integer.parseInt(s);
3、 枚舉
public enum Season
{
SPRING("Spring"),
SUMMER("Summer"),
FALL("Fall"),
WINTER("Winter");
private String name;
private Season(String name) //必須標記爲private,只在枚舉類內部使用
{
this.name = name;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
}
PS:
1. * 正則表達式語法
*
* 字符
x 字符 x
字符類
[abc] a、b 或 c(簡單類)
[^abc] 任何字符,除了 a、b 或 c(否認)
[a-zA-Z] a 到 z 或 A 到 Z,兩頭的字母包括在內(範圍)
預約義字符類
. 任何字符(與行結束符可能匹配也可能不匹配)
\d 數字:[0-9]
\D 非數字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 單詞字符:[a-zA-Z_0-9]
\W 非單詞字符:[^\w]
邊界匹配器
^ 行的開頭
$ 行的結尾
Greedy 數量詞
X? X,一次或一次也沒有
X* X,零次或屢次
X+ X,一次或屢次
X{n} X,剛好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,可是不超過 m 次
Logical 運算符
XY X 後跟 Y
X|Y X 或 Y
(X) X,做爲捕獲組
*/
2. Integer num4 = 128;//autoBoxing 自動打包
Integer num5 = 128;
System.out.println(num4 == num5); //false
由於//-128~127 cache賦值 以外的爲new XXX(value)