疯狂Java讲义第五版读书笔记
瘋狂Java講義第五版讀書筆記
文章目錄
- 瘋狂Java講義第五版讀書筆記
- 第一章:Java語言概述與開發(fā)環(huán)境
- 1.1、Java程序運(yùn)行機(jī)制
- 1.2、Java第一個(gè)程序
- 1.3、Java命名規(guī)范
- 1.3.1、包命名
- 1.3.2、類命名、接口命名、抽象命名
- 1.3.3、方法命名、變量命名
- 第二章:面向?qū)ο?/li>
- 2.1、程序設(shè)計(jì)的三種結(jié)構(gòu)
- 2.1.1、順序結(jié)構(gòu)
- 2.1.2、選擇結(jié)構(gòu)
- 2.1.3、循環(huán)結(jié)構(gòu)
- 2.2、面向?qū)ο蟮脑O(shè)計(jì)簡介
- 2.2.1、簡要描述:
- 2.2.2、 類的簡單定義
- 2.2.3、面向?qū)ο笈c面向過程
- 2.2.4、面向?qū)ο笕蠡咎卣?/li>
- 2.3、面向?qū)ο筇卣?/li>
- 2.3.1、類與對(duì)象
- 2.3.2、類的結(jié)構(gòu)關(guān)系
- 第三章:數(shù)據(jù)類型與運(yùn)算符
- 3.1、注釋
- 3.1.1、單行注釋
- 3.1.2、多行注釋
- 3.1.3、文件注釋
- 3.2、關(guān)鍵詞和標(biāo)識(shí)符
- 3.2.1、分號(hào)
- 3.2.2、花括號(hào)
- 3.2.3、方括號(hào)
- 3.2.4、圓括號(hào)
- 3.2.5、空格
- 3.2.6、圓點(diǎn)
- 3.2.7、關(guān)鍵詞
- 3.3、數(shù)據(jù)類型
- 3.3.1、Java語言說明
- 3.3.2、數(shù)據(jù)類型分類
- 3.3.2.1、基本數(shù)據(jù)類型
- 3.3.2.2、引用數(shù)據(jù)類型
- 3.4、運(yùn)算符
- 3.4.1、算術(shù)運(yùn)算符
- 3.4.2、關(guān)系運(yùn)算符
- 3.4.3、按位運(yùn)算符
- 3.4.4、邏輯運(yùn)算符
- 3.4.5、賦值運(yùn)算符
- 3.4.6、條件運(yùn)算符
- 第四章:流程控制與數(shù)組
- 4.1、流程控制
- 4.1.1、順序結(jié)構(gòu)
- 4.1.2、分支結(jié)構(gòu)
- 4.1.3、循環(huán)結(jié)構(gòu)
- 4.2、數(shù)組
- 4.2.1、數(shù)組簡要描述
- 4.2.2、數(shù)組的初始化
- 4.2.3、foreach循環(huán)
- 4.2.4、堆內(nèi)存和棧內(nèi)存
- 4.2.5、操作數(shù)組的工具類——Arrays
- 4.2.5.1、打印數(shù)組
- 4.2.5.2、數(shù)組排序
- 4.2.5.3、在數(shù)組中查找指定元素并返回其下標(biāo)
- 第五章:面向?qū)ο?/li>
- 5.1、類的初步理解
- 5.1.1、類的定義
- 5.1.2、類常見的基本格式
- 5.1.2.2、成員變量
- 5.1.2.1、方法
- 5.1.2.2、構(gòu)造器
- 5.1.2.3**補(bǔ)充** 參數(shù)傳遞問題
- 5.2、類的特征
- 5.2.1、封裝
- 5.2.1.1、this關(guān)鍵詞
- 5.2.1.2、簡要介紹
- 5.2.2、繼承
- 5.2.2.1、簡要說明
- 5.2.2.2、特點(diǎn)
- 5.2.3、多態(tài)
- 5.2.3.1、前提
- 5.2.3.2、示例
- 5.3、重要類的闡述
- 5.3.1、抽象類
- 5.3.2、內(nèi)部類
- 5.3.3、枚舉類
- 5.3.4、包裝類
- 5.4、lambda表達(dá)式
- 5.5、修飾符的適用范圍介紹
- 結(jié)語
第一章:Java語言概述與開發(fā)環(huán)境
1.1、Java程序運(yùn)行機(jī)制
Java程序要經(jīng)過先編譯、后解釋兩個(gè)步驟
Java執(zhí)行的兩個(gè)步驟
Java 語言里負(fù)責(zé)解釋執(zhí)行字節(jié)碼文件的是Java 虛擬機(jī)
JVM的作用很容易理解,就像有兩支不同的筆,但需要把同一個(gè)筆帽套在兩支不同的筆上,只有為這兩支筆分別提供一個(gè)轉(zhuǎn)換器,這個(gè)轉(zhuǎn)換器向上的接口相同,用于適應(yīng)同一個(gè)筆帽;向下的接口不同,用于適應(yīng)兩支不同的筆。在這個(gè)類比中,可以近似地理解兩支不同的筆就是不同的操作系統(tǒng),而同一個(gè)筆帽就是Java字節(jié)碼程序,轉(zhuǎn)換器角色則對(duì)應(yīng)JVM。類似地,也可以認(rèn)為JVM分為向上和向下兩個(gè)部分,所有平臺(tái)上的JVM向上提供給Java字節(jié)碼程序的接口完全相同,但向下適應(yīng)不同平臺(tái)的接口則互不相同。
jdk1.5版本以后不用去設(shè)置環(huán)境變量
1.2、Java第一個(gè)程序
public class Study {public static void main(String[] args) {System.out.println("hello world");} }1.3、Java命名規(guī)范
1.3.1、包命名
常采用頂級(jí)域名作為前綴,例如com,net,org,edu,gov,cn,io等,隨后緊跟公司/組織/個(gè)人名稱以及功能模塊名稱。下面是一些包命名示例:
package org.springframework.boot.autoconfigure.cloud package org.springframework.boot.util package org.hibernate.action package org.hibernate.cfg package com.alibaba.druid package com.alibaba.druid.filter package com.alibaba.nacos.client.config package com.ramostear.blog.web1.3.2、類命名、接口命名、抽象命名
類(Class)通常采用名詞進(jìn)行命名,且首字母大寫,如果一個(gè)類名包含兩個(gè)以上名詞,建議使用駝峰命名(CamelCase)法書寫類名,每個(gè)名詞首字母也應(yīng)該大寫。
public class UserDTO{ } class EmployeeService{ } class StudentDAO{ } class OrderItemEntity{ } public class UserServiceImpl{ } public class OrderItemController{ } public abstract class AbstractRepository<T>{ }1.3.3、方法命名、變量命名
public User getOne(){} private String nickName; private String mobileNumber; private Long id; private Long orderItemId;第二章:面向?qū)ο?/h2>
Java中萬物皆為對(duì)象
2.1、程序設(shè)計(jì)的三種結(jié)構(gòu)
不管是哪種結(jié)構(gòu),只有一個(gè)入口點(diǎn)a和一個(gè)出口點(diǎn)b
2.1.1、順序結(jié)構(gòu)
雖然Java是面向?qū)ο蟮木幊陶Z言,但Java的方法類似于結(jié)構(gòu)化程序設(shè)計(jì)的函數(shù),因此方法中代碼的執(zhí)行也是順序結(jié)構(gòu)。
2.1.2、選擇結(jié)構(gòu)
2.1.3、循環(huán)結(jié)構(gòu)
即先判斷后執(zhí)行,所以被稱為當(dāng)型循環(huán)
因?yàn)槭恰爸钡綏l件為假時(shí)結(jié)束循環(huán)”,是先執(zhí)行后判斷,所以被稱為直到型循環(huán)
2.2、面向?qū)ο蟮脑O(shè)計(jì)簡介
2.2.1、簡要描述:
? 面向?qū)ο笫且环N更優(yōu)秀的程序設(shè)計(jì)方法,它的基本思想是使用類、對(duì)象、繼承、封裝、消息等基本概念進(jìn)行程序設(shè)計(jì),采用面向?qū)ο蠓绞介_發(fā)的軟件系統(tǒng),其最小的程序單元是類,這些類可以生成系統(tǒng)中的多個(gè)對(duì)象,而這些對(duì)象則直接映像成客觀世界的各種事物。
2.2.2、 類的簡單定義
? 面向?qū)ο蟮能浖到y(tǒng)由多個(gè)類組成,類代表了客觀世界中具有某種特征的一類事物,這類事物往往有一些內(nèi)部的狀態(tài)數(shù)據(jù),面向?qū)ο蟮恼Z言不僅使用類來封裝一類事物的內(nèi)部狀態(tài)數(shù)據(jù),而且類會(huì)提供操作這些狀態(tài)數(shù)據(jù)的方法,還會(huì)為這類事物的行為特征提供相應(yīng)的實(shí)現(xiàn),這種實(shí)現(xiàn)也是方法。
等式:成員變量(狀態(tài)數(shù)據(jù))+方法(行為)=類定義
2.2.3、面向?qū)ο笈c面向過程
情景:豬八戒吃西瓜
在面向過程的程序世界里,一切以函數(shù)為中心,函數(shù)最大,因此這件事情會(huì)用如下語句來表達(dá):
吃(豬八戒,西瓜);
在面向?qū)ο蟮某绦蚴澜缋?#xff0c;一切以對(duì)象為中心,對(duì)象最大,因此件事情會(huì)用如下語句來表達(dá):
豬八戒.吃(西瓜)
面向?qū)ο蟾菀桌斫?/p>
2.2.4、面向?qū)ο笕蠡咎卣?/h4>
封裝(Encapsulation)、繼承(Inheritance)和多態(tài)(Polymorphism)
除此之外,抽象也是面向?qū)ο蟮闹匾糠?#xff0c;抽象就是忽略一個(gè)主題中與當(dāng)前目標(biāo)無關(guān)的那些方面,以便更充分地注意與當(dāng)前目標(biāo)有關(guān)的方面。
2.3、面向?qū)ο筇卣?/h3>
2.3.1、類與對(duì)象
具有相同或相似性質(zhì)的一組對(duì)象的抽象就是類,類是對(duì)一類事物的描述,是抽象的、概念上的定義;對(duì)象是實(shí)際存在的該類事物的個(gè)體,因而也稱為實(shí)例(instance)。
對(duì)象的抽象化是類,類的具體化就是對(duì)象
可以把類理解成某種概念、定義,它規(guī)定了某類對(duì)象所共同具有的數(shù)據(jù)和行為特征。
2.3.2、類的結(jié)構(gòu)關(guān)系
一般→特殊關(guān)系
這種關(guān)系就是典型的繼承關(guān)系,Java語言使用extends關(guān)鍵字來表示這種繼承關(guān)系,Java的子類是一種特殊
的父類。因此,這種一般→特殊的關(guān)系其實(shí)是一種“is a”關(guān)系。
整體→部分結(jié)構(gòu)關(guān)系
也被稱為組裝結(jié)構(gòu),這是典型的組合關(guān)系,Java語言通過在一個(gè)類里保存另一個(gè)對(duì)象的引用來實(shí)現(xiàn)這種組合關(guān)系。因此,這種整體→部分結(jié)構(gòu)關(guān)系其實(shí)是一種“has a”關(guān)系。
第三章:數(shù)據(jù)類型與運(yùn)算符
3.1、注釋
程序注釋是源代碼的一個(gè)重要部分,對(duì)于一份規(guī)范的程序源代碼而言,注釋應(yīng)該占到源代碼的1/3以上。
3.1.1、單行注釋
//public class Study { // public static void main(String[] args) { // System.out.println("hello world"); // } //}3.1.2、多行注釋
/* public class Study {public static void main(String[] args) {System.out.println("hello world");} }*/3.1.3、文件注釋
/*** @author * @date 2022/5/12 10:24*/3.2、關(guān)鍵詞和標(biāo)識(shí)符
3.2.1、分號(hào)
Java語言里對(duì)語句的分隔不是使用回車來完成的,Java語言采用分號(hào)(;)作為語句的分隔
Java語句可以跨越多行書寫,但一個(gè)字符串、變量名不能跨越多行
3.2.2、花括號(hào)
花括號(hào)的作用就是定義一個(gè)代碼塊,花括號(hào)的作用就是定義一個(gè)代碼塊,類定義部分必須放在一個(gè)代碼塊里,方法體部分也必須放在一個(gè)代碼塊里。除此之外,條件語句中的條件執(zhí)行體和循環(huán)語句中的循環(huán)體通常也放在代碼塊里
3.2.3、方括號(hào)
方括號(hào)的主要作用是用于訪問數(shù)組元素,方括號(hào)通常緊跟數(shù)組變量名,而方括號(hào)里指定訪問的數(shù)組元素的索引
3.2.4、圓括號(hào)
圓括號(hào)是一個(gè)功能非常豐富的分隔符:定義方法時(shí)必須使用圓括號(hào)來包含所有的形參聲明,調(diào)用方法時(shí)也必須使用圓括號(hào)來傳入實(shí)參值;不僅如此,圓括號(hào)還可以將表達(dá)式中某個(gè)部分括成一個(gè)整體,保證這個(gè)部分優(yōu)先計(jì)算;除此之外,圓括號(hào)還可以作為強(qiáng)制類型轉(zhuǎn)換的運(yùn)算符。
3.2.5、空格
Java語言中的空格包含空格符(Space)、制表符(Tab)和回車(Enter)等
3.2.6、圓點(diǎn)
圓點(diǎn)(.)通常用作類/對(duì)象和它的成員(包括成員變量、方法和內(nèi)部類)之間的分隔符,表明調(diào)用某個(gè)類或某個(gè)實(shí)例的指定成員
3.2.7、關(guān)鍵詞
Java一共包含51個(gè)關(guān)鍵字
在上面的51個(gè)關(guān)鍵字中,enum是從Java 5新增的關(guān)鍵字,用于定義一個(gè)枚舉。而goto和const這兩個(gè)關(guān)鍵字也被稱為保留字(reserved word),保留字的意思是,Java現(xiàn)在還未使用這兩個(gè)關(guān)鍵字,但可能在未來的Java版本中使用這兩個(gè)關(guān)鍵字;不僅如此,Java還提供了三個(gè)特殊的直接量(literal):true、false和null;Java語言的標(biāo)識(shí)符也不能使用這三個(gè)特殊的直接量。從Java 10開始引入的var并不是關(guān)鍵字,它相當(dāng)于一個(gè)可變的類型名(后面會(huì)述),因此var依然可作為標(biāo)識(shí)符。
3.3、數(shù)據(jù)類型
3.3.1、Java語言說明
Java語言是強(qiáng)類型(strongly typed)語言,強(qiáng)類型包含兩方面的含義:
① 所有的變量必須先聲明、后使用;
② 指定類型的變量只能接受類型與之匹配的值
注:變量定義——(修飾符)變量類型 變量名,可以有初始值也可無
var可以動(dòng)態(tài)進(jìn)行定義局部變量,局部變量要有初始值
編程的本質(zhì):是對(duì)內(nèi)存中數(shù)據(jù)的訪問和修改。程序所用的數(shù)據(jù)都會(huì)保存在內(nèi)存中,程序員需要一種機(jī)制來訪問或修改內(nèi)存中數(shù)據(jù)。這種機(jī)制就是變量,每個(gè)變量都代表了某一小塊內(nèi)存,而且變量是有名字的,程序?qū)ψ兞抠x值,實(shí)際上就是把數(shù)據(jù)裝入該變量所代表的內(nèi)存區(qū)的過程;程序讀取變量的值,實(shí)際上就是從該變量所代表的內(nèi)存區(qū)取值的過程。形象地理解:變量相當(dāng)于一個(gè)有名稱的容器,該容器用于裝各種不同類型的數(shù)據(jù)。
3.3.2、數(shù)據(jù)類型分類
3.3.2.1、基本數(shù)據(jù)類型
基本數(shù)據(jù)類型的表數(shù)范圍由小到大為
byte→short→char→int→long→float→double
char代表字符型,實(shí)際上字符型也是一種整數(shù)類型,相當(dāng)于無符號(hào)整數(shù)類型
1、大轉(zhuǎn)小要強(qiáng)制類型轉(zhuǎn)換,類型前面加(需要的轉(zhuǎn)換的類型),可能會(huì)引起溢出,從而造成數(shù)據(jù)丟失,也稱為縮小,但轉(zhuǎn)換小轉(zhuǎn)大可以直接進(jìn)行轉(zhuǎn)換
2、如果希望把基本數(shù)據(jù)類型轉(zhuǎn)為字符串類型,可以把基本類型的值和一個(gè)空字符串進(jìn)行連接
3、在通常情況下,字符串不能直接轉(zhuǎn)換為基本類型,但通過基本類型對(duì)應(yīng)的包裝類則可以實(shí)現(xiàn)把字符串轉(zhuǎn)換成基本類型
public class Study {public static void main(String[] args) {String a="55";int s = Integer.parseInt(a);System.out.println(s);} }4、boolean不能進(jìn)行轉(zhuǎn)換,boolean主要用于流程的控制,通常運(yùn)用int和double數(shù)據(jù)類型
Java規(guī)范并沒有強(qiáng)制指定boolean類型的變量所占用的內(nèi)存空間。雖然boolean類型的變量或值只要1位即可保存,但由于大部分計(jì)算機(jī)在分配內(nèi)存時(shí)允許分配的最小內(nèi)存單元是字節(jié)(8位),因此bit大部分時(shí)候?qū)嶋H上占用8位。
3.3.2.2、引用數(shù)據(jù)類型
引用類型包括類、接口和數(shù)組類型,還有一種特殊的null類型。所謂引用數(shù)據(jù)類型就是對(duì)一個(gè)對(duì)象的引用,對(duì)象包括實(shí)例和數(shù)組兩種。
3.4、運(yùn)算符
3.4.1、算術(shù)運(yùn)算符
| + | 求和 |
| - | 相減 |
| * | 乘積 |
| / | 商 |
| % | 求余數(shù)(求模) |
| ++ | 自加一 |
| – | 自減一 |
3.4.2、關(guān)系運(yùn)算符
| > | 大于 |
| >= | 大于等于 |
| < | 小于 |
| <= | 小于等于 |
| == | 等于 |
| != | 不等于 |
3.4.3、按位運(yùn)算符
此處省略一萬字
3.4.4、邏輯運(yùn)算符
| & | 邏輯與(可以翻譯成并且) | 兩邊都是true,結(jié)果才是true |
| │ | 邏輯或(可以翻譯成或者) | 有一邊是true,結(jié)果就是true |
| ! | 邏輯非(取反) | !true = false、!false = true |
| && | 短路與 | 兩邊都是true,結(jié)果才是true |
| ││ | 短路或 | 有一邊是true,結(jié)果就是true |
3.4.5、賦值運(yùn)算符
| = | 賦值 |
| += | 加等(原先的基礎(chǔ)上加上/追加這個(gè)數(shù)) |
| -= | 減等(同理) |
| *= | 乘等(同理) |
| /= | 除等(同理) |
| %= | 模等(同理) |
3.4.6、條件運(yùn)算符
布爾表達(dá)式 ? 表達(dá)式1 : 表達(dá)式2
判斷表達(dá)式是否成立,true則選擇表達(dá)式1,false則選擇表達(dá)式2
第四章:流程控制與數(shù)組
4.1、流程控制
4.1.1、順序結(jié)構(gòu)
程序從上到下逐行地執(zhí)行,中間沒有任何判斷和跳轉(zhuǎn)
4.1.2、分支結(jié)構(gòu)
if語句
使用布爾表達(dá)式或布爾值作為分支條件來進(jìn)行分支控制,放在if之后括號(hào)里的只能是一個(gè)邏輯表達(dá)式,即這個(gè)表達(dá)式的返回值只能是true或false
**注意:**使用if…else語句時(shí),一定要先處理包含范圍更小的情況
switch語句
用多個(gè)整型值進(jìn)行匹配,后面的控制表達(dá)式的數(shù)據(jù)類型只能是byte、short、char、int四種整數(shù)類型,枚舉類型和java.lang.String類型
4.1.3、循環(huán)結(jié)構(gòu)
while循環(huán)
do while循環(huán)
for循環(huán)
此處省略5000字
4.2、數(shù)組
4.2.1、數(shù)組簡要描述
數(shù)組也是一種數(shù)據(jù)類型,它本身是一種引用類型。
int[]就是一種數(shù)據(jù)類型,與int類型、String類型類似,一樣可以使用該類型來定義變量,也可以使用該類型進(jìn)行類型轉(zhuǎn)換等。使用int[]類型來定義變量、進(jìn)行類型轉(zhuǎn)換時(shí)與使用其他普通類型沒有任何區(qū)別。int[]類型是一種引用類型,創(chuàng)建int[]類型的對(duì)象也就是創(chuàng)建數(shù)組,需要使用創(chuàng)建數(shù)組的語法
4.2.2、數(shù)組的初始化
//靜態(tài)初始化和動(dòng)態(tài)初始化 int [] arrayName={22,33,33,22}; int[] array = new int[5];4.2.3、foreach循環(huán)
for(數(shù)據(jù)類型 自定義一個(gè)變量:變量){System.out.println(自定義一個(gè)變量); }4.2.4、堆內(nèi)存和棧內(nèi)存
當(dāng)一個(gè)方法執(zhí)行時(shí),每個(gè)方法都會(huì)建立自己的內(nèi)存棧,在這個(gè)方法內(nèi)定義的變量將會(huì)逐個(gè)放入這塊棧內(nèi)存里,隨著方法的執(zhí)行結(jié)束,這個(gè)方法的內(nèi)存棧也將自然銷毀。因此,所有在方法中定義的局部變量都是放在棧內(nèi)存中的;在程序中創(chuàng)建一個(gè)對(duì)象時(shí),這個(gè)對(duì)象將被保存到運(yùn)行時(shí)數(shù)據(jù)區(qū)中,以便反復(fù)利用(因?yàn)閷?duì)象的創(chuàng)建成本通常較大),這個(gè)運(yùn)行時(shí)數(shù)據(jù)區(qū)就是堆內(nèi)存。堆內(nèi)存中的對(duì)象不會(huì)隨方法的結(jié)束而銷毀,即使方法結(jié)束后,這個(gè)對(duì)象還可能被另一個(gè)引用變量所引用(在方法的參數(shù)傳遞時(shí)很常見),則這個(gè)對(duì)象依然不會(huì)被銷毀。只有當(dāng)一個(gè)對(duì)象沒有任何引用變量引用它時(shí),系統(tǒng)的垃圾回收器才會(huì)在合適的時(shí)候回收它。
4.2.5、操作數(shù)組的工具類——Arrays
給數(shù)組賦值:通過 fill 方法。
對(duì)數(shù)組排序:通過 sort 方法,按升序。
比較數(shù)組:通過 equals 方法比較數(shù)組中元素值是否相等
4.2.5.1、打印數(shù)組
public static void main(String[] args) {int [] array={11,2,5,9,3,4};System.out.println(array);System.out.println(Arrays.toString(array));}4.2.5.2、數(shù)組排序
public static void main(String[] args) {int [] array={11,2,5,9,3,4};System.out.println(Arrays.toString(array));Arrays.sort(array);System.out.println(Arrays.toString(array));}4.2.5.3、在數(shù)組中查找指定元素并返回其下標(biāo)
public class Test_02 {public static void main(String[] args) {int [] array={11,2,5,9,3,4};System.out.println(Arrays.binarySearch(array,5));} }第五章:面向?qū)ο?/h2>
5.1、類的初步理解
5.1.1、類的定義
類是面向?qū)ο蟮闹匾獌?nèi)容,類當(dāng)成一種自定義類型,可以使用類來定義變量,這種類型的變量統(tǒng)稱為引用變量。也就是說,所有類是引用類型。
5.1.2、類常見的基本格式
類中總體包含三種成員:構(gòu)造器,成員變量,方法
三種成員總體概括:成員變量用于定義該類或該類的實(shí)例所包含的狀態(tài)數(shù)據(jù),方法則用于定義該類或該類的實(shí)例的行為特征或者功能實(shí)現(xiàn)。構(gòu)造器用于構(gòu)造該類的實(shí)例,Java語言通過new關(guān)鍵字來調(diào)用構(gòu)造器,從而返回該類的實(shí)例。
構(gòu)造器是一個(gè)類創(chuàng)建對(duì)象的根本途徑,如果一個(gè)類沒有構(gòu)造器,這個(gè)類通常無法創(chuàng)建實(shí)例。如果程序沒有構(gòu)造器,系統(tǒng)將會(huì)提供。
5.1.2.2、成員變量
成員變量被分為類變量和實(shí)例變量兩種,定義成員變量時(shí)沒有static修飾的就是實(shí)例變量,有static修飾的就是類變量。其中類變量從該類的準(zhǔn)備階段起開始存在,直到系統(tǒng)完全銷毀這個(gè)類,類變量的作用域與這個(gè)類的生存范圍相同;而實(shí)例變量則從該類的實(shí)例被創(chuàng)建起開始存在,直到系統(tǒng)完全銷毀這個(gè)實(shí)例,實(shí)例變量的作用域與對(duì)應(yīng)實(shí)例的生存范圍相同。
5.1.2.1、方法
在前面幾個(gè)章節(jié)中我們經(jīng)常使用到 System.out.println(),那么它是什么呢?
println() 是一個(gè)方法。
System 是系統(tǒng)類。
out 是標(biāo)準(zhǔn)輸出對(duì)象。
這句話的用法是調(diào)用系統(tǒng)類 System 中的標(biāo)準(zhǔn)輸出對(duì)象 out 中的方法 println()。
靜態(tài)方法和非靜態(tài)方法
靜態(tài)方法是有static修飾的,可以直接通過類來進(jìn)行對(duì)方法的調(diào)用,通常把static修飾的成員變量和方法也稱為類變量、類方法。
非靜態(tài)方法是沒有static修飾的,調(diào)用方法的時(shí)候必須要進(jìn)行創(chuàng)建對(duì)象,擁有一個(gè)實(shí)例,通常把不使用static修飾的成員變量和方法也稱為實(shí)例變量、實(shí)例方法。
static相當(dāng)于一個(gè)標(biāo)志,有static修飾的成員屬于類本身,沒有static修飾的成員屬于該類的實(shí)例
5.1.2.2、構(gòu)造器
構(gòu)造器名必須要和類名相同,形參列表和方法是一樣的
5.1.2.3補(bǔ)充 參數(shù)傳遞問題
Java中只有值傳遞
了解引用傳遞
class Student{int id;String name; public void paly(){ ...... } } =========== public void showStudent(Student student){System.out.println(student.id);System.out.println(student.name); }這時(shí)可以把Student看成一個(gè)數(shù)據(jù)類型,但是準(zhǔn)確來說是一個(gè)類,student代表Student類的一個(gè)變量,這樣就能訪問student中的數(shù)據(jù)了,一個(gè)方法的形式參數(shù)是一個(gè)類的類型(引用類型),這里其實(shí)需要的是該類的對(duì)象。
引用傳遞的實(shí)質(zhì)是對(duì)其所引用的對(duì)象進(jìn)行操作,而所引用的是同一個(gè)對(duì)象,所以說還是相當(dāng)于一個(gè)值的傳遞
方法參數(shù)傳遞的實(shí)質(zhì):傳入方法的是實(shí)際參數(shù)值的復(fù)制品,不管方法中對(duì)這個(gè)復(fù)制品如何操作,實(shí)際參數(shù)值本身不會(huì)受到任何影響
你有一把鑰匙,當(dāng)你的朋友想要去你家的時(shí)候,如果你直接把你的鑰匙給他了,這就是引用傳遞。這種情況下,如果他對(duì)這把鑰匙做了什么事情,比如他在鑰匙上刻下了自己名字,那么這把鑰匙還給你的時(shí)候,你自己的鑰匙上也會(huì)多出他刻的名字。你有一把鑰匙,當(dāng)你的朋友想要去你家的時(shí)候,你復(fù)刻了一把新鑰匙給他,自己的還在自己手里,這就是值傳遞。這種情況下,他對(duì)這把鑰匙做什么都不會(huì)影響你手里的這把鑰匙。。
5.2、類的特征
5.2.1、封裝
5.2.1.1、this關(guān)鍵詞
1、區(qū)別成員變量和局部變量
public class Student{ private String name; public void setName(String name){ //this.name表示類中的屬性name this.name = name;} }2、this在類中表示當(dāng)前類將來創(chuàng)建出的對(duì)象
public class Student{private String name;public Student(){System.out.println("this = "+this);}public static void main(String[] args){Student s = new Student();System.out.println("s = "+s);} }5.2.1.2、簡要介紹
該露的露,該藏的藏
我們程序設(shè)計(jì)要追求“高內(nèi)聚,低耦合”。高內(nèi)聚就是類的內(nèi)部數(shù)據(jù)操作細(xì)節(jié)自己完成,不允許外
部干涉;低耦合:僅暴露少量的方法給外部使用。
把變量通過private關(guān)鍵詞進(jìn)行修飾,然后經(jīng)過get和set方法進(jìn)行外部訪問
//set負(fù)責(zé)給屬性賦值 //get負(fù)責(zé)返回屬性的值 public class Student{private String name;public void setName(String name){this.name = name;}public String getName(){return this.name;}} public class Test{public static void main(String[] args){Student s = new Student();s.setName("tom");System.out.println(s.getName());5.2.2、繼承
5.2.2.1、簡要說明
Java的繼承通過extends關(guān)鍵字來實(shí)現(xiàn),實(shí)現(xiàn)繼承的類被稱為子類,被繼承的類被稱為父類,有的也稱其為基類、超類。父類和子類的關(guān)系,是一種一般和特殊的關(guān)系。例如水果和蘋果的關(guān)系,蘋果繼承了水果,蘋果是水果的子類,則蘋果是一種特殊的水果。
5.2.2.2、特點(diǎn)
1、繼承的本質(zhì)在于抽象。類是對(duì)對(duì)象的抽象,繼承是對(duì)某一批類的抽象。
2、為了提高代碼的復(fù)用性。
extands的意思是“擴(kuò)展”。子類是父類的擴(kuò)展。
JAVA中類只有單繼承,沒有多繼承! 接口可以多繼承!
5.2.3、多態(tài)
5.2.3.1、前提
1.要有繼承關(guān)系
2.子類要重寫父類的方法
3.父類引用指向子類
5.2.3.2、示例
//父類 public class Test_01 {int num = 30;public void eat(){System.out.println("動(dòng)物吃飯");}public static void sleep(){System.out.println("動(dòng)物在睡覺");}public void run(){System.out.println("動(dòng)物在奔跑");} } //子類 public class Test_02 extends Test_01{int num=50;public void catchMouse(){System.out.println("貓抓老鼠");} } //Demo public class Demo {public static void main(String[] args) {Test_01 t1 = new Test_02();t1.eat();t1.run();System.out.println(t1.num);Test_02 t2 = (Test_02) t1;t2.catchMouse();} }編譯看左,運(yùn)行看,成員變量編譯運(yùn)行均看左
5.3、重要類的闡述
5.3.1、抽象類
5.3.2、內(nèi)部類
5.3.3、枚舉類
5.3.4、包裝類
5.4、lambda表達(dá)式
5.5、修飾符的適用范圍介紹
后面有些東西還沒有寫完,但是也不想寫了,就先這樣,因?yàn)橐么a,后續(xù)有時(shí)間再來更新,沒有時(shí)間就算了,后面還有集合,IO流等知識(shí),目前自己正看到IO流這里,時(shí)間寶貴,多敲代碼,少寫東西,浪費(fèi)時(shí)間,敲著敲著不會(huì)的地方回去看就好了
結(jié)語
Java書籍推薦
鏈接:https://www.123pan.com/s/l5iA-Wlnwd
總結(jié)
以上是生活随笔為你收集整理的疯狂Java讲义第五版读书笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js实现table合并相同列单元格
- 下一篇: Java中 break cont