Java语言程序设计(基础篇) 第十章 面向对象思考
第十章 面向?qū)ο笏伎?/h1> 10.2 類的抽象和封裝
1.類的抽象是指將類的實(shí)現(xiàn)和類的使用分離開,實(shí)現(xiàn)的細(xì)節(jié)被封裝并且對(duì)用戶隱藏,這被稱為類的封裝。
2.從類外可以訪問的方法和數(shù)據(jù)域的集合以及預(yù)期這些成員如何行為的描述,合稱為類的合約(class's contract)。
3.實(shí)現(xiàn)的細(xì)節(jié)經(jīng)過封裝,對(duì)用戶隱藏起來,這稱為類的封裝(class encapsulation)。
?
10.3 面向?qū)ο蟮乃伎?/h4>
面向過程的范式重點(diǎn)在于設(shè)計(jì)方法。面向?qū)ο蟮姆妒綄?shù)據(jù)和方法耦合在一起構(gòu)成對(duì)象。使用面向?qū)ο蠓妒降能浖O(shè)計(jì)重點(diǎn)在對(duì)象以及對(duì)對(duì)象的操作上。
10.4 類的關(guān)系
為了設(shè)計(jì)類,需要探索類之間的關(guān)系。類中間的關(guān)系通常是關(guān)聯(lián)、聚合、組合以及繼承。
10.4.1 關(guān)聯(lián)
1.關(guān)聯(lián)是一種常見的二元關(guān)系,描述兩個(gè)類之間的活動(dòng)。
2.關(guān)聯(lián)中涉及的每個(gè)類可以給定一個(gè)多重性(multiplicity),放置在類的邊上用于給定UML圖中關(guān)系所涉及的類的對(duì)象數(shù)。
10.4.2 聚集和組合
1.聚集是關(guān)聯(lián)的一種特殊形式,代表了兩個(gè)對(duì)象之間的歸屬關(guān)系。聚集建模has-a關(guān)系。所有者對(duì)象稱為聚集對(duì)象,它的類稱為聚集類。而從屬對(duì)象稱為被聚集對(duì)象,它的類稱為被聚集類。
2.一個(gè)對(duì)象可以被多個(gè)其他的聚集對(duì)象所擁有。如果一個(gè)對(duì)象只歸屬于一個(gè)聚集對(duì)象,那么它和聚集對(duì)象之間的關(guān)系就稱為組合(composition)。
?
10.6 示例練習(xí):設(shè)計(jì)棧類
棧(stack)是一種以“后進(jìn)先出”的方式存放數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。
?
10.7 將基本數(shù)據(jù)類型值作為對(duì)象處理
1.基本數(shù)據(jù)類型值不是一個(gè)對(duì)象,但是可以使用Java API中的包裝類來包裝成一個(gè)對(duì)象。
2.大多數(shù)基本類型的包裝類的名稱與對(duì)應(yīng)的基本數(shù)據(jù)類型名稱一樣,第一個(gè)字母要大寫。Integer和Character例外。
3.包裝類沒有無參構(gòu)造方法。所有包裝類的實(shí)例都是不可變的,這意味著一旦創(chuàng)建對(duì)象后,它們的內(nèi)布值就不能再改變。
?
10.8 基本類型和包裝類型類型之間的自動(dòng)轉(zhuǎn)換
將基本類型值轉(zhuǎn)換為包裝類型對(duì)象的過程稱為裝箱(boxing),相反的轉(zhuǎn)換過程稱為開箱(unboxing)。Java允許基本類型和包裝類類型之間進(jìn)行自動(dòng)轉(zhuǎn)換。如果一個(gè)基本類型值出現(xiàn)在需要對(duì)象的環(huán)境中,編譯器會(huì)將基本類型值進(jìn)行自動(dòng)裝箱;如果一個(gè)對(duì)象出現(xiàn)在需要基本類型的環(huán)境中,編譯器會(huì)講對(duì)象進(jìn)行自動(dòng)開箱。這稱為自動(dòng)裝箱和自動(dòng)開箱。
10.9 BigInteger和BigDecimal類
BigInteger類和BigDecimal類可以用于表示任意大小和精度的整數(shù)或者十進(jìn)制數(shù)。
?
10.10 String類
String類對(duì)象是不可改變的。字符串一旦改變,內(nèi)容不能再改變。
10.10.1 構(gòu)造字符串
1.可以用字符串直接量或者字符數(shù)組創(chuàng)建一個(gè)字符串對(duì)象。
String message=new String("Welcome to Java");
String message="Welcome to Java";
2.String變量存儲(chǔ)的是對(duì)String對(duì)象的引用,String對(duì)象里存儲(chǔ)的才是字符串的值。嚴(yán)格地講,術(shù)語String變量、String對(duì)象和字符串值是不同的。但在大多數(shù)情況下,它們之間的區(qū)別是可以忽略的。為簡單期間,術(shù)語字符串將經(jīng)常被用于指String變量、 String對(duì)象和字符串的值。
?
10.10.2 不可變字符串與限定字符串
1.String對(duì)象是不可變的,它的內(nèi)容是不能改變的。
2.因?yàn)樽址诔绦蛟O(shè)計(jì)中是不可變的,但同時(shí)又會(huì)頻繁地使用,所以Java虛擬機(jī)為了提高效率并節(jié)約內(nèi)存,對(duì)具有相同字符序列的字符串直接量使用同一個(gè)實(shí)例。這樣的實(shí)例稱為限定的(interned)字符串。
?
10.10.3 字符串的替換和分隔
split方法可以從一個(gè)指定分隔符的字符串中提取標(biāo)識(shí)。
1 String[] tokens="Java#HTML#Perl".split("#"); 2 for (int i = 0; i < tokens.length; i++) { 3 System.out.print(tokens[i]+" "); 4 } 5 //顯示:Java HTML Perl
?
10.10.4 依照模式匹配、替換和分配
正則表達(dá)式(regular expression)(縮寫regex)是一個(gè)字符串,用于描述匹配一個(gè)字符串集的模式。
?
10.10.5 字符串與數(shù)組之間的轉(zhuǎn)換
1.字符串不是數(shù)組,但是字符串可以轉(zhuǎn)換成數(shù)組,反之亦然。為了將字符串轉(zhuǎn)換成一個(gè)字符數(shù)組,可以使用toCharArray方法。
char[] chars="Java".toCharArray();
?
2.為了將一個(gè)字符數(shù)組轉(zhuǎn)換成一個(gè)字符串,應(yīng)該使用構(gòu)造方法String(char[])或者方法valueOf(char[]);
1 String str=new String(new char[]{'j','a','v','a'}); 2 String str1=String.valueOf(new char[]{'j','a','v','a'});
10.10.6 將字符和數(shù)值轉(zhuǎn)換成字符串
可以使用Double.parseDouble(str)或者Integer.parseInt(str)將一個(gè)字符串轉(zhuǎn)換為一個(gè)double值或者一個(gè)int值,也可以使用字符串的連接操作符將字符或者數(shù)字轉(zhuǎn)換成字符串。另外一種將數(shù)字轉(zhuǎn)換為字符串的方法時(shí)使用重載的靜態(tài)valueOf方法。該方法可以用于將字符和數(shù)值轉(zhuǎn)換成字符串。
?
10.10.7 格式化字符串
String類包含靜態(tài)方法format方法,它可以創(chuàng)建一個(gè)格式化的字符串。
?
10.10 StringBuilder和StringBuffer類
1.一般來說,只要使用字符串的地方,都可以使用StringBuffer/StringBuilder類。StringBuffer/StringBuilder類比String類更靈活。可以給一個(gè)StringBuffer或StringBuilder中添加、插入或追加新的內(nèi)容,但是String類一旦創(chuàng)建,它的值就確定了。
2.除了StringBuffer中修改緩沖區(qū)的方法是同步的,這意味著只有一個(gè)任務(wù)被荀彧執(zhí)行方法外,StringBuilder類與StringBuffer類是很相似的。如果是多任務(wù)并發(fā)訪問,就使用StringBuffer,因?yàn)檫@種情況下需要同步以放置StringBuffer崩潰。而如果是單任務(wù)訪問,使用StringBuilder會(huì)更有效。StringBuffer和StringBuilder中的構(gòu)造方法和其他方法幾乎是完全一樣的。
?
轉(zhuǎn)載于:https://www.cnblogs.com/yang-young-young/p/6377148.html
總結(jié)
以上是生活随笔為你收集整理的Java语言程序设计(基础篇) 第十章 面向对象思考的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mongo索引
- 下一篇: Java 第三周总结