Java 基础知识总结(下)-王者笔记《收藏版》
java畢業設計項目《100套》推薦
畢設/私活/大佬必備,一個掙錢的開源前后端分離腳手架
2W字梳理總結Java--Mybatis經典面試題《王者筆記收藏版》
目錄
三、計算機原理和操作系統
?內存、CPU、硬盤?
?Linux基本命令
線程和進程的區別?
四、數據庫基礎
關系型數據庫和非關系型數據庫有哪些區別?舉例說明
數據庫索引是做什么用的
什么情況需要給字段建立索引??
?什么情況下索引會失效?
慢查詢是什么?
主從庫是什么?
五、Java開發相關基礎
MVC框架?
js跨域請求是什么意思?
服務器500、502、503、504、505錯誤是什么?
負載均衡是什么?
Cookie和Session分別是什么?Cookie的容量限制是多少?說?下 Session 的?作原理?
如果客戶端禁? Cookie 能實現 Session 還能用嗎?
Session共享原理是什么?怎么實現?
java的歷史
正則表達式?
反射技術?
?Java 語?有哪些特點?
重載和重寫的區別?
接?和抽象類的區別是什么?
成員變量與局部變量的區別有哪些?
== 與 equals?
hashCode 與 equals ?
hashCode()介紹
為什么要有 hashCode
JVM
什么是字節碼?采用字節碼的好處是什么?
JDK 和 JRE
三、計算機原理和操作系統
?內存、CPU、硬盤?
內存是計算機的重要部件之?。 它是外存與CPU進?溝通的橋梁,計算機中所有程序的運?都在內存中進?。內存性能的強弱影響計算機整體發揮的?平。 內存(Memory)也稱內存儲器和主存儲器,它用于暫時存放CPU中的運 算數據,與硬盤等外部存儲器交換的數據。 只要計算機開始運?,操作系統就會把需要運算的數據從內存調到 CPU中進?運算。當運算完成,CPU將結果傳送出來。 內存的運?也決定計算機整體運?快慢的程度。 內存條由內存芯片、電路板、??指等部分組成。 電腦硬盤是計算機最主要的存儲設備。硬盤(港臺稱之為硬碟,英? 名:Hard Disk Drive, 簡稱HDD 全名溫徹斯特式硬盤)由?個或者多個 鋁制或者玻璃制的碟片組成。這些碟片外覆蓋有鐵磁性材料。 絕?多數硬盤都是固定硬盤,被永久性地密封固定在硬盤驅動器中。 早期的硬盤存儲媒介是可替換的,不過今日典型的硬盤是固定的存儲媒 介,被封在硬盤里 (除了?個過濾孔,用來平衡空?壓?)。隨著發 展,可移動硬盤也出現了,?且越來越普及,種類也越來越多.?多數微 機上安裝的硬盤,由于都采用溫切斯特(winchester)技術?被稱之為“溫切 斯特硬盤”,或簡稱“溫盤”。 中央處理器(CPU),是電?計算機的主要設備之?,電腦中的核? 配件。其功能主要是解釋計算機指令以及處理計算機軟件中的數據。CPU 是計算機中負責讀取指令,對指令譯碼并執?指令的核?部件。中央處理 器主要包括兩個部分,即控制器、運算器,其中還包括?速緩沖存儲器及 實現它們之間聯系的數據、控制的總線。電?計算機三?核?部件就CPU、內部存儲器、輸?/輸出設備。中央處理器的功效主要為處理指 令、執?操作、控制時間、處理數據。
?Linux基本命令
1.sudo
這個SuperUserDo是Linux新?要使用的最重要的命令。需要根權限的 每?個命令都需要這個sudo命令。你可以在需要根權限的每個命令之前使 用sudo。$ sudo su
2.ls(list)
借助list命令,終端就會顯示你正在處理的那個目錄里面的所有?件和?件夾。假設我在/home?件夾里面,想查看/home里面的目錄和? 件。
/home$ ls
/home中的ls返回下列結果:
imad lost+found
3.cd
更改目錄(cd)是始終在終端中使用的主要命令。它是最基本的Linux命 令之?。使用這個命令很簡單。只要輸?你想要從當前目錄進?到的那個 ?件夾的名稱。如果想要返回上?級,只要將雙圓點(..)作為參數。假設我在/home目錄中,想進?到始終在/home里面的usr目錄。下面 是我可以使用cd命令的?法:
/home $ cd usr
/home/usr $
4.mkdir
僅僅更改目錄還不全面。有時候,你想要創建?個新的?件夾或??
件夾。可以使用mkdir命令來做到這?點。只要在終端中將你的?件夾名稱放在mkdir命令的后面即可。
$ mkdir folderName
5.cp
拷貝粘貼是我們為了組織整理?件?需要完成的重要任務。使用cp將 幫助你從終端拷貝粘貼?件。首先,你確定想要拷貝的那個?件,然后輸?目的地位置,即可粘貼?件。
$ cp src des
注意:如果你將?件拷貝到任何新?件都需要根權限的目錄,那么你就需要使用sudo命令。
6.rm
rm這個命令可以移除你的?件,甚?移除你的目錄。如果?件需要根權限才能移除,可以使用-f。你還可以使用-r來進?遞歸移除,從?移除你的?件夾。
$ rm myfile.txt
7.apt-get
就不同的發?版??,這個命令各不相同。在基于Debian的Linux發 ?版中,想安裝、移除和升級任何軟件包,我們可以使用?級包裝?具 (APT)軟件包管理器。apt-get命令可幫助你安裝需要在Linux中運?的軟件。這是個功能強?的命令??具,可以執?安裝、升級、甚?移除軟件這類任務。 在其他發?版(比如Fedora和Centos)中,有不同的軟件包管理器。
Fedora過去有yum,但現在它有dnf。
$ sudo apt-get update
$sudo dnf update
8.grep
你需要找到?個?件,但是又記不得它的確切位置或路徑。grep可以幫助你解決這個問題。你可以使用grep命令,根據給定的關鍵字幫助找到?件。
$ grep user /etc/passwd
9.cat
作為用戶,你常常需要查看來自腳本的?些?檔或代碼。同樣,其中?個Linux基本命令是cat命令。它會為你顯示?件里面的?本。
$ cat CMakeLists.txt
10.poweroff
有時候,你需要直接從終端來關機。這個命令就能完成這項任務。別忘了在命令的開頭添加sudo,因為它需要根權限才能執?poweroff。
$ sudo poweroff
線程和進程的區別?
進程和線程的根本區別是進程是操作系統資源分配的基本單位,?線 程是處理器任務調度和執?的基本單位。另外區別還有資源開銷、包含關 系、內存分配、影響關系、執?過程等。
資源開銷:每個進程都有獨立的代碼和數據空間(程序上下?),程 序之間的切換會有較?的開銷;線程可以看做輕量級的進程,同?類線程 共享代碼和數據空間,每個線程都有自?獨立的運?棧和程序計數器(PC),線程之間切換的開銷小。
包含關系:如果?個進程內有多個線程,則執?過程不是?條線的,
?是多條線(線程)共同完成的;線程是進程的?部分,所以線程也被稱為輕權進程或者輕量級進程。
內存分配:同?進程的線程共享本進程的地址空間和資源,?進程之間的地址空間和資源是相互獨立的。
影響關系:?個進程崩潰后,在保護模式下不會對其他進程產?影響,但是?個線程崩潰整個進程都死掉。所以多進程要比多線程健壯。
執?過程:每個獨立的進程有程序運?的??、順序執?序列和程序出?。但是線程不能獨立執?,必須依存在應用程序中,由應用程序提供多個線程執?控制,兩者均可并發執?。
進程和線程的根本區別是進程是操作系統資源分配的基本單位,?線程是處理器任務調度和執?的基本單位。
四、數據庫基礎
關系型數據庫和非關系型數據庫有哪些區別?舉例說明
關系型數據庫,是指采用了關系模型來組織數據的數據庫,其以?和列的形式存儲數據,以便于用戶理解,關系型數據庫這?系列的?和列被稱為表,?組表組成了數據庫。用戶通過查詢來檢索數據庫中的數據,?查詢是?個用于限定數據庫中某些區域的執?代碼。關系模型可以簡單理解為?維表格模型,??個關系型數據庫就是由?維表及其之間的關系組成的?個數據組織。例如:mysql、oracle、sql server NoSQL,泛指非關系型的數據庫。隨著互聯?web2.0?站的興起,傳統的關系數據庫在處理web2.0?站,特別是超?規模和?并發的SNS類型的web2.0純動態?站已經顯得?不從?,出現了很多難以克服的問題,?非關系型的數據庫則由于其本身的特點得到了非常迅速的發展。NoSQL數據庫的產?就是為了解決?規模數據集合多重數據種類帶來的挑戰,尤其是?數據應用難題。例如:redis
數據庫索引是做什么用的
在關系數據庫中,索引是?種單獨的、物理的對數據庫表中?列或多列的值進?排序的?種存儲結構,它是某個表中?列或若?列值的集合和 相應的指向表中物理標識這些值的數據頁的邏輯指針清單。索引的作用相當于圖書的目錄,可以根據目錄中的頁碼快速找到所需的內容。
什么情況需要給字段建立索引??
表的主鍵、外鍵必須有索引;
數據量超過300的表應該有索引;
經常與其他表進連接的表,在連接字段上應該建索引;
經常出現在Where句 order by中的字段,特別是表的字段,應該建索引;
索引應該建在選擇性的字段上;
索引應該建在字段上,對于的本字段甚超字段,不要建索引;
?什么情況下索引會失效?
1.單獨引用復合索引里非第?位置的索引列 假如有INDEX(a,b,c), 當條件為a或a,b或a,b,c時都可以使用索引,
但是當條件為b,c時將不會使用索引。
復合索引遵守“最左前綴”原則,即在查詢條件中使用了復合索引的第 ?個字段,索引才會被使用。因此,在復合索引中索引列的順序?關重要。如果不是按照索引的最左列開始查找,則?法使用索引。
2.對索引列運算,運算包括(+、-、*、/、!、、%、like’%_’(%放在前面)、or、in、exist等),導致索引失效。
錯誤的例?:select * from test where id-1=9;
正確的例?:select * from test where id=10;
注意!!
mysql sql 中如果使用了 not in , not exists , ( 不等于 !=) 這些不? < 小于 > ?于 = 這個根據實際查詢數據來判斷,如果全盤掃描速度比索引速度要快則不?索引 。
3.對索引應用內部函數,這種情況下應該建立基于函數的索引。
select * from template t where ROUND(t.logicdb_id) = 1此時應該建ROUND(t.logicdb_id)為索引。
4、類型錯誤,如字段類型為varchar,where條件用number。
例:template_id字段是varchar類型。
錯誤寫法:select * from template t where t.template_id = 1
正確寫法:select * from template t where t.template_id = ‘1’
5.如果MySQL預計使用全表掃描要比使用索引快,則不使用索引
6.like的模糊查詢以%開頭,索引失效
7.索引列沒有限制 not null,索引不存儲空值,如果不限制索引列是 not null,oracle會認為索引列有可能存在空值,所以不會按照索引計算
慢查詢是什么?
分析MySQL語句查詢性能的?法除了使用 EXPLAIN 輸出執?計劃,還可以讓MySQL記錄下查詢超過指定時間的語句,我們將超過指定時間的SQL語句查詢稱為“慢查詢”。
主從庫是什么?
1、做數據的熱備,作為后備數據庫,主數據庫服務器故障后,可切 換到從數據庫繼續?作,避免數據丟失。
2、架構的擴展。業務量越來越?,I/O訪問頻率過?,單機?法滿?,此時做多庫的存儲,降低磁盤I/O訪問的頻率,提?單個機器的I/O性能。
3、讀寫分離,使數據庫能支撐更?的并發。在報表中尤其重要。由于部分報表sql語句非常的慢,導致鎖表,影響前臺服務。如果前臺使用master,報表使用slave,那么報表sql將不會造成前臺鎖,保證了前臺速度。
五、Java開發相關基礎
MVC框架?
MVC開始是存在于桌面程序中的,M是指業務模型,V是指用戶界面,C則是控制器,使用MVC的目的是將M和V的實現代碼分離,從?使同?個程序可以使用不同的表現形式。比如?批統計數據可以分別用柱狀圖、餅圖來表示。C存在的目的則是確保M和V的同步,?旦M改變,V應該同步更新。 [1-2] 模型-視圖-控制器(MVC)是Xerox PARC在??世紀??年代為編程語?Smalltalk-80發明的?種軟件設計模式,已被?泛使用。后來被推薦為Oracle旗下Sun公司Java EE平臺的設計模式,并且受到越來越多的使用ColdFusion和PHP的開發者的歡迎。模型-視圖-控制器模式是?個有用的?具箱,它有很多好處,但也有?些缺點。
js跨域請求是什么意思?
跨域訪問,簡單來說就是 A ?站的 javascript 代碼試圖訪問 B ?站,包括提交內容和獲取內容。由于安全原因,跨域訪問是被各?瀏覽器所默認禁?的。
服務器500、502、503、504、505錯誤是什么?
HTTP 500 - 內部服務器錯誤
HTTP 502 - ?關錯誤
503 服務器目前?法使用(由于超載或停機維護)。通常,這只是暫時狀態。(服務不可用)
504 表示超時,也就是客戶端所發出的請求沒有到達?關
505 服務器不支持請求中所用的 HTTP 協議版本。(HTTP 版本不受支持)
負載均衡是什么?
負載均衡建立在現有?絡結構之上,它提供了?種廉價有效透明的?法擴展?絡設備和服務器的帶寬、增加吞吐量、加強?絡數據處理能?、提??絡的靈活性和可用性。
負載均衡(Load Balance)其意思就是分攤到多個操作單元上進?執?,例如Web服務器、FTP服務器、企業關鍵應用服務器和其它關鍵任務服務器等,從?共同完成?作任務。
Cookie和Session分別是什么?Cookie的容量限制是多少?說?下 Session 的?作原理?
Cookie是?段不超過4KB的小型?本數據,由?個名稱(Name)、?個值(Value)和其它?個用于控制Cookie有效期、安全性、使用范圍的可選屬性組成。
Session:在計算機中,尤其是在?絡應用中,稱為“會話控制”。
Session對象存儲特定用戶會話所需的屬性及配置信息。這樣,當用戶在應用程序的Web頁之間跳轉時,存儲在Session對象中的變量將不會丟失,?是在整個用戶會話中?直存在下去。當用戶請求來自應用程序的 Web頁時,如果該用戶還沒有會話,則Web服務器將自動創建?個 Session對象。當會話過期或被放棄后,服務器將終?該會話。Session 對象最常見的?個用法就是存儲用戶的首選項。
如果客戶端禁? Cookie 能實現 Session 還能用嗎?
能用。需要特殊處理。
Session共享原理是什么?怎么實現?
應用服務器間的session復制共享
基于cache DB緩存的session共享
基于redis緩存的session共享目的是實現單點登錄
java的歷史
1991 年Sun公司的James Gosling等?開始開發名稱為 Oak 的語?,希望用于控制嵌?在有線電視交換盒、PDA等的微處理器;
1994年將Oak語?更名為Java;
Java的三種技術架構:
JAVAEE:Java Platform Enterprise Edition,開發企業環境下的應用程序,主要針對web程序開發;
JAVASE:Java Platform Standard Edition,完成桌面應用程序的開發,是其它兩者的基礎;
JAVAME:Java Platform Micro Edition,開發電?消費產品和嵌?式設備,如?機中的程序;
正則表達式?
好處:正則的出現,對字符串的復雜操作變得更為簡單。
特點:將對字符串操作的代碼用?些符號來表示。只要使用了指定符號,就可以調用底層的代碼對字符串進?操作。符號的出現,簡化了代碼的書寫。
弊端:符號的出現雖然簡化了書寫,但是卻降低了閱讀性。
其實更多是用正則解決字符串操作的問題。
組:用小括號標示,每定義?個小括號,就是?個組,?且有自動編 號,從1開始。 只要使用組,對應的數字就是使用該組的內容。別忘了,數組要加 \\。 (aaa(wwww(ccc))(eee))技巧,從左括號開始數即可。有?個左括號就是?組。
常見操作:
1,匹配:其實用的就是String類中的matches?法。
String reg = “[1—9][0—9]{4,14}";
boolean b = qq.matches(reg);//將正則和字符串關聯對字符串進?匹配。
2,切割:其實用的就是String類中的split?法。
3,替換:其實用的就是String類中的replaceAll();
4,獲取:
1),先要將正則表達式編譯成正則對象。使用的是Pattern中靜態?法 compile(regex);
2),通過Pattern對象獲取Matcher對象。
Pattern用于描述正則表達式,可以對正則表達式進?解析。 ?將規則操作字符串,需要從新封裝到匹配器對象Matcher中。
然后使用Matcher對象的?法來操作字符串。
如何獲取匹配器對象呢?
通過Pattern對象中的matcher?法。該?法可以正則規則和字符串想關聯。并返回匹配器對象。
3),使用Matcher對象中的?法即可對字符串進?各種正則操作。
反射技術?
就是動態加載?個指定的類,并獲取該類中的所有的內容。?且將字
節碼?件封裝成對象,并將字節碼?件中的內容都封裝成對象,這樣便于操作這些成員。簡單說:反射技術可以對?個類進?解剖。
反射的好處:??的增強了程序的擴展性。
反射的基本步驟:
1、獲得Class對象,就是獲取到指定的名稱的字節碼?件對象。
2、實例化對象,獲得類的屬性、?法或構造函數。
3、訪問屬性、調用?法、調用構造函數創建對象。
?Java 語?有哪些特點?
簡單易學;
面向對象(封裝,繼承,多態);
平臺?關性( Java 虛擬機實現平臺?關性);
可靠性;
安全性;
支持多線程( C++ 語?沒有內置的多線程機制,因此必須調用操作
系統的多線程功能來進?多線程程序設計,? Java 語?卻提供了多線程支持);
支持?絡編程并且很?便( Java 語?誕?本身就是為簡化?絡編程
設計的,因此 Java 語?不僅支持?絡編程?且很?便);
重載和重寫的區別?
重載: 發?在同?個類中,?法名必須相同,參數類型不同、個數
不同、順序不同,?法返回值和訪問修飾符可以不同,發?在編譯時。 ???
重寫: 發?在??類中,?法名、參數列表必須相同,返回值范圍
小于等于?類,拋出的異常范圍小于等于?類,訪問修飾符范圍?于等于?類;如果?類?法訪問修飾符為 private 則?類就不能重寫該?法。
接?和抽象類的區別是什么?
接?的?法默認是 public,所有?法在接?中不能有實現(Java 8 開始接??法可以有默認實現),?抽象類可以有非抽象的?法。
接?中除了static、final變量,不能有其他變量,?抽象類中則不?
定。 ?個類可以實現多個接?,但只能實現?個抽象類。接?自?本身可以通過extends關鍵字擴展多個接?。
接??法默認修飾符是public,抽象?法可以有public、protected和 default這些修飾符(抽象?法就是為了被重寫所以不能使用private關鍵字 修飾!)。 從設計層面來說,抽象是對類的抽象,是?種模板設計,?接?是對?為的抽象,是?種?為的規范。
備注:在JDK8中,接?也可以定義靜態?法,可以直接用接?名調
用。實現類和實現是不可以調用的。如果同時實現兩個接?,接?中定義了?樣的默認?法,則必須重寫,不然會報錯。
成員變量與局部變量的區別有哪些?
從語法形式上看:成員變量是屬于類的,?局部變量是在?法中定義
的變量或是?法的參數;成員變量可以被 public,private,static 等修飾符所修飾,?局部變量不能被訪問控制修飾符及 static 所修飾;但是,成員變量和局部變量都能被 final 所修飾。
從變量在內存中的存儲?式來看:如果成員變量是使用static修飾的,
那么這個成員變量是屬于類的,如果沒有使用static修飾,這個成員變量是屬于實例的。?對象存在于堆內存,局部變量則存在于棧內存。
從變量在內存中的?存時間上看:成員變量是對象的?部分,它隨著
對象的創建?存在,?局部變量隨著?法的調用?自動消失。
成員變量如果沒有被賦初值:則會自動以類型的默認值?賦值(?種
情況例外:被 final 修飾的成員變量也必須顯式地賦值),?局部變量則不會自動賦值。
== 與 equals?
== : 它的作用是判斷兩個對象的地址是不是相等。即,判斷兩個對象 是不是同?個對象(基本數據類型==比較的是值,引用數據類型==比較的是內存地址)。
equals() : 它的作用也是判斷兩個對象是否相等。但它?般有兩種使用情況:
情況1:類沒有覆蓋 equals() ?法。則通過 equals() 比較該類的兩個對象時,等價于通過“==”比較這兩個對象。
情況2:類覆蓋了 equals() ?法。?般,我們都覆蓋 equals() ?法來比較兩個對象的內容是否相等;若它們的內容相等,則返回 true (即,認為這兩個對象相等)。
舉個例?:
public class test1 {public static void main(String[] args) {String a = new String("ab"); // a 為?個引用String b = new String("ab"); // b為另?個引用,對象的內容?樣String aa = "ab"; // 放在常量池中String bb = "ab"; // 從常量池中查找if (aa == bb) // trueSystem.out.println("aa==bb");if (a == b) // false,非同?對象System.out.println("a==b");if (a.equals(b)) // trueSystem.out.println("aEQb");if (42 == 42.0) { // trueSystem.out.println("true");}}}說明:
String 中的 equals ?法是被重寫過的,因為 object 的 equals ?法是比 較的對象的內存地址,? String 的 equals ?法比較的是對象的值。
當創建 String 類型的對象時,虛擬機會在常量池中查找有沒有已經存在的值和要創建的值相同的對象,如果有就把它賦給當前引用。如果沒有就在常量池中重新創建?個 String 對象。
hashCode 與 equals ?
hashCode()介紹
hashCode() 的作用是獲取哈希碼,也稱為散列碼;它實際上是返回? 個int整數。這個哈希碼的作用是確定該對象在哈希表中的索引位置。 hashCode() 定義在JDK的Object.java中,這就意味著Java中的任何類都包 含有hashCode() 函數。
散列表存儲的是鍵值對(key-value),它的特點是:能根據“鍵”快速的檢索出對應的“值”。這其中就利用到了散列碼!(可以快速找到所需要的對象)
為什么要有 hashCode
我們先以“HashSet 如何檢查重復”為例?來說明為什么要有
hashCode: 當你把對象加? HashSet 時,HashSet 會先計算對象的hashcode 值來判斷對象加?的位置,同時也會與其他已經加?的對象的hashcode 值作比較,如果沒有相符的hashcode,HashSet會假設對象沒有重復出現。但是如果發現有相同 hashcode 值的對象,這時會調用 equals() ?法來檢查 hashcode 相等的對象是否真的相同。如果兩者相同,HashSet 就不會讓其加?操作成功。如果不同的話,就會重新散列到其他位置。
(摘自我的Java啟蒙書《Head first java》第?版)。這樣我們就??減少了 equals 的次數,相應就??提?了執?速度。
通過我們可以看出:hashCode() 的作用就是獲取哈希碼,也稱為散列碼;它實際上是返回?個int整數。這個哈希碼的作用是確定該對象在哈希表中的索引位置。hashCode()在散列表中才有用,在其它情況下沒用。在散列表中hashCode() 的作用是獲取對象的散列碼,進?確定該對象在散列表中的位置。hashCode()與equals()的相關規定如果兩個對象相等,則hashcode?定也是相同的 兩個對象相等,對兩個對象分別調用equals?法都返回true兩個對象有相同的hashcode值,它們也不?定是相等的因此,equals ?法被覆蓋過,則 hashCode ?法也必須被覆蓋hashCode() 的默認?為是對堆上的對象產?獨特值。如果沒有重寫hashCode(),則該 class 的兩個對象?論如何都不會相等(即使這兩個對象指向相同的數據)
關于 JVM JDK 和 JRE?
JVM
Java虛擬機(JVM)是運? Java 字節碼的虛擬機。JVM有針對不同系統的特定實現(Windows,Linux,macOS),目的是使用相同的字節碼,它們都會給出相同的結果。
什么是字節碼?采用字節碼的好處是什么?
在 Java 中,JVM可以理解的代碼就叫做字節碼(即擴展名為 .class 的?件),它不面向任何特定的處理器,只面向虛擬機。Java 語?通過字節碼的?式,在?定程度上解決了傳統解釋型語?執?效率低的問題,同時又保留了解釋型語?可移植的特點。所以 Java 程序運?時比較?效,?且,由于字節碼并不針對?種特定的機器,因此,Java程序?須重新編譯便可在多種不同操作系統的計算機上運?。
我們需要格外注意的是 .class->機器碼 這?步。在這?步 JVM 類加載器首先加載字節碼?件,然后通過解釋器逐?解釋執?,這種?式的執?速度會相對比較慢。?且,有些?法和代碼塊是經常需要被調用的(也就是所謂的熱點代碼),所以后面引進了 JIT 編譯器,?JIT 屬于運?時編譯。當 JIT 編譯器完成第?次編譯后,其會將字節碼對應的機器碼保存下來,下次可以直接使用。?我們知道,機器碼的運?效率肯定是?于 Java解釋器的。這也解釋了我們為什么經常會說 Java 是編譯與解釋共存的語?。
HotSpot采用了惰性評估(Lazy Evaluation)的做法,根據??定律,消耗?部分系統資源的只有那?小部分的代碼(熱點代碼),?這也就是JIT所需要編譯的部分。JVM會根據代碼每次被執?的情況收集信息并相應地做出?些優化,因此執?的次數越多,它的速度就越快。JDK 9引? 了?種新的編譯模式AOT(Ahead of Time Compilation),它是直接將字節碼編譯成機器碼,這樣就避免了JIT預熱等各?面的開銷。JDK支持分層編譯和AOT協作使用。但是 ,AOT 編譯器的編譯質量是肯定比不上 JIT編譯器的。
總結:
Java虛擬機(JVM)是運? Java 字節碼的虛擬機。JVM有針對不同系統的特定實現(Windows,Linux,macOS),目的是使用相同的字節碼,
它們都會給出相同的結果。字節碼和不同系統的 JVM 實現是 Java 語?“?次編譯,隨處可以運?”的關鍵所在。
JDK 和 JRE
JDK是Java Development Kit,它是功能齊全的Java SDK。它擁有JRE 所擁有的?切,還有編譯器(javac)和?具(如javadoc和jdb)。它能夠創建和編譯程序。
JRE 是 Java運?時環境。它是運?已編譯 Java 程序所需的所有內容的集合,包括 Java虛擬機(JVM),Java類庫,java命令和其他的?些基礎構件。但是,它不能用于創建新程序。
如果你只是為了運??下 Java 程序的話,那么你只需要安裝 JRE 就可以了。如果你需要進??些 Java 編程?面的?作,那么你就需要安裝JDK了。但是,這不是絕對的。有時,即使您不打算在計算機上進?任何Java開發,仍然需要安裝JDK。例如,如果要使用JSP部署Web應用程序,那么從技術上講,您只是在應用程序服務器中運?Java程序。那你為什么需要JDK呢?因為應用程序服務器會將 JSP 轉換為 Java servlet,并且需要使用 JDK 來編譯 servlet。
靜態?法和實例?法有何不同??
在外部調用靜態?法時,可以使用”類名.?法名”的?式,也可以使用”對象名.?法名”的?式。?實例?法只有后面這種?式。也就是說,調用靜態?法可以?需創建對象。
靜態?法在訪問本類的成員時,只允許訪問靜態成員(即靜態成員變 量和靜態?法),?不允許訪問實例成員變量和實例?法;實例?法則?此限制
今天就到這兒吧,小伙伴們點贊、收藏、評論是對我最大的支持、下期見~~
總結
以上是生活随笔為你收集整理的Java 基础知识总结(下)-王者笔记《收藏版》的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于javaweb(springboot
- 下一篇: 防火墙阻止网页连接网络连接_win7电脑