Java基礎自學筆記——第十章:面向對象思考

第十章:面向對象思考

一.面向對象

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類各有千秋,正則表達時在本章只是提了一下,這是一塊非常實用的功能,奈何本人能力有限,顧慮講解不夠全面,大家大可面向百度編程此方面內容,量大全面。

加油!第十一章待更……

發佈了12 篇原創文章 · 獲贊 13 · 訪問量 3418
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章