今天上午我考核,下午考核別人,發(fā)現(xiàn)了很大的問(wèn)題,自己被考核的時(shí)候,課本上基礎(chǔ)知識(shí)還行,但是一旦細(xì)化,問(wèn)深一點(diǎn)的問(wèn)題或者是底層邏輯,就不太行了,就只能簡(jiǎn)單回答一些基礎(chǔ)知識(shí)和問(wèn)題,提問(wèn)了幾個(gè)算法,寫(xiě)的不是一般的一般,從開(kāi)學(xué)到現(xiàn)在自己用Java就只練習(xí)了幾道,算法能力太差,打字速度太慢,知識(shí)吃的不透徹,考核別人的時(shí)候發(fā)現(xiàn)好像別人也有這個(gè)問(wèn)題。不能靈活運(yùn)用學(xué)習(xí)的知識(shí)點(diǎn),這是一個(gè)很大的Bug。下一階段的學(xué)習(xí)自己還需要更近一步的規(guī)劃和改進(jìn)。
下面是考核過(guò)程中我總結(jié)的一些Java基礎(chǔ)知識(shí)
一;JVM、JRE和JDK的關(guān)系
JVM是Java虛擬機(jī),Java程序需要運(yùn)行在虛擬機(jī)上,不同的平臺(tái)有自己的虛擬機(jī),因此Java語(yǔ)言可以實(shí)現(xiàn)跨平臺(tái)。
JRE包括Java虛擬機(jī)和Java程序所需的核心類庫(kù)等.
JDK是提供給Java開(kāi)發(fā)人員使用的,其中包含了Java的開(kāi)發(fā)工具,也包括了JRE。所以安裝了JDK,就無(wú)需再單獨(dú)安裝JRE了。其中的開(kāi)發(fā)工具:編譯工具(javac.exe),打包工具(jar.exe)等

二,Java有哪些數(shù)據(jù)類型
定義:Java語(yǔ)言是強(qiáng)類型語(yǔ)言,對(duì)于每一種數(shù)據(jù)都定義了明確的具體的數(shù)據(jù)類型,在內(nèi)存中分配了不同大小的內(nèi)存空間。
基本數(shù)據(jù)類型
數(shù)值型: 整數(shù)類型(byte,short,int,long) ,浮點(diǎn)類型(float,double),字符型(char),布爾型(boolean)
引用數(shù)據(jù)類型
類(class),接口(interface),數(shù)組([])
三、訪問(wèn)修飾符
訪問(wèn)修飾符 public,private,protected,以及不寫(xiě)(默認(rèn))時(shí)的區(qū)別
定義:Java中,可以使用訪問(wèn)修飾符來(lái)保護(hù)對(duì)類、變量、方法和構(gòu)造方法的訪問(wèn)。Java 支持 4 種不同的訪問(wèn)權(quán)限。
分類
private : 在同一類內(nèi)可見(jiàn)。使用對(duì)象:變量、方法。 注意:不能修飾類(外部類)
default (即缺省,什么也不寫(xiě),不使用任何關(guān)鍵字): 在同一包內(nèi)可見(jiàn),不使用任何修飾符。使用對(duì)象:類、接口、變量、方法。
protected : 對(duì)同一包內(nèi)的類和所有子類可見(jiàn)。使用對(duì)象:變量、方法。 注意:不能修飾類(外部類)。
public : 對(duì)所有類可見(jiàn)。使用對(duì)象:類、接口、變量、方法

四,運(yùn)算符
&和&&的區(qū)別
&運(yùn)算符有兩種用法:(1)按位與;(2)邏輯與。
&&運(yùn)算符是短路與運(yùn)算。邏輯與跟短路與的差別是非常巨大的,雖然二者都要求運(yùn)算符左右兩端的布爾值都是true 整個(gè)表達(dá)式的值才是 true。&&之所以稱為短路運(yùn)算,是因?yàn)槿绻?amp;&左邊的表達(dá)式的值是 false,右邊的表達(dá)式會(huì)被直接短路掉,不會(huì)進(jìn)行運(yùn)算。
注意:邏輯或運(yùn)算符(|)和短路或運(yùn)算符(||)的差別也是如此。
五,final 有什么用?
用于修飾類、屬性和方法;
被final修飾的類不可以被繼承
被final修飾的方法不可以被重寫(xiě)
被final修飾的變量不可以被改變,被final修飾不可變的是變量的引用,而不是引用指向的內(nèi)容,引用指向的內(nèi)容是可以改變的
六,this關(guān)鍵字的用法
this是自身的一個(gè)對(duì)象,代表對(duì)象本身,可以理解為:指向?qū)ο蟊旧淼囊粋€(gè)指針。
this的用法在java中大體可以分為3種:
①. 普通的直接引用,this相當(dāng)于是指向當(dāng)前對(duì)象本身。
②. 形參與成員名字重名,用this來(lái)區(qū)分:
七,super關(guān)鍵字的用法
super可以理解為是指向自己超(父)類對(duì)象的一個(gè)指針,而這個(gè)超類指的是離自己最近的一個(gè)父類。
super也有三種用法:
①. 普通的直接引用
與this類似,super相當(dāng)于是指向當(dāng)前對(duì)象的父類的引用,這樣就可以用super.xxx來(lái)引用父類的成員。
②. 子類中的成員變量或方法與父類中的成員變量或方法同名時(shí),用super進(jìn)行區(qū)分
③. 引用父類構(gòu)造函數(shù)
super(參數(shù)):調(diào)用父類中的某一個(gè)構(gòu)造函數(shù)(應(yīng)該為構(gòu)造函數(shù)中的第一條語(yǔ)句)。
this(參數(shù)):調(diào)用本類中另一種形式的構(gòu)造函數(shù)(應(yīng)該為構(gòu)造函數(shù)中的第一條語(yǔ)句)。
八,this與super的區(qū)別
super: 它引用當(dāng)前對(duì)象的直接父類中的成員(用來(lái)訪問(wèn)直接父類中被隱藏的父類中成員數(shù)據(jù)或函數(shù),基類與派生類中有相同成員定義時(shí)如:super.變量名 super.成員函數(shù)據(jù)名(實(shí)參)
this:它代表當(dāng)前對(duì)象名(在程序中易產(chǎn)生二義性之處,應(yīng)使用this來(lái)指明當(dāng)前對(duì)象;如果函數(shù)的形參與類中的成員數(shù)據(jù)同名,這時(shí)需用this來(lái)指明成員變量名)
super()和this()類似,區(qū)別是,super()在子類中調(diào)用父類的構(gòu)造方法,this()在本類內(nèi)調(diào)用本類的其它構(gòu)造方法。
super()和this()均需放在構(gòu)造方法內(nèi)第一行。
盡管可以用this調(diào)用一個(gè)構(gòu)造器,但卻不能調(diào)用兩個(gè)。
this和super不能同時(shí)出現(xiàn)在一個(gè)構(gòu)造函數(shù)里面,因?yàn)閠his必然會(huì)調(diào)用其它的構(gòu)造函數(shù),其它的構(gòu)造函數(shù)必然也會(huì)有super語(yǔ)句的存在,所以在同一個(gè)構(gòu)造函數(shù)里面有相同的語(yǔ)句,就失去了語(yǔ)句的意義,編譯器也不會(huì)通過(guò)。
this()和super()都指的是對(duì)象,所以,均不可以在static環(huán)境中使用。包括:static變量,static方法,static語(yǔ)句塊。
從本質(zhì)上講,this是一個(gè)指向本對(duì)象的指針, 然而super是一個(gè)Java關(guān)鍵字。
九,流程控制語(yǔ)句
break ,continue ,return 的區(qū)別及作用
break 跳出總上一層循環(huán),不再執(zhí)行循環(huán)(結(jié)束當(dāng)前的循環(huán)體)
continue 跳出本次循環(huán),繼續(xù)執(zhí)行下次循環(huán)(結(jié)束正在執(zhí)行的循環(huán) 進(jìn)入下一個(gè)循環(huán)條件)
return 程序返回,不再執(zhí)行下面的代碼(結(jié)束當(dāng)前的方法 直接返回)
十,面向?qū)ο蟮奶卣髦饕幸韵聨讉€(gè)方面:
抽象:抽象是將一類對(duì)象的共同特征總結(jié)出來(lái)構(gòu)造類的過(guò)程,包括數(shù)據(jù)抽象和行為抽象兩方面。抽象只關(guān)注對(duì)象有哪些屬性和行為,并不關(guān)注這些行為的細(xì)節(jié)是什么。
封裝
封裝把一個(gè)對(duì)象的屬性私有化,同時(shí)提供一些可以被外界訪問(wèn)的屬性的方法,如果屬性不想被外界訪問(wèn),我們大可不必提供方法給外界訪問(wèn)。但是如果一個(gè)類沒(méi)有提供給外界訪問(wèn)的方法,那么這個(gè)類也沒(méi)有什么意義了。
繼承
繼承是使用已存在的類的定義作為基礎(chǔ)建立新類的技術(shù),新類的定義可以增加新的數(shù)據(jù)或新的功能,也可以用父類的功能,但不能選擇性地繼承父類。通過(guò)使用繼承我們能夠非常方便地復(fù)用以前的代碼。
關(guān)于繼承如下 3 點(diǎn)請(qǐng)記?。?/p>
子類擁有父類非 private 的屬性和方法。
子類可以擁有自己屬性和方法,即子類可以對(duì)父類進(jìn)行擴(kuò)展。
子類可以用自己的方式實(shí)現(xiàn)父類的方法。(以后介紹)。
多態(tài)
所謂多態(tài)就是指程序中定義的引用變量所指向的具體類型和通過(guò)該引用變量發(fā)出的方法調(diào)用在編程時(shí)并不確定,而是在程序運(yùn)行期間才確定,即一個(gè)引用變量到底會(huì)指向哪個(gè)類的實(shí)例對(duì)象,該引用變量發(fā)出的方法調(diào)用到底是哪個(gè)類中實(shí)現(xiàn)的方法,必須在由程序運(yùn)行期間才能決定。
在Java中有兩種形式可以實(shí)現(xiàn)多態(tài):繼承(多個(gè)子類對(duì)同一方法的重寫(xiě))和接口(實(shí)現(xiàn)接口并覆蓋接口中同一方法)。
其中Java 面向?qū)ο缶幊倘筇匦裕悍庋b 繼承 多態(tài)
封裝:隱藏對(duì)象的屬性和實(shí)現(xiàn)細(xì)節(jié),僅對(duì)外提供公共訪問(wèn)方式,將變化隔離,便于使用,提高復(fù)用性和安全性。
繼承:繼承是使用已存在的類的定義作為基礎(chǔ)建立新類的技術(shù),新類的定義可以增加新的數(shù)據(jù)或新的功能,也可以用父類的功能,但不能選擇性地繼承父類。通過(guò)使用繼承可以提高代碼復(fù)用性。繼承是多態(tài)的前提。
關(guān)于繼承如下 3 點(diǎn)請(qǐng)記?。?/p>
子類擁有父類非 private 的屬性和方法。
子類可以擁有自己屬性和方法,即子類可以對(duì)父類進(jìn)行擴(kuò)展。
子類可以用自己的方式實(shí)現(xiàn)父類的方法。
多態(tài)性:父類或接口定義的引用變量可以指向子類或具體實(shí)現(xiàn)類的實(shí)例對(duì)象。提高了程序的拓展性。
在Java中有兩種形式可以實(shí)現(xiàn)多態(tài):繼承(多個(gè)子類對(duì)同一方法的重寫(xiě))和接口(實(shí)現(xiàn)接口并覆蓋接口中同一方法)。
方法重載(overload)實(shí)現(xiàn)的是編譯時(shí)的多態(tài)性(也稱為前綁定),而方法重寫(xiě)(override)實(shí)現(xiàn)的是運(yùn)行時(shí)的多態(tài)性(也稱為后綁定)。
一個(gè)引用變量到底會(huì)指向哪個(gè)類的實(shí)例對(duì)象,該引用變量發(fā)出的方法調(diào)用到底是哪個(gè)類中實(shí)現(xiàn)的方法,必須在由程序運(yùn)行期間才能決定。運(yùn)行時(shí)的多態(tài)是面向?qū)ο笞罹璧臇|西,要實(shí)現(xiàn)多態(tài)需要做兩件事:
方法重寫(xiě)(子類繼承父類并重寫(xiě)父類中已有的或抽象的方法);
對(duì)象造型(用父類型引用子類型對(duì)象,這樣同樣的引用調(diào)用同樣的方法就會(huì)根據(jù)子類對(duì)象的不同而表現(xiàn)出不同的行為)。
十一,多態(tài)的實(shí)現(xiàn)
Java實(shí)現(xiàn)多態(tài)有三個(gè)必要條件:繼承、重寫(xiě)、向上轉(zhuǎn)型。
繼承:在多態(tài)中必須存在有繼承關(guān)系的子類和父類。
重寫(xiě):子類對(duì)父類中某些方法進(jìn)行重新定義,在調(diào)用這些方法時(shí)就會(huì)調(diào)用子類的方法。
向上轉(zhuǎn)型:在多態(tài)中需要將子類的引用賦給父類對(duì)象,只有這樣該引用才能夠具備技能調(diào)用父類的方法和子類的方法。
只有滿足了上述三個(gè)條件,我們才能夠在同一個(gè)繼承結(jié)構(gòu)中使用統(tǒng)一的邏輯實(shí)現(xiàn)代碼處理不同的對(duì)象,從而達(dá)到執(zhí)行不同的行為。
對(duì)于Java而言,它多態(tài)的實(shí)現(xiàn)機(jī)制遵循一個(gè)原則:當(dāng)超類對(duì)象引用變量引用子類對(duì)象時(shí),被引用對(duì)象的類型而不是引用變量的類型決定了調(diào)用誰(shuí)的成員方法,但是這個(gè)被調(diào)用的方法必須是在超類中定義過(guò)的,也就是說(shuō)被子類覆蓋的方法。
十二,類與接口
抽象類和接口的對(duì)比
抽象類是用來(lái)捕捉子類的通用特性的。接口是抽象方法的集合。
從設(shè)計(jì)層面來(lái)說(shuō),抽象類是對(duì)類的抽象,是一種模板設(shè)計(jì),接口是行為的抽象,是一種行為的規(guī)范。
相同點(diǎn)
接口和抽象類都不能實(shí)例化
都位于繼承的頂端,用于被其他實(shí)現(xiàn)或繼承
都包含抽象方法,其子類都必須覆寫(xiě)這些抽象方法

十三,2. 普通類和抽象類有哪些區(qū)別?
普通類不能包含抽象方法,抽象類可以包含抽象方法。
抽象類不能直接實(shí)例化,普通類可以直接實(shí)例化。
十四,抽象類能使用 final 修飾嗎?
不能,定義抽象類就是讓其他類繼承的,如果定義為 final 該類就不能被繼承,這樣彼此就會(huì)產(chǎn)生矛盾,所以 final 不能修飾抽象類
十五,成員變量與局部變量的區(qū)別有哪些
變量:在程序執(zhí)行的過(guò)程中,在某個(gè)范圍內(nèi)其值可以發(fā)生改變的量。從本質(zhì)上講,變量其實(shí)是內(nèi)存中的一小塊區(qū)域
成員變量:方法外部,類內(nèi)部定義的變量
局部變量:類的方法中的變量。
成員變量和局部變量的區(qū)別
作用域
成員變量:針對(duì)整個(gè)類有效。
局部變量:只在某個(gè)范圍內(nèi)有效。(一般指的就是方法,語(yǔ)句體內(nèi))
存儲(chǔ)位置
成員變量:隨著對(duì)象的創(chuàng)建而存在,隨著對(duì)象的消失而消失,存儲(chǔ)在堆內(nèi)存中。
局部變量:在方法被調(diào)用,或者語(yǔ)句被執(zhí)行的時(shí)候存在,存儲(chǔ)在棧內(nèi)存中。當(dāng)方法調(diào)用完,或者語(yǔ)句結(jié)束后,就自動(dòng)釋放。
生命周期
成員變量:隨著對(duì)象的創(chuàng)建而存在,隨著對(duì)象的消失而消失
局部變量:當(dāng)方法調(diào)用完,或者語(yǔ)句結(jié)束后,就自動(dòng)釋放。
初始值
成員變量:有默認(rèn)初始值。
局部變量:沒(méi)有默認(rèn)初始值,使用前必須賦值。
使用原則
在使用變量時(shí)需要遵循的原則為:就近原則
首先在局部范圍找,有就使用;接著在成員位置找。
十六,重寫(xiě)與重載
構(gòu)造器(constructor)是否可被重寫(xiě)(override)
構(gòu)造器不能被繼承,因此不能被重寫(xiě),但可以被重載。
2. 重載(Overload)和重寫(xiě)(Override)的區(qū)別。重載的方法能否根據(jù)返回類型進(jìn)行區(qū)分?
方法的重載和重寫(xiě)都是實(shí)現(xiàn)多態(tài)的方式,區(qū)別在于前者實(shí)現(xiàn)的是編譯時(shí)的多態(tài)性,而后者實(shí)現(xiàn)的是運(yùn)行時(shí)的多態(tài)性。
重載:發(fā)生在同一個(gè)類中,方法名相同參數(shù)列表不同(參數(shù)類型不同、個(gè)數(shù)不同、順序不同),與方法返回值和訪問(wèn)修飾符無(wú)關(guān),即重載的方法不能根據(jù)返回類型進(jìn)行區(qū)分
重寫(xiě):發(fā)生在父子類中,方法名、參數(shù)列表必須相同,返回值小于等于父類,拋出的異常小于等于父類,訪問(wèn)修飾符大于等于父類(里氏代換原則);如果父類方法訪問(wèn)修飾符為private則子類中就不是重寫(xiě)。
十七,對(duì)象相等判斷
== 和 equals 的區(qū)別是什么
== : 它的作用是判斷兩個(gè)對(duì)象的地址是不是相等。即,判斷兩個(gè)對(duì)象是不是同一個(gè)對(duì)象。(基本數(shù)據(jù)類型 == 比較的是值,引用數(shù)據(jù)類型 == 比較的是內(nèi)存地址)
equals() : 它的作用也是判斷兩個(gè)對(duì)象是否相等。但它一般有兩種使用情況:
情況1:類沒(méi)有覆蓋 equals() 方法。則通過(guò) equals() 比較該類的兩個(gè)對(duì)象時(shí),等價(jià)于通過(guò)“==”比較這兩個(gè)對(duì)象。
情況2:類覆蓋了 equals() 方法。一般,我們都覆蓋 equals() 方法來(lái)兩個(gè)對(duì)象的內(nèi)容相等;若它們的內(nèi)容相等,則返回 true (即,認(rèn)為這兩個(gè)對(duì)象相等)。
十八,異常的分類
異常分為編譯時(shí)異常和運(yùn)行時(shí)異常。
所有異常都是在運(yùn)行階段發(fā)生的。因?yàn)橹挥谐绦蜻\(yùn)行階段才可以new對(duì)象。
因?yàn)楫惓5陌l(fā)生就是new異常對(duì)象。
異常的處理方式
5.1 throws
在方法聲明的位置上使用 throws 關(guān)鍵字拋出,誰(shuí)調(diào)用我這個(gè)方法,我就拋給誰(shuí)。拋給 調(diào)用者 來(lái)處理。
這種處理異常的態(tài)度:上報(bào)。
5.2 try…catch
這個(gè)異常不會(huì)上報(bào),自己把這個(gè)事兒處理了。
異常拋到此處為止,不再上拋了。
注意:
只要異常沒(méi)有捕捉,采用上報(bào)的方式,此方法的 后續(xù)代碼不會(huì)執(zhí)行。
try語(yǔ)句塊中的某一行出現(xiàn)異常,該行 后面的代碼不會(huì)執(zhí)行。
try…catch捕捉異常之后,后續(xù)代碼可以執(zhí)行。
注意:
異常發(fā)生之后,如果我選擇了上拋,拋給了我的調(diào)用者,調(diào)用者需要對(duì)這個(gè)異常繼續(xù)處理,那么調(diào)用者處理這個(gè)異常同樣有兩種處理方式。
一般不建議在main方法上使用throws,因?yàn)檫@個(gè)異常如果真正的發(fā)生了,一定會(huì)拋給JVM。JVM只有終止。
一般main方法中的異常建議使用try…catch進(jìn)行捕捉。
十九,

1)List
List代表了有序可重復(fù)集合,可直接根據(jù)元素的索引來(lái)訪問(wèn)
2)Set
Set代表無(wú)序不可重復(fù)集合,只能根據(jù)元素本身來(lái)訪問(wèn)
3)Queue
Queue是隊(duì)列集合
Map接口派生:
Map代表的是存儲(chǔ)key-value對(duì)的集合,可根據(jù)元素的key來(lái)訪問(wèn)value。
Java集合List
List代表了有序可重復(fù)集合,可直接根據(jù)元素的索引來(lái)訪問(wèn)。
List接口常用的實(shí)現(xiàn)類有:ArrayList、LinkedList、Vector。
List集合特點(diǎn):
集合中的元素允許重復(fù)
集合中的元素是有順序的,各元素插入的順序就是各元素的順序
集合中的元素可以通過(guò)索引來(lái)訪問(wèn)或者設(shè)置
ArrayList是一個(gè)動(dòng)態(tài)數(shù)組,也是我們最常用的集合,是List類的典型實(shí)現(xiàn)。
它允許任何符合規(guī)則的元素插入甚至包括null,每一個(gè)ArrayList都有一個(gè)初始容量(10),該容量代表了數(shù)組的大小。
隨著容器中的元素不斷增加,容器的大小也會(huì)隨著增加,在每次向容器中增加元素的同時(shí)都會(huì)進(jìn)行容量檢查,當(dāng)快溢出時(shí),就會(huì)進(jìn)行擴(kuò)容操作。
所以如果我們明確所插入元素的多少,最好指定一個(gè)初始容量值,避免過(guò)多的進(jìn)行擴(kuò)容操作而浪費(fèi)時(shí)間、效率。
ArrayList擅長(zhǎng)于隨機(jī)訪問(wèn),同時(shí)ArrayList是非同步的。
Set擴(kuò)展Collection接口,無(wú)序集合,不允許存放重復(fù)的元素。
Set接口常用的實(shí)現(xiàn)類有:HashSet、LinkedHashSet、TreeSet
HashSet是Set集合最常用實(shí)現(xiàn)類,是其經(jīng)典實(shí)現(xiàn)。
HashSet底層數(shù)據(jù)結(jié)構(gòu)采用哈希表實(shí)現(xiàn),元素?zé)o序且唯一,線程不安全,效率高,可以存儲(chǔ)null元素,元素的唯一性是靠所存儲(chǔ)元素類型是否重寫(xiě)hashCode()和equals()方法來(lái)保證的,如果沒(méi)有重寫(xiě)這兩個(gè)方法,則無(wú)法保證元素的唯一性。
LinkedHashSet底層數(shù)據(jù)結(jié)構(gòu)采用鏈表和哈希表共同實(shí)現(xiàn),鏈表保證了元素的順序與存儲(chǔ)順序一致,哈希表保證了元素的唯一性。
TreeSet底層數(shù)據(jù)結(jié)構(gòu)采用二叉樹(shù)來(lái)實(shí)現(xiàn),元素唯一且已經(jīng)排好序,唯一性同樣需要重寫(xiě)hashCode和equals()方法,二叉樹(shù)結(jié)構(gòu)保證了元素的有序性。
二十,鼠標(biāo)監(jiān)聽(tīng)事件,鍵盤(pán)監(jiān)聽(tīng)事件
接下來(lái)的的學(xué)習(xí)方向,學(xué)習(xí)計(jì)劃:
學(xué)習(xí)網(wǎng)頁(yè)基礎(chǔ)HTML+CSS,學(xué)的過(guò)程中一定要?jiǎng)邮?,最好在有道云筆記記錄新學(xué)的內(nèi)容。