日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java 基础知识总结(下)-王者笔记《收藏版》

發(fā)布時(shí)間:2025/3/12 java 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 基础知识总结(下)-王者笔记《收藏版》 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
上一篇 Java基礎(chǔ)知識(shí)學(xué)習(xí)總結(jié)之(上)? ? ? 下一篇 Java 集合容器篇面試題? (上)? ? ? ?

java畢業(yè)設(shè)計(jì)項(xiàng)目《100套》推薦

畢設(shè)/私活/大佬必備,一個(gè)掙錢的開源前后端分離腳手架

2W字梳理總結(jié)Java--Mybatis經(jīng)典面試題《王者筆記收藏版》

目錄

三、計(jì)算機(jī)原理和操作系統(tǒng)

?內(nèi)存、CPU、硬盤?

?Linux基本命令

線程和進(jìn)程的區(qū)別?

四、數(shù)據(jù)庫基礎(chǔ)

關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫有哪些區(qū)別?舉例說明

數(shù)據(jù)庫索引是做什么用的

什么情況需要給字段建立索引??

?什么情況下索引會(huì)失效?

慢查詢是什么?

主從庫是什么?

五、Java開發(fā)相關(guān)基礎(chǔ)

MVC框架?

js跨域請(qǐng)求是什么意思?

服務(wù)器500、502、503、504、505錯(cuò)誤是什么?

負(fù)載均衡是什么?

Cookie和Session分別是什么?Cookie的容量限制是多少?說?下 Session 的?作原理?

如果客戶端禁? Cookie 能實(shí)現(xiàn) Session 還能用嗎?

Session共享原理是什么?怎么實(shí)現(xiàn)?

java的歷史

正則表達(dá)式?

反射技術(shù)?

?Java 語?有哪些特點(diǎn)?

重載和重寫的區(qū)別?

接?和抽象類的區(qū)別是什么?

成員變量與局部變量的區(qū)別有哪些?

== 與 equals?

hashCode 與 equals ?

hashCode()介紹

為什么要有 hashCode

JVM

什么是字節(jié)碼?采用字節(jié)碼的好處是什么?

JDK 和 JRE


三、計(jì)算機(jī)原理和操作系統(tǒng)

?內(nèi)存、CPU、硬盤?

內(nèi)存是計(jì)算機(jī)的重要部件之?。 它是外存與CPU進(jìn)?溝通的橋梁,計(jì)算機(jī)中所有程序的運(yùn)?都在內(nèi)存中進(jìn)?。內(nèi)存性能的強(qiáng)弱影響計(jì)算機(jī)整體發(fā)揮的?平。 內(nèi)存(Memory)也稱內(nèi)存儲(chǔ)器和主存儲(chǔ)器,它用于暫時(shí)存放CPU中的運(yùn) 算數(shù)據(jù),與硬盤等外部存儲(chǔ)器交換的數(shù)據(jù)。 只要計(jì)算機(jī)開始運(yùn)?,操作系統(tǒng)就會(huì)把需要運(yùn)算的數(shù)據(jù)從內(nèi)存調(diào)到 CPU中進(jìn)?運(yùn)算。當(dāng)運(yùn)算完成,CPU將結(jié)果傳送出來。 內(nèi)存的運(yùn)?也決定計(jì)算機(jī)整體運(yùn)?快慢的程度。 內(nèi)存條由內(nèi)存芯片、電路板、??指等部分組成。 電腦硬盤是計(jì)算機(jī)最主要的存儲(chǔ)設(shè)備。硬盤(港臺(tái)稱之為硬碟,英? 名:Hard Disk Drive, 簡(jiǎn)稱HDD 全名溫徹斯特式硬盤)由?個(gè)或者多個(gè) 鋁制或者玻璃制的碟片組成。這些碟片外覆蓋有鐵磁性材料。 絕?多數(shù)硬盤都是固定硬盤,被永久性地密封固定在硬盤驅(qū)動(dòng)器中。 早期的硬盤存儲(chǔ)媒介是可替換的,不過今日典型的硬盤是固定的存儲(chǔ)媒 介,被封在硬盤里 (除了?個(gè)過濾孔,用來平衡空?壓?)。隨著發(fā) 展,可移動(dòng)硬盤也出現(xiàn)了,?且越來越普及,種類也越來越多.?多數(shù)微 機(jī)上安裝的硬盤,由于都采用溫切斯特(winchester)技術(shù)?被稱之為“溫切 斯特硬盤”,或簡(jiǎn)稱“溫盤”。 中央處理器(CPU),是電?計(jì)算機(jī)的主要設(shè)備之?,電腦中的核? 配件。其功能主要是解釋計(jì)算機(jī)指令以及處理計(jì)算機(jī)軟件中的數(shù)據(jù)。CPU 是計(jì)算機(jī)中負(fù)責(zé)讀取指令,對(duì)指令譯碼并執(zhí)?指令的核?部件。中央處理 器主要包括兩個(gè)部分,即控制器、運(yùn)算器,其中還包括?速緩沖存儲(chǔ)器及 實(shí)現(xiàn)它們之間聯(lián)系的數(shù)據(jù)、控制的總線。電?計(jì)算機(jī)三?核?部件就CPU、內(nèi)部存儲(chǔ)器、輸?/輸出設(shè)備。中央處理器的功效主要為處理指 令、執(zhí)?操作、控制時(shí)間、處理數(shù)據(jù)。

?Linux基本命令

1.sudo

這個(gè)SuperUserDo是Linux新?要使用的最重要的命令。需要根權(quán)限的 每?個(gè)命令都需要這個(gè)sudo命令。你可以在需要根權(quán)限的每個(gè)命令之前使 用sudo。$ sudo su

2.ls(list)

借助list命令,終端就會(huì)顯示你正在處理的那個(gè)目錄里面的所有?件和?件夾。假設(shè)我在/home?件夾里面,想查看/home里面的目錄和? 件。

/home$ ls

/home中的ls返回下列結(jié)果:

imad lost+found

3.cd

更改目錄(cd)是始終在終端中使用的主要命令。它是最基本的Linux命 令之?。使用這個(gè)命令很簡(jiǎn)單。只要輸?你想要從當(dāng)前目錄進(jìn)?到的那個(gè) ?件夾的名稱。如果想要返回上?級(jí),只要將雙圓點(diǎn)(..)作為參數(shù)。假設(shè)我在/home目錄中,想進(jìn)?到始終在/home里面的usr目錄。下面 是我可以使用cd命令的?法:

/home $ cd usr

/home/usr $

4.mkdir

僅僅更改目錄還不全面。有時(shí)候,你想要?jiǎng)?chuàng)建?個(gè)新的?件夾或??

件夾??梢允褂胢kdir命令來做到這?點(diǎn)。只要在終端中將你的?件夾名稱放在mkdir命令的后面即可。

$ mkdir folderName

5.cp

拷貝粘貼是我們?yōu)榱私M織整理?件?需要完成的重要任務(wù)。使用cp將 幫助你從終端拷貝粘貼?件。首先,你確定想要拷貝的那個(gè)?件,然后輸?目的地位置,即可粘貼?件。

$ cp src des

注意:如果你將?件拷貝到任何新?件都需要根權(quán)限的目錄,那么你就需要使用sudo命令。

6.rm

rm這個(gè)命令可以移除你的?件,甚?移除你的目錄。如果?件需要根權(quán)限才能移除,可以使用-f。你還可以使用-r來進(jìn)?遞歸移除,從?移除你的?件夾。

$ rm myfile.txt

7.apt-get

就不同的發(fā)?版??,這個(gè)命令各不相同。在基于Debian的Linux發(fā) ?版中,想安裝、移除和升級(jí)任何軟件包,我們可以使用?級(jí)包裝?具 (APT)軟件包管理器。apt-get命令可幫助你安裝需要在Linux中運(yùn)?的軟件。這是個(gè)功能強(qiáng)?的命令??具,可以執(zhí)?安裝、升級(jí)、甚?移除軟件這類任務(wù)。 在其他發(fā)?版(比如Fedora和Centos)中,有不同的軟件包管理器。

Fedora過去有yum,但現(xiàn)在它有dnf。

$ sudo apt-get update

$sudo dnf update

8.grep

你需要找到?個(gè)?件,但是又記不得它的確切位置或路徑。grep可以幫助你解決這個(gè)問題。你可以使用grep命令,根據(jù)給定的關(guān)鍵字幫助找到?件。

$ grep user /etc/passwd

9.cat

作為用戶,你常常需要查看來自腳本的?些?檔或代碼。同樣,其中?個(gè)Linux基本命令是cat命令。它會(huì)為你顯示?件里面的?本。

$ cat CMakeLists.txt

10.poweroff

有時(shí)候,你需要直接從終端來關(guān)機(jī)。這個(gè)命令就能完成這項(xiàng)任務(wù)。別忘了在命令的開頭添加sudo,因?yàn)樗枰鶛?quán)限才能執(zhí)?poweroff。

$ sudo poweroff

線程和進(jìn)程的區(qū)別?

進(jìn)程和線程的根本區(qū)別是進(jìn)程是操作系統(tǒng)資源分配的基本單位,?線 程是處理器任務(wù)調(diào)度和執(zhí)?的基本單位。另外區(qū)別還有資源開銷、包含關(guān) 系、內(nèi)存分配、影響關(guān)系、執(zhí)?過程等。

資源開銷:每個(gè)進(jìn)程都有獨(dú)立的代碼和數(shù)據(jù)空間(程序上下?),程 序之間的切換會(huì)有較?的開銷;線程可以看做輕量級(jí)的進(jìn)程,同?類線程 共享代碼和數(shù)據(jù)空間,每個(gè)線程都有自?獨(dú)立的運(yùn)?棧和程序計(jì)數(shù)器(PC),線程之間切換的開銷小。

包含關(guān)系:如果?個(gè)進(jìn)程內(nèi)有多個(gè)線程,則執(zhí)?過程不是?條線的,

?是多條線(線程)共同完成的;線程是進(jìn)程的?部分,所以線程也被稱為輕權(quán)進(jìn)程或者輕量級(jí)進(jìn)程。

內(nèi)存分配:同?進(jìn)程的線程共享本進(jìn)程的地址空間和資源,?進(jìn)程之間的地址空間和資源是相互獨(dú)立的。

影響關(guān)系:?個(gè)進(jìn)程崩潰后,在保護(hù)模式下不會(huì)對(duì)其他進(jìn)程產(chǎn)?影響,但是?個(gè)線程崩潰整個(gè)進(jìn)程都死掉。所以多進(jìn)程要比多線程健壯。

執(zhí)?過程:每個(gè)獨(dú)立的進(jìn)程有程序運(yùn)?的??、順序執(zhí)?序列和程序出?。但是線程不能獨(dú)立執(zhí)?,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個(gè)線程執(zhí)?控制,兩者均可并發(fā)執(zhí)?。

進(jìn)程和線程的根本區(qū)別是進(jìn)程是操作系統(tǒng)資源分配的基本單位,?線程是處理器任務(wù)調(diào)度和執(zhí)?的基本單位。

四、數(shù)據(jù)庫基礎(chǔ)

關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫有哪些區(qū)別?舉例說明

關(guān)系型數(shù)據(jù)庫,是指采用了關(guān)系模型來組織數(shù)據(jù)的數(shù)據(jù)庫,其以?和列的形式存儲(chǔ)數(shù)據(jù),以便于用戶理解,關(guān)系型數(shù)據(jù)庫這?系列的?和列被稱為表,?組表組成了數(shù)據(jù)庫。用戶通過查詢來檢索數(shù)據(jù)庫中的數(shù)據(jù),?查詢是?個(gè)用于限定數(shù)據(jù)庫中某些區(qū)域的執(zhí)?代碼。關(guān)系模型可以簡(jiǎn)單理解為?維表格模型,??個(gè)關(guān)系型數(shù)據(jù)庫就是由?維表及其之間的關(guān)系組成的?個(gè)數(shù)據(jù)組織。例如:mysql、oracle、sql server NoSQL,泛指非關(guān)系型的數(shù)據(jù)庫。隨著互聯(lián)?web2.0?站的興起,傳統(tǒng)的關(guān)系數(shù)據(jù)庫在處理web2.0?站,特別是超?規(guī)模和?并發(fā)的SNS類型的web2.0純動(dòng)態(tài)?站已經(jīng)顯得?不從?,出現(xiàn)了很多難以克服的問題,?非關(guān)系型的數(shù)據(jù)庫則由于其本身的特點(diǎn)得到了非常迅速的發(fā)展。NoSQL數(shù)據(jù)庫的產(chǎn)?就是為了解決?規(guī)模數(shù)據(jù)集合多重?cái)?shù)據(jù)種類帶來的挑戰(zhàn),尤其是?數(shù)據(jù)應(yīng)用難題。例如:redis

數(shù)據(jù)庫索引是做什么用的

在關(guān)系數(shù)據(jù)庫中,索引是?種單獨(dú)的、物理的對(duì)數(shù)據(jù)庫表中?列或多列的值進(jìn)?排序的?種存儲(chǔ)結(jié)構(gòu),它是某個(gè)表中?列或若?列值的集合和 相應(yīng)的指向表中物理標(biāo)識(shí)這些值的數(shù)據(jù)頁的邏輯指針清單。索引的作用相當(dāng)于圖書的目錄,可以根據(jù)目錄中的頁碼快速找到所需的內(nèi)容。

什么情況需要給字段建立索引??

表的主鍵、外鍵必須有索引;

數(shù)據(jù)量超過300的表應(yīng)該有索引;

經(jīng)常與其他表進(jìn)連接的表,在連接字段上應(yīng)該建索引;

經(jīng)常出現(xiàn)在Where句 order by中的字段,特別是表的字段,應(yīng)該建索引;

索引應(yīng)該建在選擇性的字段上;

索引應(yīng)該建在字段上,對(duì)于的本字段甚超字段,不要建索引;

?什么情況下索引會(huì)失效?

1.單獨(dú)引用復(fù)合索引里非第?位置的索引列 假如有INDEX(a,b,c), 當(dāng)條件為a或a,b或a,b,c時(shí)都可以使用索引,

但是當(dāng)條件為b,c時(shí)將不會(huì)使用索引。

復(fù)合索引遵守“最左前綴”原則,即在查詢條件中使用了復(fù)合索引的第 ?個(gè)字段,索引才會(huì)被使用。因此,在復(fù)合索引中索引列的順序?關(guān)重要。如果不是按照索引的最左列開始查找,則?法使用索引。

2.對(duì)索引列運(yùn)算,運(yùn)算包括(+、-、*、/、!、、%、like’%_’(%放在前面)、or、in、exist等),導(dǎo)致索引失效。

錯(cuò)誤的例?:select * from test where id-1=9;

正確的例?:select * from test where id=10;

注意!!

mysql sql 中如果使用了 not in , not exists , ( 不等于 !=) 這些不? < 小于 > ?于 = 這個(gè)根據(jù)實(shí)際查詢數(shù)據(jù)來判斷,如果全盤掃描速度比索引速度要快則不?索引 。

3.對(duì)索引應(yīng)用內(nèi)部函數(shù),這種情況下應(yīng)該建立基于函數(shù)的索引。

select * from template t where ROUND(t.logicdb_id) = 1

此時(shí)應(yīng)該建ROUND(t.logicdb_id)為索引。

4、類型錯(cuò)誤,如字段類型為varchar,where條件用number。

例:template_id字段是varchar類型。

錯(cuò)誤寫法:select * from template t where t.template_id = 1

正確寫法:select * from template t where t.template_id = ‘1’

5.如果MySQL預(yù)計(jì)使用全表掃描要比使用索引快,則不使用索引

6.like的模糊查詢以%開頭,索引失效

7.索引列沒有限制 not null,索引不存儲(chǔ)空值,如果不限制索引列是 not null,oracle會(huì)認(rèn)為索引列有可能存在空值,所以不會(huì)按照索引計(jì)算

慢查詢是什么?

分析MySQL語句查詢性能的?法除了使用 EXPLAIN 輸出執(zhí)?計(jì)劃,還可以讓MySQL記錄下查詢超過指定時(shí)間的語句,我們將超過指定時(shí)間的SQL語句查詢稱為“慢查詢”。

主從庫是什么?

1、做數(shù)據(jù)的熱備,作為后備數(shù)據(jù)庫,主數(shù)據(jù)庫服務(wù)器故障后,可切 換到從數(shù)據(jù)庫繼續(xù)?作,避免數(shù)據(jù)丟失。

2、架構(gòu)的擴(kuò)展。業(yè)務(wù)量越來越?,I/O訪問頻率過?,單機(jī)?法滿?,此時(shí)做多庫的存儲(chǔ),降低磁盤I/O訪問的頻率,提?單個(gè)機(jī)器的I/O性能。

3、讀寫分離,使數(shù)據(jù)庫能支撐更?的并發(fā)。在報(bào)表中尤其重要。由于部分報(bào)表sql語句非常的慢,導(dǎo)致鎖表,影響前臺(tái)服務(wù)。如果前臺(tái)使用master,報(bào)表使用slave,那么報(bào)表sql將不會(huì)造成前臺(tái)鎖,保證了前臺(tái)速度。

五、Java開發(fā)相關(guān)基礎(chǔ)

MVC框架?

MVC開始是存在于桌面程序中的,M是指業(yè)務(wù)模型,V是指用戶界面,C則是控制器,使用MVC的目的是將M和V的實(shí)現(xiàn)代碼分離,從?使同?個(gè)程序可以使用不同的表現(xiàn)形式。比如?批統(tǒng)計(jì)數(shù)據(jù)可以分別用柱狀圖、餅圖來表示。C存在的目的則是確保M和V的同步,?旦M改變,V應(yīng)該同步更新。 [1-2] 模型-視圖-控制器(MVC)是Xerox PARC在??世紀(jì)??年代為編程語?Smalltalk-80發(fā)明的?種軟件設(shè)計(jì)模式,已被?泛使用。后來被推薦為Oracle旗下Sun公司Java EE平臺(tái)的設(shè)計(jì)模式,并且受到越來越多的使用ColdFusion和PHP的開發(fā)者的歡迎。模型-視圖-控制器模式是?個(gè)有用的?具箱,它有很多好處,但也有?些缺點(diǎn)。

js跨域請(qǐng)求是什么意思?

跨域訪問,簡(jiǎn)單來說就是 A ?站的 javascript 代碼試圖訪問 B ?站,包括提交內(nèi)容和獲取內(nèi)容。由于安全原因,跨域訪問是被各?瀏覽器所默認(rèn)禁?的。

服務(wù)器500、502、503、504、505錯(cuò)誤是什么?

HTTP 500 - 內(nèi)部服務(wù)器錯(cuò)誤

HTTP 502 - ?關(guān)錯(cuò)誤

503 服務(wù)器目前?法使用(由于超載或停機(jī)維護(hù))。通常,這只是暫時(shí)狀態(tài)。(服務(wù)不可用)

504 表示超時(shí),也就是客戶端所發(fā)出的請(qǐng)求沒有到達(dá)?關(guān)

505 服務(wù)器不支持請(qǐng)求中所用的 HTTP 協(xié)議版本。(HTTP 版本不受支持)

負(fù)載均衡是什么?

負(fù)載均衡建立在現(xiàn)有?絡(luò)結(jié)構(gòu)之上,它提供了?種廉價(jià)有效透明的?法擴(kuò)展?絡(luò)設(shè)備和服務(wù)器的帶寬、增加吞吐量、加強(qiáng)?絡(luò)數(shù)據(jù)處理能?、提??絡(luò)的靈活性和可用性。

負(fù)載均衡(Load Balance)其意思就是分?jǐn)偟蕉鄠€(gè)操作單元上進(jìn)?執(zhí)?,例如Web服務(wù)器、FTP服務(wù)器、企業(yè)關(guān)鍵應(yīng)用服務(wù)器和其它關(guān)鍵任務(wù)服務(wù)器等,從?共同完成?作任務(wù)。

Cookie和Session分別是什么?Cookie的容量限制是多少?說?下 Session 的?作原理?

Cookie是?段不超過4KB的小型?本數(shù)據(jù),由?個(gè)名稱(Name)、?個(gè)值(Value)和其它?個(gè)用于控制Cookie有效期、安全性、使用范圍的可選屬性組成。

Session:在計(jì)算機(jī)中,尤其是在?絡(luò)應(yīng)用中,稱為“會(huì)話控制”。

Session對(duì)象存儲(chǔ)特定用戶會(huì)話所需的屬性及配置信息。這樣,當(dāng)用戶在應(yīng)用程序的Web頁之間跳轉(zhuǎn)時(shí),存儲(chǔ)在Session對(duì)象中的變量將不會(huì)丟失,?是在整個(gè)用戶會(huì)話中?直存在下去。當(dāng)用戶請(qǐng)求來自應(yīng)用程序的 Web頁時(shí),如果該用戶還沒有會(huì)話,則Web服務(wù)器將自動(dòng)創(chuàng)建?個(gè) Session對(duì)象。當(dāng)會(huì)話過期或被放棄后,服務(wù)器將終?該會(huì)話。Session 對(duì)象最常見的?個(gè)用法就是存儲(chǔ)用戶的首選項(xiàng)。

如果客戶端禁? Cookie 能實(shí)現(xiàn) Session 還能用嗎?

能用。需要特殊處理。

Session共享原理是什么?怎么實(shí)現(xiàn)?

應(yīng)用服務(wù)器間的session復(fù)制共享

基于cache DB緩存的session共享

基于redis緩存的session共享目的是實(shí)現(xiàn)單點(diǎn)登錄

java的歷史

1991 年Sun公司的James Gosling等?開始開發(fā)名稱為 Oak 的語?,希望用于控制嵌?在有線電視交換盒、PDA等的微處理器;

1994年將Oak語?更名為Java;

Java的三種技術(shù)架構(gòu):

JAVAEE:Java Platform Enterprise Edition,開發(fā)企業(yè)環(huán)境下的應(yīng)用程序,主要針對(duì)web程序開發(fā);

JAVASE:Java Platform Standard Edition,完成桌面應(yīng)用程序的開發(fā),是其它兩者的基礎(chǔ);

JAVAME:Java Platform Micro Edition,開發(fā)電?消費(fèi)產(chǎn)品和嵌?式設(shè)備,如?機(jī)中的程序;

正則表達(dá)式?

好處:正則的出現(xiàn),對(duì)字符串的復(fù)雜操作變得更為簡(jiǎn)單。

特點(diǎn):將對(duì)字符串操作的代碼用?些符號(hào)來表示。只要使用了指定符號(hào),就可以調(diào)用底層的代碼對(duì)字符串進(jìn)?操作。符號(hào)的出現(xiàn),簡(jiǎn)化了代碼的書寫。

弊端:符號(hào)的出現(xiàn)雖然簡(jiǎn)化了書寫,但是卻降低了閱讀性。

其實(shí)更多是用正則解決字符串操作的問題。

組:用小括號(hào)標(biāo)示,每定義?個(gè)小括號(hào),就是?個(gè)組,?且有自動(dòng)編 號(hào),從1開始。 只要使用組,對(duì)應(yīng)的數(shù)字就是使用該組的內(nèi)容。別忘了,數(shù)組要加 \\。 (aaa(wwww(ccc))(eee))技巧,從左括號(hào)開始數(shù)即可。有?個(gè)左括號(hào)就是?組。

常見操作:

1,匹配:其實(shí)用的就是String類中的matches?法。

String reg = “[1—9][0—9]{4,14}";

boolean b = qq.matches(reg);//將正則和字符串關(guān)聯(lián)對(duì)字符串進(jìn)?匹配。

2,切割:其實(shí)用的就是String類中的split?法。

3,替換:其實(shí)用的就是String類中的replaceAll();

4,獲取:

1),先要將正則表達(dá)式編譯成正則對(duì)象。使用的是Pattern中靜態(tài)?法 compile(regex);

2),通過Pattern對(duì)象獲取Matcher對(duì)象。

Pattern用于描述正則表達(dá)式,可以對(duì)正則表達(dá)式進(jìn)?解析。 ?將規(guī)則操作字符串,需要從新封裝到匹配器對(duì)象Matcher中。

然后使用Matcher對(duì)象的?法來操作字符串。

如何獲取匹配器對(duì)象呢?

通過Pattern對(duì)象中的matcher?法。該?法可以正則規(guī)則和字符串想關(guān)聯(lián)。并返回匹配器對(duì)象。

3),使用Matcher對(duì)象中的?法即可對(duì)字符串進(jìn)?各種正則操作。

反射技術(shù)?

就是動(dòng)態(tài)加載?個(gè)指定的類,并獲取該類中的所有的內(nèi)容。?且將字

節(jié)碼?件封裝成對(duì)象,并將字節(jié)碼?件中的內(nèi)容都封裝成對(duì)象,這樣便于操作這些成員。簡(jiǎn)單說:反射技術(shù)可以對(duì)?個(gè)類進(jìn)?解剖。

反射的好處:??的增強(qiáng)了程序的擴(kuò)展性。

反射的基本步驟:

1、獲得Class對(duì)象,就是獲取到指定的名稱的字節(jié)碼?件對(duì)象。

2、實(shí)例化對(duì)象,獲得類的屬性、?法或構(gòu)造函數(shù)。

3、訪問屬性、調(diào)用?法、調(diào)用構(gòu)造函數(shù)創(chuàng)建對(duì)象。

?Java 語?有哪些特點(diǎn)?

簡(jiǎn)單易學(xué);

面向?qū)ο?#xff08;封裝,繼承,多態(tài));

平臺(tái)?關(guān)性( Java 虛擬機(jī)實(shí)現(xiàn)平臺(tái)?關(guān)性);

可靠性;

安全性;

支持多線程( C++ 語?沒有內(nèi)置的多線程機(jī)制,因此必須調(diào)用操作

系統(tǒng)的多線程功能來進(jìn)?多線程程序設(shè)計(jì),? Java 語?卻提供了多線程支持);

支持?絡(luò)編程并且很?便( Java 語?誕?本身就是為簡(jiǎn)化?絡(luò)編程

設(shè)計(jì)的,因此 Java 語?不僅支持?絡(luò)編程?且很?便);

重載和重寫的區(qū)別?

重載: 發(fā)?在同?個(gè)類中,?法名必須相同,參數(shù)類型不同、個(gè)數(shù)

不同、順序不同,?法返回值和訪問修飾符可以不同,發(fā)?在編譯時(shí)。 ???

重寫: 發(fā)?在??類中,?法名、參數(shù)列表必須相同,返回值范圍

小于等于?類,拋出的異常范圍小于等于?類,訪問修飾符范圍?于等于?類;如果?類?法訪問修飾符為 private 則?類就不能重寫該?法。

接?和抽象類的區(qū)別是什么?

接?的?法默認(rèn)是 public,所有?法在接?中不能有實(shí)現(xiàn)(Java 8 開始接??法可以有默認(rèn)實(shí)現(xiàn)),?抽象類可以有非抽象的?法。

接?中除了static、final變量,不能有其他變量,?抽象類中則不?

定。 ?個(gè)類可以實(shí)現(xiàn)多個(gè)接?,但只能實(shí)現(xiàn)?個(gè)抽象類。接?自?本身可以通過extends關(guān)鍵字?jǐn)U展多個(gè)接?。

接??法默認(rèn)修飾符是public,抽象?法可以有public、protected和 default這些修飾符(抽象?法就是為了被重寫所以不能使用private關(guān)鍵字 修飾!)。 從設(shè)計(jì)層面來說,抽象是對(duì)類的抽象,是?種模板設(shè)計(jì),?接?是對(duì)?為的抽象,是?種?為的規(guī)范。

備注:在JDK8中,接?也可以定義靜態(tài)?法,可以直接用接?名調(diào)

用。實(shí)現(xiàn)類和實(shí)現(xiàn)是不可以調(diào)用的。如果同時(shí)實(shí)現(xiàn)兩個(gè)接?,接?中定義了?樣的默認(rèn)?法,則必須重寫,不然會(huì)報(bào)錯(cuò)。

成員變量與局部變量的區(qū)別有哪些?

從語法形式上看:成員變量是屬于類的,?局部變量是在?法中定義

的變量或是?法的參數(shù);成員變量可以被 public,private,static 等修飾符所修飾,?局部變量不能被訪問控制修飾符及 static 所修飾;但是,成員變量和局部變量都能被 final 所修飾。

從變量在內(nèi)存中的存儲(chǔ)?式來看:如果成員變量是使用static修飾的,

那么這個(gè)成員變量是屬于類的,如果沒有使用static修飾,這個(gè)成員變量是屬于實(shí)例的。?對(duì)象存在于堆內(nèi)存,局部變量則存在于棧內(nèi)存。

從變量在內(nèi)存中的?存時(shí)間上看:成員變量是對(duì)象的?部分,它隨著

對(duì)象的創(chuàng)建?存在,?局部變量隨著?法的調(diào)用?自動(dòng)消失。

成員變量如果沒有被賦初值:則會(huì)自動(dòng)以類型的默認(rèn)值?賦值(?種

情況例外:被 final 修飾的成員變量也必須顯式地賦值),?局部變量則不會(huì)自動(dòng)賦值。

== 與 equals?

== : 它的作用是判斷兩個(gè)對(duì)象的地址是不是相等。即,判斷兩個(gè)對(duì)象 是不是同?個(gè)對(duì)象(基本數(shù)據(jù)類型==比較的是值,引用數(shù)據(jù)類型==比較的是內(nèi)存地址)。

equals() : 它的作用也是判斷兩個(gè)對(duì)象是否相等。但它?般有兩種使用情況:

情況1:類沒有覆蓋 equals() ?法。則通過 equals() 比較該類的兩個(gè)對(duì)象時(shí),等價(jià)于通過“==”比較這兩個(gè)對(duì)象。

情況2:類覆蓋了 equals() ?法。?般,我們都覆蓋 equals() ?法來比較兩個(gè)對(duì)象的內(nèi)容是否相等;若它們的內(nèi)容相等,則返回 true (即,認(rèn)為這兩個(gè)對(duì)象相等)。

舉個(gè)例?:

public class test1 {public static void main(String[] args) {String a = new String("ab"); // a 為?個(gè)引用String b = new String("ab"); // b為另?個(gè)引用,對(duì)象的內(nèi)容?樣String aa = "ab"; // 放在常量池中String bb = "ab"; // 從常量池中查找if (aa == bb) // trueSystem.out.println("aa==bb");if (a == b) // false,非同?對(duì)象System.out.println("a==b");if (a.equals(b)) // trueSystem.out.println("aEQb");if (42 == 42.0) { // trueSystem.out.println("true");}}}

說明:

String 中的 equals ?法是被重寫過的,因?yàn)?object 的 equals ?法是比 較的對(duì)象的內(nèi)存地址,? String 的 equals ?法比較的是對(duì)象的值。

當(dāng)創(chuàng)建 String 類型的對(duì)象時(shí),虛擬機(jī)會(huì)在常量池中查找有沒有已經(jīng)存在的值和要?jiǎng)?chuàng)建的值相同的對(duì)象,如果有就把它賦給當(dāng)前引用。如果沒有就在常量池中重新創(chuàng)建?個(gè) String 對(duì)象。

hashCode 與 equals ?

hashCode()介紹

hashCode() 的作用是獲取哈希碼,也稱為散列碼;它實(shí)際上是返回? 個(gè)int整數(shù)。這個(gè)哈希碼的作用是確定該對(duì)象在哈希表中的索引位置。 hashCode() 定義在JDK的Object.java中,這就意味著Java中的任何類都包 含有hashCode() 函數(shù)。

散列表存儲(chǔ)的是鍵值對(duì)(key-value),它的特點(diǎn)是:能根據(jù)“鍵”快速的檢索出對(duì)應(yīng)的“值”。這其中就利用到了散列碼!(可以快速找到所需要的對(duì)象)

為什么要有 hashCode

我們先以“HashSet 如何檢查重復(fù)”為例?來說明為什么要有

hashCode: 當(dāng)你把對(duì)象加? HashSet 時(shí),HashSet 會(huì)先計(jì)算對(duì)象的hashcode 值來判斷對(duì)象加?的位置,同時(shí)也會(huì)與其他已經(jīng)加?的對(duì)象的hashcode 值作比較,如果沒有相符的hashcode,HashSet會(huì)假設(shè)對(duì)象沒有重復(fù)出現(xiàn)。但是如果發(fā)現(xiàn)有相同 hashcode 值的對(duì)象,這時(shí)會(huì)調(diào)用 equals() ?法來檢查 hashcode 相等的對(duì)象是否真的相同。如果兩者相同,HashSet 就不會(huì)讓其加?操作成功。如果不同的話,就會(huì)重新散列到其他位置。

(摘自我的Java啟蒙書《Head first java》第?版)。這樣我們就??減少了 equals 的次數(shù),相應(yīng)就??提?了執(zhí)?速度。

通過我們可以看出:hashCode() 的作用就是獲取哈希碼,也稱為散列碼;它實(shí)際上是返回?個(gè)int整數(shù)。這個(gè)哈希碼的作用是確定該對(duì)象在哈希表中的索引位置。hashCode()在散列表中才有用,在其它情況下沒用。在散列表中hashCode() 的作用是獲取對(duì)象的散列碼,進(jìn)?確定該對(duì)象在散列表中的位置。hashCode()與equals()的相關(guān)規(guī)定如果兩個(gè)對(duì)象相等,則hashcode?定也是相同的 兩個(gè)對(duì)象相等,對(duì)兩個(gè)對(duì)象分別調(diào)用equals?法都返回true兩個(gè)對(duì)象有相同的hashcode值,它們也不?定是相等的因此,equals ?法被覆蓋過,則 hashCode ?法也必須被覆蓋hashCode() 的默認(rèn)?為是對(duì)堆上的對(duì)象產(chǎn)?獨(dú)特值。如果沒有重寫hashCode(),則該 class 的兩個(gè)對(duì)象?論如何都不會(huì)相等(即使這兩個(gè)對(duì)象指向相同的數(shù)據(jù))

關(guān)于 JVM JDK 和 JRE?

JVM

Java虛擬機(jī)(JVM)是運(yùn)? Java 字節(jié)碼的虛擬機(jī)。JVM有針對(duì)不同系統(tǒng)的特定實(shí)現(xiàn)(Windows,Linux,macOS),目的是使用相同的字節(jié)碼,它們都會(huì)給出相同的結(jié)果。

什么是字節(jié)碼?采用字節(jié)碼的好處是什么?

在 Java 中,JVM可以理解的代碼就叫做字節(jié)碼(即擴(kuò)展名為 .class 的?件),它不面向任何特定的處理器,只面向虛擬機(jī)。Java 語?通過字節(jié)碼的?式,在?定程度上解決了傳統(tǒng)解釋型語?執(zhí)?效率低的問題,同時(shí)又保留了解釋型語?可移植的特點(diǎn)。所以 Java 程序運(yùn)?時(shí)比較?效,?且,由于字節(jié)碼并不針對(duì)?種特定的機(jī)器,因此,Java程序?須重新編譯便可在多種不同操作系統(tǒng)的計(jì)算機(jī)上運(yùn)?。

我們需要格外注意的是 .class->機(jī)器碼 這?步。在這?步 JVM 類加載器首先加載字節(jié)碼?件,然后通過解釋器逐?解釋執(zhí)?,這種?式的執(zhí)?速度會(huì)相對(duì)比較慢。?且,有些?法和代碼塊是經(jīng)常需要被調(diào)用的(也就是所謂的熱點(diǎn)代碼),所以后面引進(jìn)了 JIT 編譯器,?JIT 屬于運(yùn)?時(shí)編譯。當(dāng) JIT 編譯器完成第?次編譯后,其會(huì)將字節(jié)碼對(duì)應(yīng)的機(jī)器碼保存下來,下次可以直接使用。?我們知道,機(jī)器碼的運(yùn)?效率肯定是?于 Java解釋器的。這也解釋了我們?yōu)槭裁唇?jīng)常會(huì)說 Java 是編譯與解釋共存的語?。

HotSpot采用了惰性評(píng)估(Lazy Evaluation)的做法,根據(jù)??定律,消耗?部分系統(tǒng)資源的只有那?小部分的代碼(熱點(diǎn)代碼),?這也就是JIT所需要編譯的部分。JVM會(huì)根據(jù)代碼每次被執(zhí)?的情況收集信息并相應(yīng)地做出?些優(yōu)化,因此執(zhí)?的次數(shù)越多,它的速度就越快。JDK 9引? 了?種新的編譯模式AOT(Ahead of Time Compilation),它是直接將字節(jié)碼編譯成機(jī)器碼,這樣就避免了JIT預(yù)熱等各?面的開銷。JDK支持分層編譯和AOT協(xié)作使用。但是 ,AOT 編譯器的編譯質(zhì)量是肯定比不上 JIT編譯器的。

總結(jié):

Java虛擬機(jī)(JVM)是運(yùn)? Java 字節(jié)碼的虛擬機(jī)。JVM有針對(duì)不同系統(tǒng)的特定實(shí)現(xiàn)(Windows,Linux,macOS),目的是使用相同的字節(jié)碼,

它們都會(huì)給出相同的結(jié)果。字節(jié)碼和不同系統(tǒng)的 JVM 實(shí)現(xiàn)是 Java 語?“?次編譯,隨處可以運(yùn)?”的關(guān)鍵所在。

JDK 和 JRE

JDK是Java Development Kit,它是功能齊全的Java SDK。它擁有JRE 所擁有的?切,還有編譯器(javac)和?具(如javadoc和jdb)。它能夠創(chuàng)建和編譯程序。

JRE 是 Java運(yùn)?時(shí)環(huán)境。它是運(yùn)?已編譯 Java 程序所需的所有內(nèi)容的集合,包括 Java虛擬機(jī)(JVM),Java類庫,java命令和其他的?些基礎(chǔ)構(gòu)件。但是,它不能用于創(chuàng)建新程序。

如果你只是為了運(yùn)??下 Java 程序的話,那么你只需要安裝 JRE 就可以了。如果你需要進(jìn)??些 Java 編程?面的?作,那么你就需要安裝JDK了。但是,這不是絕對(duì)的。有時(shí),即使您不打算在計(jì)算機(jī)上進(jìn)?任何Java開發(fā),仍然需要安裝JDK。例如,如果要使用JSP部署Web應(yīng)用程序,那么從技術(shù)上講,您只是在應(yīng)用程序服務(wù)器中運(yùn)?Java程序。那你為什么需要JDK呢?因?yàn)閼?yīng)用程序服務(wù)器會(huì)將 JSP 轉(zhuǎn)換為 Java servlet,并且需要使用 JDK 來編譯 servlet。

靜態(tài)?法和實(shí)例?法有何不同??

在外部調(diào)用靜態(tài)?法時(shí),可以使用”類名.?法名”的?式,也可以使用”對(duì)象名.?法名”的?式。?實(shí)例?法只有后面這種?式。也就是說,調(diào)用靜態(tài)?法可以?需創(chuàng)建對(duì)象。

靜態(tài)?法在訪問本類的成員時(shí),只允許訪問靜態(tài)成員(即靜態(tài)成員變 量和靜態(tài)?法),?不允許訪問實(shí)例成員變量和實(shí)例?法;實(shí)例?法則?此限制

今天就到這兒吧,小伙伴們點(diǎn)贊、收藏、評(píng)論是對(duì)我最大的支持、下期見~~

總結(jié)

以上是生活随笔為你收集整理的Java 基础知识总结(下)-王者笔记《收藏版》的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。