【從零開始學(xué)Java】學(xué)習(xí)筆記day13.day14

Day13 ?封裝

1.1 封裝概述

概述

面向?qū)ο缶幊陶Z言是對(duì)客觀世界的模擬,客觀世界里成員變量都是隱藏在對(duì)象內(nèi)部的,外界無法直接操作和修改。封裝可以被認(rèn)為是一個(gè)保護(hù)屏障,防止該類的代碼和數(shù)據(jù)被其他類隨意訪問。要訪問該類的數(shù)據(jù),必須通過指定的方式。適當(dāng)?shù)姆庋b可以讓代碼更容易理解與維護(hù),也加強(qiáng)了代碼的安全性。

原則

屬性隱藏起來,若需要訪問某個(gè)屬性,提供公共方法對(duì)其訪問。

1.2 封裝的步驟

1.使用private關(guān)鍵字來修飾成員變量。

2.對(duì)需要訪問的成員變量,提供對(duì)應(yīng)的一對(duì)getXxx方法、SetXxx方法。

1.3 封裝的操作——private關(guān)鍵字

private是一個(gè)權(quán)限修飾符,代表最小權(quán)限??梢孕揎棾蓡T變量和成員方法。被private修飾后的成員變量和成員方法,只在本類中才能訪問。

private的使用格式

private 變量類型 變量名稱;

代碼如下:

public?class?Student?{??private?String?name;??private?int?age;}

提供getXxx方法/setXxx方法,可以訪問成員變量,代碼如下:

public?class?Student?{??private?String?name;??private?int?age;???public?void?setName(String?n) {?? ?name?=?n;??}???public?String?getName() {?? ?return?name;??}???public?void?setAge(int?a) {?? ?age?=?a;??}???public?int?getAge() {?? ?return?age;??}}

二this關(guān)鍵字和構(gòu)造方法

2.1 this關(guān)鍵字

我們發(fā)現(xiàn)setXxx方法中的形參名字并不符合見名知意的規(guī)定,那么如果修改與成員變量名一致,是否就見名知意了呢?代碼如下:

public?class?Student?{??private?String?name;??private?int?age;??public?void?setName(String?name) {?? ?name?=?name;??}???public?void?setAge(int?age) {?? ?age?=?age;??}}

形參變量名與成員變量名重名,導(dǎo)致成員變量名被隱藏,方法中的變量名,無法訪問到成員變量,從而賦值失敗。使用this關(guān)鍵字,解決這個(gè)重名問題。

this的含義

this代表所在類的當(dāng)前對(duì)象的引用(地址值),即對(duì)象自己的引用。

this使用格式

this.成員變量名;

使用this修飾方法中的變量,解決成員變量被隱藏的問題,代碼如下:

public?class?Student?{??private?String?name;??private?int?age;???public?void?setName(String?name) {?? ?//name = name;?? ?this.name?=?name;??}???public?String?getName() {?? ?return?name;??}???public?void?setAge(int?age) {?? ?//age = age;?? ?this.age?=?age;??}???public?int?getAge() {?? ?return?age;??}}

this內(nèi)存原理【理解】

this代表當(dāng)前調(diào)用方法的引用,哪個(gè)對(duì)象調(diào)用的方法,this就代表哪一個(gè)對(duì)象

示例代碼:

public?class?StudentDemo?{?? ?public?static?void?main(String[] args) {?? ? ? ?Student?s1?=?new?Student();?? ? ? ?s1.setName("林青霞");?? ? ? ?Student?s2?=?new?Student();?? ? ? ?s2.setName("張曼玉");?? ?}}

封裝思想【理解】

封裝是面向?qū)ο笕筇卣髦唬ǚ庋b,繼承,多態(tài))是面向?qū)ο缶幊陶Z言對(duì)客觀世界的模擬,客觀世界里成員變量都是隱藏在對(duì)象內(nèi)部的,外界是無法直接操作的

封裝原則:將類的某些信息隱藏在類內(nèi)部,不允許外部程序直接訪問,而是通過該類提供的方法來實(shí)現(xiàn)對(duì)隱藏信息的操作和訪問成員變量private,提供對(duì)應(yīng)的getXxx()/setXxx()方法

封裝好處通過方法來控制成員變量的操作,提高了代碼的安全性把代碼用方法進(jìn)行封裝,提高了代碼的復(fù)用性

2.2 構(gòu)造方法

當(dāng)一個(gè)對(duì)象被創(chuàng)建時(shí)候,構(gòu)造方法用來初始化該對(duì)象,給對(duì)象的成員變量賦初始值。

構(gòu)造方法的定義格式

修飾符?構(gòu)造方法名(參數(shù)列表){????// 方法體}

構(gòu)造方法的寫法上,方法名與它所在的類名相同。它沒有返回值,所以不需要返回值類型,甚至不需要void。使用構(gòu)造方法后,代碼如下:

public?class?Student?{??private?String?name;??private?int?age;??// 無參數(shù)構(gòu)造方法??public?Student() {} ??// 有參數(shù)構(gòu)造方法??public?Student(String?name,int?age) {?? ?this.name?=?name;?? ?this.age?=?age; ??}}

注意事項(xiàng)

如果你不提供構(gòu)造方法,系統(tǒng)會(huì)給出無參數(shù)構(gòu)造方法。

如果你提供了構(gòu)造方法,系統(tǒng)將不再提供無參數(shù)構(gòu)造方法。

構(gòu)造方法是可以重載的,既可以定義參數(shù),也可以不定義參數(shù)。

2.3 標(biāo)準(zhǔn)代碼——JavaBean

JavaBean是Java語言編寫類的一種標(biāo)準(zhǔn)規(guī)范。符合JavaBean的類,要求類必須是具體的和公共的,并且具有無參數(shù)的構(gòu)造方法,提供用來操作成員變量的set和get方法。

三API

3.1 API概述

API (Application Programming Interface) :應(yīng)用程序編程接口

Java API是一本程序員的字典,是JDK中提供給我們使用的類的說明文檔。這些類將底層的代碼實(shí)現(xiàn)封裝了起來,我們不需要關(guān)心這些類是如何實(shí)現(xiàn)的,只需要學(xué)習(xí)這些類如何使用即可。所以我們可以通過查詢API的方式,來學(xué)習(xí)Java提供的類,并得知如何使用它們。

3.2 如何使用API幫助文檔【應(yīng)用】

打開幫助文檔

找到索引選項(xiàng)卡中的輸入框

在輸入框中輸入Random

看類在哪個(gè)包下

看類的描述

看構(gòu)造方法

看成員方法


四String類

4.1 String類概述

`java.lang.String` 類代表字符串。Java程序中所有的字符串文字(例如`"abc"` )都可以被看作是實(shí)現(xiàn)此類的實(shí)例。

類String中包括用于檢查各個(gè)字符串的方法,比如用于比較字符串,搜索字符串,提取子字符串以及創(chuàng)建具有翻譯為大寫小寫的所有字符的字符串的副本。

4.2 String類的特點(diǎn)

字符串不變:字符串的值在創(chuàng)建后不能被更改。

String?s1?=?"abc";s1?+=?"d";//s1 = s1 + "d";System.out.println(s1); // "abcd" // 內(nèi)存中有"abc","abcd"兩個(gè)對(duì)象,s1從指向"abc",改變指向,指向了"abcd"。

因?yàn)镾tring對(duì)象是不可變的,所以它們可以被共享。

String?s1?=?"abc";String?s2?=?"abc";// 內(nèi)存中只有一個(gè)"abc"對(duì)象被創(chuàng)建,同時(shí)被s1和s2共享。

"abc"等效于char[] data={ 'a' , 'b' , 'c' },但是底層原理是字節(jié)數(shù)組( byte[] )

例如:?String?str?=?"abc";相當(dāng)于:?char?data[] =?{'a', 'b', 'c'}; ? ? String?str?=?new?String(data);// String底層是靠字符數(shù)組實(shí)現(xiàn)的。

4.3 String類的構(gòu)造方法【記憶】

常用的構(gòu)造方法

方法名說明

public String()創(chuàng)建一個(gè)空白字符串對(duì)象,不含有任何內(nèi)容

public String(char[] chs)根據(jù)字符數(shù)組的內(nèi)容,來創(chuàng)建字符串對(duì)象

public String(byte[] bys)根據(jù)字節(jié)數(shù)組的內(nèi)容,來創(chuàng)建字符串對(duì)象

String s = “abc”;直接賦值的方式創(chuàng)建字符串對(duì)象,內(nèi)容就是abc

示例代碼

public?class?StringDemo01?{?? ?public?static?void?main(String[] args) {?? ? ? ?//public String():創(chuàng)建一個(gè)空白字符串對(duì)象,不含有任何內(nèi)容?? ? ? ?String?s1?=?new?String();?? ? ? ?System.out.println("s1:"?+?s1);??? ? ? ?//public String(char[] chs):根據(jù)字符數(shù)組的內(nèi)容,來創(chuàng)建字符串對(duì)象?? ? ? ?char[] chs?=?{'a', 'b', 'c'};?? ? ? ?String?s2?=?new?String(chs);?? ? ? ?System.out.println("s2:"?+?s2);??? ? ? ?//public String(byte[] bys):根據(jù)字節(jié)數(shù)組的內(nèi)容,來創(chuàng)建字符串對(duì)象?? ? ? ?byte[] bys?=?{97, 98, 99};?? ? ? ?String?s3?=?new?String(bys);?? ? ? ?System.out.println("s3:"?+?s3);??? ? ? ?//String s = “abc”; 直接賦值的方式創(chuàng)建字符串對(duì)象,內(nèi)容就是abc?? ? ? ?String?s4?=?"abc";?? ? ? ?System.out.println("s4:"?+?s4);?? ?}}

4.4 創(chuàng)建字符串對(duì)象兩種方式的區(qū)別【理解】

通過構(gòu)造方法創(chuàng)建

通過new 創(chuàng)建的字符串對(duì)象,每一次 new 都會(huì)申請(qǐng)一個(gè)內(nèi)存空間,雖然內(nèi)容相同,但是地址值不同

直接賦值方式創(chuàng)建

以“”方式給出的字符串,只要字符序列相同(順序和大小寫),無論在程序代碼中出現(xiàn)幾次,JVM 都只會(huì)建立一個(gè) String 對(duì)象,并在字符串池中維護(hù)

4.5 字符串的比較:==號(hào)和equals的作用

==比較基本數(shù)據(jù)類型:比較的是具體的值

==比較引用數(shù)據(jù)類型:比較的是對(duì)象地址值

equals比較String類型: 比較的是對(duì)象的內(nèi)容是否相同

4.6常用方法

判斷功能的方法

public boolean equals (Object anObject):將此字符串與指定對(duì)象進(jìn)行比較。

public boolean equalsIgnoreCase (String anotherString):將此字符串與指定對(duì)象進(jìn)行比較,忽略大小寫。

[if !supportLists]·?[endif]

StringBuilder類

5.1 字符串拼接問題

由于String類的對(duì)象內(nèi)容不可改變,所以每當(dāng)進(jìn)行字符串拼接時(shí),總是會(huì)在內(nèi)存中創(chuàng)建一個(gè)新的對(duì)象。,如果對(duì)字符串進(jìn)行拼接操作,每次拼接,都會(huì)構(gòu)建一個(gè)新的String對(duì)象,既耗時(shí),又浪費(fèi)空間。為了解決這一問題,可以使用java.lang.StringBuilder類。

5.2 StringBuilder概述

查閱java.lang.StringBuilder的API,StringBuilder又稱為可變字符序列,它是一個(gè)類似于 String 的字符串緩沖區(qū),通過某些方法調(diào)用可以改變?cè)撔蛄械拈L(zhǎng)度和內(nèi)容。

原來StringBuilder是個(gè)字符串的緩沖區(qū),即它是一個(gè)容器,容器中可以裝很多字符串。并且能夠?qū)ζ渲械淖址M(jìn)行各種操作。

它的內(nèi)部擁有一個(gè)數(shù)組用來存放字符串內(nèi)容,進(jìn)行字符串拼接時(shí),直接在數(shù)組中加入新內(nèi)容。StringBuilder會(huì)自動(dòng)維護(hù)數(shù)組的擴(kuò)容。原理如下圖所示:(默認(rèn)16字符空間,超過自動(dòng)擴(kuò)充)

5.3 StringBuilder類和String類的區(qū)別

String類:內(nèi)容是不可變的

StringBuilder類:內(nèi)容是可變的

5.4 構(gòu)造方法

根據(jù)StringBuilder的API文檔,常用構(gòu)造方法有2個(gè):

public StringBuilder():構(gòu)造一個(gè)空的StringBuilder容器。

public StringBuilder(String str):構(gòu)造一個(gè)StringBuilder容器,并將字符串添加進(jìn)去

2.5 常用方法

StringBuilder常用的方法有3個(gè):

public StringBuilder append(...):添加任意類型數(shù)據(jù)的字符串形式,并返回當(dāng)前對(duì)象自身。

public StringBuilder reverse():返回反轉(zhuǎn)的字符序列

public String toString():將當(dāng)前StringBuilder對(duì)象轉(zhuǎn)換為String對(duì)象。

5.6 StringBuilder和String相互轉(zhuǎn)換

StringBuilder轉(zhuǎn)換為String

public String toString():通過 toString() 就可以實(shí)現(xiàn)把 StringBuilder 轉(zhuǎn)換為 String

String轉(zhuǎn)換為StringBuilder

public StringBuilder(String s):通過構(gòu)造方法就可以實(shí)現(xiàn)把 String 轉(zhuǎn)換為 StringBuilder

Day14 一ArrayList類

[if !supportLists]1.1?[endif]引入——對(duì)象數(shù)組

[if !supportLists]1.2?[endif]到目前為止,我們想存儲(chǔ)對(duì)象數(shù)據(jù),選擇的容器,只有對(duì)象數(shù)組。而數(shù)組的長(zhǎng)度是固定的,無法適應(yīng)數(shù)據(jù)變化的需求。為了解決這個(gè)問題,Java提供了另一個(gè)容器java.util.ArrayList集合類,讓我們可以更便捷的存儲(chǔ)和操作對(duì)象數(shù)據(jù)。

1.2 ArrayList類

java.util.ArrayList是大小可變的數(shù)組的實(shí)現(xiàn),存儲(chǔ)在內(nèi)的數(shù)據(jù)稱為元素。此類提供一些方法來操作內(nèi)部存儲(chǔ)的元素。ArrayList中可不斷添加元素,其大小也自動(dòng)增長(zhǎng)。

1.3 ArrayList使用步驟

查看類

java.util.ArrayList <E>:該類需要import導(dǎo)入使后使用。

<E>,表示一種指定的數(shù)據(jù)類型,叫做泛型。E,取自Element(元素)的首字母。在出現(xiàn)E的地方,我們使用一種引用數(shù)據(jù)類型將其替換即可,表示我們將存儲(chǔ)哪種引用類型的元素。代碼如下:

ArrayList<String>,ArrayList<Student>

查看構(gòu)造方法

public ArrayList():構(gòu)造一個(gè)內(nèi)容為空的集合。

基本格式:

ArrayList<String>?list?=?new?ArrayList<String>();

在JDK 7后,右側(cè)泛型的尖括號(hào)之內(nèi)可以留空,但是<>仍然要寫。簡(jiǎn)化格式:

ArrayList<String>?list?=?new?ArrayList<>();

查看成員方法

public boolean add(E e):將指定的元素添加到此集合的尾部。

參數(shù)E e,在構(gòu)造ArrayList對(duì)象時(shí),<E>指定了什么數(shù)據(jù)類型,那么add(E e)方法中,只能添加什么數(shù)據(jù)類型的對(duì)象。

使用ArrayList類,存儲(chǔ)三個(gè)字符串元素,代碼如下:

public?class?Test02StudentArrayList?{??public?static?void?main(String[] args) {?? ?//創(chuàng)建學(xué)生數(shù)組?? ?ArrayList<String>?list?=?new?ArrayList<>();??? ?//創(chuàng)建學(xué)生對(duì)象?? ?String?s1?=?"曹操";?? ?String?s2?=?"劉備";?? ?String?s3?=?"孫權(quán)";??? ?//打印學(xué)生ArrayList集合?? ?System.out.println(list);??? ?//把學(xué)生對(duì)象作為元素添加到集合?? ?list.add(s1);?? ?list.add(s2);?? ?list.add(s3);??? ?//打印學(xué)生ArrayList集合?? ?System.out.println(list);??}}

1.4 常用方法和遍歷

對(duì)于元素的操作,基本體現(xiàn)在——增、刪、查。常用的方法有:

public boolean add(E e):將指定的元素添加到此集合的尾部。

public void add(int index,E element):在此集合中的指定位置插入指定的元素。

public boolean remove(Object o):刪除指定的元素,返回刪除是否成功

public E remove(int index):移除此集合中指定位置上的元素。返回被刪除的元素。

public E set(int index,E element):修改指定索引處的元素,返回被修改的元素。

public E get(int index):返回此集合中指定位置上的元素。返回獲取的元素。

public int size():返回此集合中的元素?cái)?shù)。遍歷集合時(shí),可以控制索引范圍,防止越界。

1.5 如何存儲(chǔ)基本數(shù)據(jù)類型

ArrayList對(duì)象不能存儲(chǔ)基本類型,只能存儲(chǔ)引用類型的數(shù)據(jù)。類似<int>不能寫,但是存儲(chǔ)基本數(shù)據(jù)類型對(duì)應(yīng)的包裝類型是可以的。所以,想要存儲(chǔ)基本類型數(shù)據(jù),<>中的數(shù)據(jù)類型,必須轉(zhuǎn)換后才能編寫

只有Integer和Character需要特殊記憶,其他基本類型只是首字母大寫即可。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 面向?qū)ο笾饕槍?duì)面向過程。 面向過程的基本單元是函數(shù)。 什么是對(duì)象:EVERYTHING IS OBJECT(萬物...
    sinpi閱讀 1,218評(píng)論 0 4
  • 1.import static是Java 5增加的功能,就是將Import類中的靜態(tài)方法,可以作為本類的靜態(tài)方法來...
    XLsn0w閱讀 1,421評(píng)論 0 2
  • java筆記第一天 == 和 equals ==比較的比較的是兩個(gè)變量的值是否相等,對(duì)于引用型變量表示的是兩個(gè)變量...
    jmychou閱讀 1,644評(píng)論 0 3
  • 1. 摘要 【本文目標(biāo)】(1)通過本文分析,了解Fomo3D游戲第一輪結(jié)束的交易攻擊流程及具體地址;(2)介紹“拒...
    筆名輝哥閱讀 1,543評(píng)論 1 51
  • 一、7年7個(gè)遠(yuǎn)方 在007群里看見眾籌去敦煌的文章后,心動(dòng)了,為一眼之念的月牙泉,為蒼茫戈壁的孤寂,也為體驗(yàn)徒步7...
    張瓊2018閱讀 553評(píng)論 4 3

友情鏈接更多精彩內(nèi)容