第十章:面向對象思考
一.面向對象
1.面向過程的範式在於設計方法,面向對象的範式在於將數據和方法偶合在一起。
2.類的抽象是指類的實現和類的使用分開,實現的細節被封裝並對用戶隱藏,稱爲類的封裝。
二.類的關係
類之間的關係是關聯、聚合、組合和繼承
1.關聯:一種常見的二元關係,描述兩個類之間的活動
2.聚集是關聯的一種特殊形式,代表兩個對象之間的歸屬關係,例如學生與地址,一個對象可以被多個其他的聚集對象所擁有
3.如果一個對象指歸屬於一個聚集對象,那麼它和聚集對象之間的關係被稱爲組合,例如:學生和名字
三.將基本類型當做對象處理
1.基本類型:int double char……
包裝類:Integer Double Character……
每個包裝類都包含intValue()、doubleValue()等方法將對象“轉換”爲基本類型值
可以使用基本類型值和表示數值的字符串構造包裝類
compareTo()方法返回大於等於小於所對應的1、0、-1
public static void main(String[] args) {
// TODO Auto-generated method stub
Integer i = new Integer(3);
Double d = new Double(3.5);
Double d2 = new Double("3.5");
Double d3 = new Double("1.5");
Double d4 = new Double("8.5");
System.out.println(i.intValue());//3
System.out.println(d.doubleValue());//3.5
System.out.println(d2.doubleValue());//3.5
System.out.println(Double.valueOf("6.5"));//6.5
System.out.println(d.compareTo(d2));//0
System.out.println(d.compareTo(d3));//1
System.out.println(d.compareTo(d4));//-1
}
將字符串轉爲二進制、八進制、十進制、十六進制
//語法:
Integer i=Integer.parseInt(字符串,進制)//進制可以爲2,8,10,16
int i2=Integer.parseInt("011", 2);
System.out.println(i2);//3
//轉換爲16進制的第二種方法
System.out.println(String.format("%x", 26));//1a
注意
包裝類沒有無參構造
2.基本類型和包裝類型之間的自動轉換
基本—>包裝(裝箱)
包裝—>基本(開箱)
Integer x=new Integer(2);//等價於 Integer x=2 (自動裝箱)
//但是:
Double d=3;//錯誤
Double d=3.0//正確
四.BigInteger和BigDecimal對象
1.BigInteger和BigDecimal類可以表示任意大小和任意精度的整數或十進制數
2.通過new BigInteger(字符串)來創建
public static void main(String[] args) {
// TODO Auto-generated method stub
BigInteger bi = new BigInteger("1234567845678984327");
System.out.println(bi);//1234567845678984327
BigDecimal bd = new BigDecimal("3.14159265358979323846264338327950288");
System.out.println(bd);//3.14159265358979323846264338327950288
}
3.使用add substract multiply divids remainder 做加減乘除餘運算
4.注意:
BigDecimal如果結果不能終止,就會拋出異常。可以使用重載的divide(BigDecimal d,小數點後位數,除數)
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(fact(50));//返回50的階乘結果
//608281864034267560872252163321295376887552831379210240000000000
}
public static BigInteger fact(long x) {
BigInteger sum=BigInteger.ONE;//BigInteger.ONE=1;
for(int i=1;i<x;i++) {
sum=sum.multiply(new BigInteger(i+""));//使用multiply做乘法
}
return sum;
}
五.String類
String 對象是不可改變的,字符串一旦建立,內容就不可改變
String類有13個構造方法和多個處理字符串的方法
char[] c= {'j','a','v','a'};
String s=new String(c);
System.out.println(s);//java
String s1="welcome";//創建了一個對象,將Welcome放入了常量池中
String s2=new String("welcome");//新的對象 如果常量池中不存在welcome,則詞語局創建了兩個對象,分別是將Welcome放入常量池中,將new的對象放入堆中
String s3="welcome";//和s1指向同一個地址
System.out.println(s1==s2);//false
System.out.println(s1==s3);//true
字符串中常用方法:
String s="hello java";
System.out.println(s.replace('a', 'e'));//hello jeve
System.out.println(s.replaceFirst("l", "y"));//heylo java
System.out.println(s.replaceAll("l", "y"));//heyyo java
String[] list=s.split("o");
for(String i:list)
System.out.print(i+" ");//hell java
六.正則表達式
正則表達式:用某個模式來匹配、替換和分割一個字符串
將字符串轉爲字符數組:
String s="hello java";
char[] a=s.toCharArray();
for(char i:a)
System.out.print(i+" ");//h e l l o j a v a
將數組轉爲字符串
上文中有提到
通常使用matches、replace、replaceAll等方法,建議面向百度編程,更加全面
七.StringBuilder和StringBuffer類
1.可以給StringBuilder和StringBuffer類添加、插入、追加新的內容
2.StringBuffer適合執行多任務併發時,因爲它修改緩衝區是同步的,而StringBuilder執行單任務效率更高,剩餘兩個一模一樣
3.StringBuilder有3個構造方法和30多個處理字符串的方法
StringBuilder s=new StringBuilder();//創建一個容量爲16的空字符串構造器
StringBuilder s2=new StringBuilder(20);//指定容量
StringBuilder s3=new StringBuilder("hello java");//指定字符串
System.out.println(s.capacity());//16
System.out.println(s2.capacity());//20
提示:
如果一個字符串不需要改變,則用String,因爲String優化共享字符串
在計算機中字符串構造器就是字符數組,構造器的容量就是數組的大小,如果超出容量,就會創建一個容量爲2*(現有容量+1)的數組
如果容量過大,可以使用trimToSize()將容量降到實際大小
下面這個案例可以看到字符串和它的倒置竟然相等!!!
StringBuilder s=new StringBuilder("java is fun");
System.out.println(s.reverse());//nuf si avaj
System.out.println(s.equals(s.reverse()));//true
原因是StringBuilder沒有沒有重寫equals方法,而總是指向原先的對象
需要加toString方法來實現比較
System.out.println(s.toString().equals(s.reverse().toString()));//false
StringBuilder的其他方法就不過多介紹了,今後也會經常使用
八.總結
通過本章學習,我知道了面向對象的特點和類的四種關係,學會了基本類型和包裝類型的互相轉化,學會了自動裝箱與拆箱,學會了BigInteger類和BigDecimal類基礎的用法,學到了String類對字符串的處理和存儲機制,學到了StringBuilder和StringBuffer的區別和相同點,對字符串可以說是全方位服務,和String類各有千秋,正則表達時在本章只是提了一下,這是一塊非常實用的功能,奈何本人能力有限,顧慮講解不夠全面,大家大可面向百度編程此方面內容,量大全面。
加油!第十一章待更……