下面為大家分享一些java實(shí)習(xí)生基礎(chǔ)面試題:
(更多相關(guān)面試題推薦:java面試題及答案)
1、Java到底是什么東西?
Java是一款面向?qū)ο蟮木幊陶Z言,是SUN(斯坦福大學(xué)網(wǎng)絡(luò)公司)1995年推出的,在2010年被ORACLE收購
2、Java這么熱門它有什么特點(diǎn)呢?
Java是跨平臺(tái)性的語言(一處編譯,到處執(zhí)行)。
例如:Java在Windows平臺(tái)中編寫hello.java文件—>編譯成hello.class文件;在不同的操作系統(tǒng)中安裝對(duì)應(yīng)的Java虛擬機(jī)(所有的系統(tǒng)平臺(tái)必須有JVM才可以運(yùn)行Java編譯的文件),就可以直接運(yùn)行
3、Java的三種技術(shù)架構(gòu)
Java三種基本技術(shù)架構(gòu)分別是:JavaSE、JavaEE、JavaME
JavaSE:是JavaEE與JavaME的基礎(chǔ),是非常平面話的
JavaEE:適合開發(fā)者的平臺(tái)主要針對(duì)WEB應(yīng)用系統(tǒng)的開發(fā)
JavaME:開發(fā)小型的電子消費(fèi)品;比如:手機(jī)上的APP;機(jī)器上的語言(電梯、掃地機(jī)器人)
4、在編寫Java程序時(shí)的注意點(diǎn)
(1)、Java是大小寫敏感的,對(duì)應(yīng)的Hello和hello是不同的
(2)、Java對(duì)于所有的類來說,類的首字母應(yīng)該大寫、若類名有多個(gè)單詞組成,則每個(gè)單詞首字母都應(yīng)該大寫。如:MyFirstJava
(3)、Java所有的方法名首字母都應(yīng)該小寫,如有多個(gè)單詞組成,則后面的單詞首字母要大寫。如:findByName
(4)、源文件必須與類名一致
5、Java有那幾個(gè)基本數(shù)據(jù)類型
Java有八種基本數(shù)據(jù)類型:byte、short、int、long、float、double、char、boolean(六種數(shù)字類型:四個(gè)整型(byte、short、int、long),兩個(gè)浮點(diǎn)型(float、double))
byte:數(shù)據(jù)類型是8位、有符號(hào)的,以二進(jìn)制補(bǔ)碼表示的整數(shù)。用于大型數(shù)組中節(jié)約空間,用為byte變量占用的空間只有int類型的四分之一。對(duì)應(yīng)的包裝類:Byte,取值(27- 27-1)
short:數(shù)據(jù)類型是16位、以二進(jìn)制補(bǔ)碼表示的整數(shù)。short數(shù)據(jù)類型也可以像byte那樣節(jié)約空間。一個(gè)short變量是int型變量的二分之一。對(duì)應(yīng)的包裝類:Short。取值(215- 215-1)
int:數(shù)據(jù)類型是32位、有符號(hào)的,以二進(jìn)制補(bǔ)碼表示的整數(shù)。一般的整型變量默認(rèn)為int類型。取值(231- 231-1)
long:數(shù)據(jù)類型是64位,有符號(hào)的,以二進(jìn)制補(bǔ)碼表示的整數(shù)。這種數(shù)據(jù)類型主要使用在需要比較大整數(shù)的系統(tǒng)上。取值(263- 263-1)
float:數(shù)據(jù)類型是單精度、32位的浮點(diǎn)數(shù)。float在存儲(chǔ)大型浮點(diǎn)數(shù)組的時(shí)候可以節(jié)約內(nèi)存空間。默認(rèn)值是0.0f。浮點(diǎn)數(shù)不能用來表示精確的值,如貨幣。
double:數(shù)據(jù)類型是雙精度、64位的浮點(diǎn)數(shù)。浮點(diǎn)數(shù)的默認(rèn)類型位double類型。double類型同樣不能表示精確的值,如貨幣。默認(rèn)值是0.0d。
char:類型是一個(gè)單一的16位Unicode字符。char數(shù)據(jù)類型可以存儲(chǔ)任何字符。但只能存儲(chǔ)一個(gè)字符
boolean:數(shù)據(jù)類型表示一位數(shù)字信息,只有兩個(gè)取值:true和false。這種類型只作為一種標(biāo)志來記錄true\false情況,默認(rèn)值是false。
6、訪問權(quán)限修飾符分別是什么?
訪問權(quán)限修飾符有:public、protected、default(默認(rèn)不寫)、private
public:最大訪問權(quán),用于對(duì)外的接口
protected:用于保護(hù)子類傳遞給子類一種繼承的東西
default:是針對(duì)與本包的訪問而設(shè)計(jì)的
private:訪問權(quán)限僅限于類的內(nèi)部,不能被外層的類訪問
7、怎樣才能運(yùn)行一個(gè)程序?
所有的Java程序都是由public static viod main(String []args){}方法開始執(zhí)行。
8、Java中經(jīng)常提到的對(duì)象是什么?
對(duì)象是類的一個(gè)實(shí)例,有狀態(tài)有行為。
例如:一條狗是一個(gè)對(duì)象,它的狀態(tài)有:顏色、名字、品種;行為有:搖尾巴、叫、吃等。
軟件對(duì)象也有狀態(tài)和行為。軟件的對(duì)象就是屬性,行為通過方法體現(xiàn)
9、類是什么?
類是一個(gè)模板,它描述一類對(duì)象的行為和狀態(tài),一個(gè)類可以擁有多個(gè)方法
10、類里面的方法,要如何去構(gòu)造?
創(chuàng)建一個(gè)對(duì)象的時(shí)候,至少要調(diào)用一個(gè)構(gòu)造方法。構(gòu)造方法的名稱必須與類同名,一個(gè)類可以有多個(gè)構(gòu)造方法。
11、如何創(chuàng)造一個(gè)對(duì)象?
對(duì)象是根據(jù)類創(chuàng)建的。在Java中,使用關(guān)鍵字new來創(chuàng)建一個(gè)新的對(duì)象。創(chuàng)建對(duì)象需要三步:
聲明:聲明一個(gè)對(duì)象,包括對(duì)象的名稱和對(duì)象的類型。
實(shí)例化:使用關(guān)鍵字new來創(chuàng)建一個(gè)對(duì)象
初始化:使用new來創(chuàng)建對(duì)象時(shí)會(huì)調(diào)用構(gòu)造方法初始化對(duì)象
12、源文件的聲明有聲明規(guī)則?
(1)、源文件只能有一個(gè)public類
(2)、可以有多個(gè)非public類
(3)、源文件的名稱必須與類同名
(4)、如果源文件定義在某個(gè)包內(nèi),那么導(dǎo)包應(yīng)該在源文件的首行。
(5)、如果源文件包含import語句,那么在包語句和類之間定義,如果沒有package語句,那么import語句應(yīng)該在源文件最前面
(6)、import語句和package語句對(duì)源文件中定義的所有類都有效。在同一源文件中,不能給不同的類定義不同的包聲明
13、什么是變量?
變量就是申請(qǐng)內(nèi)存來存儲(chǔ)值。也就是說,當(dāng)創(chuàng)建變量的時(shí)候,需要在內(nèi)存中申請(qǐng)空間。內(nèi)存管理系統(tǒng)根據(jù)變量的類型來分配空間,分配的空間只能用來存儲(chǔ)該類型的數(shù)據(jù)。
14、定義變量有什么作用?
通過定義不同的類型,可以用于存儲(chǔ)不同類型的數(shù)(如:整數(shù),小數(shù)、字符)
15、各個(gè)類型之間能不能轉(zhuǎn)換?
從低到高:
byte,short,char——>int——>long——>float——>double
可以自動(dòng)轉(zhuǎn)換。
(1)、不能對(duì)boolean類型進(jìn)行類型轉(zhuǎn)換
(2)、不能把對(duì)象類型轉(zhuǎn)換成不相關(guān)類的對(duì)象
(3)、把容量大的類型轉(zhuǎn)換為容量小的類型時(shí)必須強(qiáng)制類型轉(zhuǎn)換(type)value type。轉(zhuǎn)換過程中可能導(dǎo)致溢出或損失精度
(4)、自動(dòng)類型轉(zhuǎn)換必須滿足轉(zhuǎn)換前的數(shù)據(jù)的位數(shù)小于轉(zhuǎn)換以后的數(shù)據(jù)類型位數(shù)。
(5)、浮點(diǎn)型到整數(shù)的轉(zhuǎn)換是直接通過舍棄小數(shù)部分得到,而不是四舍五入。
例如:(int)23.7 == 23, (int)-23.7 = = -23
16、java運(yùn)算符有哪些?
(·1)、算數(shù)運(yùn)算符:與數(shù)學(xué)中的類似,主要有+ - * \ % ++ --(++a是先在原來基礎(chǔ)加1再進(jìn)行運(yùn)算,a–則先運(yùn)算再減1)
(2)、邏輯運(yùn)算符:主要有 && || !
(3)、賦值運(yùn)算符:主要起一個(gè)賦值的作用,常用的有 = += -=
(4)、條件運(yùn)算符:也稱為三元運(yùn)算符。該運(yùn)算符有3個(gè)操作數(shù),并且需要判斷布爾表達(dá)式的值。該運(yùn)算符的主要是決定那個(gè)值應(yīng)該賦值給變量
例如:int a = (20==40)? 30 : 50;
17、java主要的三種循環(huán)結(jié)構(gòu)是?
Java主要的三種循環(huán)結(jié)構(gòu):while 循環(huán)、do……while循環(huán)、for循環(huán)
(1)、while是最基本的循環(huán),它的結(jié)構(gòu)為:
while(布爾表達(dá)式){
//循環(huán)內(nèi)容
}
只需要布爾表達(dá)式為true,循環(huán)會(huì)一直進(jìn)行。
(2)、do…while循環(huán)和while循環(huán)相識(shí),不同的是,do…while循環(huán)至少會(huì)執(zhí)行一次。
do{
//循環(huán)內(nèi)容
}while(布爾表達(dá)式)
(3)、for循環(huán)執(zhí)行的次數(shù)是在執(zhí)行前就確定的
for(初始化;布爾表達(dá)式;更新){
//代碼語句
}
18、循環(huán)結(jié)構(gòu)有什么關(guān)鍵字嗎?
主要有:break和continue;
break:主要用在循環(huán)語句或者switch語句中,用來跳出整個(gè)語句塊;break跳出當(dāng)前循環(huán),并且繼續(xù)執(zhí)行該循環(huán)下面的語句。
continue:適用于任何循環(huán)控制結(jié)構(gòu)中,作用是讓程序立即跳轉(zhuǎn)到下一次循環(huán)的迭代。在for循環(huán)中,continue語句使程序立即跳轉(zhuǎn)到更新語句。
在while和do…while循環(huán)中,程序立即跳轉(zhuǎn)到布爾表達(dá)式的判斷語句。
19、Number類是一個(gè)什么東西?
當(dāng)內(nèi)置數(shù)據(jù)類型被當(dāng)作對(duì)象使用的時(shí)候,編譯器會(huì)把內(nèi)置類型裝箱為包裝類。Number類屬于java.lang包。所有的包裝類(Integer、Long、Byte、Double、Float、Short)都是抽象類Number的子類。
20、Java中Math類是怎么樣的?
包含了用于執(zhí)行基本的數(shù)學(xué)運(yùn)算的屬性與方法,如初等指數(shù)、對(duì)象、平方根和三角函數(shù)。Math的方法都被定義為static形式。通過Math類可以在主函數(shù)中直接調(diào)用。
21、Math中的floor,round、ceil有什么區(qū)別?
ceil:返回大于等于給指導(dǎo)參數(shù)的最小整數(shù)(例如:Math.ceil(23.2) ==24 而不是四舍五入)
floor:返回小于等于給指導(dǎo)參數(shù)的最大整數(shù)(例如:Math.ceil(23.7) ==23 而不是四舍五入)
round:它表示四舍五入,算法為Math.round(x+0.5),即將原來的數(shù)加上0.5后再向下取整。所以,Math.round(11.4) 等于11,Math.round(11.5) 等于12,Math.round(-11.5) 等于-11。
22、Character類是什么東西,該類有哪些方法?
Character:是Java語言為內(nèi)置基本數(shù)據(jù)類型char提供的包裝類。
Character主要的方法有:isLetter()—是否是一個(gè)字母;toString—返回字符串的長度,字符串長度僅為1;isUpperCase()----是否是大寫字母;isLowerCase()—是否是小寫字母。
23、前面有反斜杠(\)的字符代表的轉(zhuǎn)義字符有哪些?
常用的轉(zhuǎn)義字符有:\t(在文中該處插入一個(gè)tab鍵)
\d(在文中該處插入一個(gè)后退鍵)
\n(在文中該處插入換行)
\r(在文中該處插入回車)
24、Java的String類有什么注意事項(xiàng)?
字符串在Java中屬于對(duì)象,Java提供String類來創(chuàng)建和操作字符串。String類是不可以改變的,一旦創(chuàng)建String對(duì)象,那么它的值就無法改變了。如果需要對(duì)字符串進(jìn)行修改就應(yīng)該使用StringBuffer或StringBuilder類。
25、length()方法,length屬性和size()的方法有什么區(qū)別?
length()方法是針對(duì)字符串來說的,要求一個(gè)字符串的長度就要用到它的length()方法;
length()屬性是針對(duì)Java中數(shù)組來說的,要求數(shù)組的長度可以用其length屬性;
java中的size()是針對(duì)泛型集合來說的,如果想看這個(gè)泛型有多少元素,就調(diào)用這個(gè)方法來查看!
26、連接字符串的方法有哪些?
有兩種:
(1)、字符串1.concat(字符串2)
(2)、更常用的是使用‘+’操作來連接字符串,如:“Hello”+“Word”+"!";
27、Java中StringBuffer和StringBuilder類有什么區(qū)別?
StringBuilder類在Java 5被提出,它和StringBuffer之間最大的不同在于StringBuilder的方法不是線程安全的(不能同步訪問)由于StringBuilder相對(duì)與StringBuffer有速度的優(yōu)勢(shì),所以大多數(shù)情況下使用StringBuilder。然而在應(yīng)用程序要求線性安全的情況下,則必須使用StringBuffer類。
28、StringBuffer是如何實(shí)現(xiàn)對(duì)象修改的?
String Buffer主要有append()方法完成連接,insert()方法完成增加;reverse()方法完成反轉(zhuǎn);replace()方法完成替換。
如:buf.append(“hi”);
buf.insert(0,“Hello”); //在第一個(gè)內(nèi)容之前添加
buf.insert(buf.length,‘Hello’); //在最后面插入數(shù)據(jù)
String str = buf.reverse().toString(); //將內(nèi)容反轉(zhuǎn)后轉(zhuǎn)為字符串
buf.replace(6,11,“yes”); //將word的內(nèi)容替換
29、數(shù)組可以作為參數(shù)傳遞到方法里嗎?
可以
30、如何獲取當(dāng)前時(shí)間,以及自定義時(shí)間?
打印當(dāng)前時(shí)間:Data data = new Date(); data就是當(dāng)前時(shí)間!
設(shè)置日期時(shí)間格式,SimpleDateFormat
SimpleDateFormat sc = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
System.out.printf(sc.format(要轉(zhuǎn)換的時(shí)間))
31、Java是如何進(jìn)行休眠的?
休眠sleep()使當(dāng)前線程進(jìn)入停滯狀態(tài)(阻塞當(dāng)前進(jìn)程),讓出cpu的使用、目的是不讓當(dāng)前的線程獨(dú)自霸占該線程所獲取的cpu資源,以留一定時(shí)間給其他線程執(zhí)行的機(jī)會(huì)??梢宰尦绦蛐菝邘缀撩氲臅r(shí)間。Tread.sleep(1000*3) //休眠3秒
32、如何設(shè)置獲取日期格式的特定部分,比如年,月,日,日分秒?
是使用Calender類。Calender類是一個(gè)抽象類,在實(shí)際的使用時(shí)實(shí)現(xiàn)特定的子類的對(duì)象,創(chuàng)建對(duì)象的過程對(duì)程序員來說是透明的,只需要使用getInstance方法創(chuàng)建即可。
33、使用的話有什么類或者方法嗎?
java.util.regex包主要包括以下三個(gè)類:
Pattern類:Pattern對(duì)象是正則表達(dá)式的編譯表示,Pattern類沒有公共構(gòu)造方法。要?jiǎng)?chuàng)建一個(gè)Pattern對(duì)象,必須首先調(diào)用其公共的靜態(tài)編譯方法,它返回一個(gè)Pattern對(duì)象。
Matcher類:Matcher對(duì)象是對(duì)輸入的字符串進(jìn)行編譯和匹配操作的引擎。
PatternSyntaxExeption:PatternSyntaxExeption是一個(gè)非強(qiáng)制異常類,它表示一個(gè)正則表達(dá)式模式的語法錯(cuò)誤。
34、構(gòu)造方法與方法之間有什么聯(lián)系?
構(gòu)造方法的概念:當(dāng)創(chuàng)建對(duì)象時(shí),系統(tǒng)會(huì)自動(dòng)調(diào)用構(gòu)造方法。沒有自定義構(gòu)造方法時(shí),系統(tǒng)會(huì)調(diào)用默認(rèn)的構(gòu)造方法。構(gòu)造方法可以被重載,不能被重寫,不同的構(gòu)造方法名字相同,參數(shù)列表不同,參數(shù)列表是其識(shí)別的依據(jù)、標(biāo)準(zhǔn)、類似與人的名字有可能相同但是身份證不相同。
當(dāng)自定義構(gòu)造方法時(shí),系統(tǒng)依據(jù)傳入的參數(shù)類型、數(shù)量,自動(dòng)匹配構(gòu)造方法初始化對(duì)象。
35、Scanner類是什么?如何創(chuàng)建Scanner對(duì)象
java.util.Scanner是java5的一個(gè)新特征。我們可以獲取用戶的輸入。
Scanner sc = new Scanner();
36、Scanner類的next()與nextLine()方法獲取輸入的字符串有什么區(qū)別?
next():
(1)、一定要讀取到有效字符后才會(huì)結(jié)束輸入;
(2)、對(duì)對(duì)輸入有效的字符之間遇到空白,會(huì)自動(dòng)去掉;
(3)、只有輸入有效字符才能將后面輸入的空白作為分隔符或結(jié)束符;
(4)、next()不能得到帶有空格的字符串;
nextLine():
(1)、以Enter為結(jié)束符,即輸入回車之前的所有字符;
(2)、可以獲得空白;
37、Java三種類型的異常是什么?
檢查時(shí)異常:最具有檢查性異常的是用戶錯(cuò)誤或問題引起的異常,這是程序員無法預(yù)見的。例如要打開一個(gè)不存在的文件時(shí),一個(gè)異常就發(fā)生了,這些異常在編譯時(shí)不能被簡(jiǎn)單的忽略。
運(yùn)行時(shí)異常:運(yùn)行異常是可以被程序員避免的異常。與檢查時(shí)異常相反,運(yùn)行時(shí)異??梢栽诰幾g時(shí)被忽略。
錯(cuò)誤:錯(cuò)誤不是異常,而是脫離程序員控制的問題,錯(cuò)誤在代碼中通常被忽略。例如:當(dāng)棧溢出時(shí),一個(gè)錯(cuò)誤就發(fā)生了,它們?cè)诰幾g也檢查不到的。
在 Java 中所有異常類型都是內(nèi)置類 java.lang.Throwable 類的子類,即 Throwable 位于異常類層次結(jié)構(gòu)的頂層。Throwable 類下有兩個(gè)異常分支 Exception 和 Error,如圖所示。
38、異常和錯(cuò)誤的區(qū)別?
所有的異常都繼承Throwable類,也就是說所有的異常都是一個(gè)對(duì)象。
從大體來分異常分為兩塊:
(1)、錯(cuò)誤error:是指程序無法處理的錯(cuò)誤,表示應(yīng)用程序運(yùn)行時(shí)出現(xiàn)的重大錯(cuò)誤。例如jvm運(yùn)行時(shí)出現(xiàn)的OutOfMemoryError以及Socket編程時(shí)出現(xiàn)的端口被占用等程序無法處理的錯(cuò)誤
(2)、Exception異常:異常可分為運(yùn)行時(shí)異常和編譯異常,異常類有兩個(gè)主要的子類:IOException類和RuntimeException類
39、什么是捕捉異常?
使用try和catch關(guān)鍵字捕捉異常,try/catch代碼塊放在異??赡馨l(fā)生的地方。try/catch代碼塊中的代碼成為保護(hù)代碼。
40、throws和throw關(guān)鍵字的區(qū)別?
如果一個(gè)方法沒有捕獲一個(gè)檢查時(shí)異常,那么該方法必須使用throws關(guān)鍵字來聲明。throws關(guān)鍵字放在方法簽名的尾部。也可以使用throw拋出一個(gè)異常,無論它是最新實(shí)例化的還是剛捕獲到的。
一個(gè)方法可以聲明拋出多個(gè)異常,多個(gè)異常之間用逗號(hào)隔開。
41、在Java中如何自定義異常?
可以自己編寫異常類:
(1)、所有的異常都必須是Throwable類的子類;
(2)、如果希望寫一個(gè)檢查時(shí)異常,則需要繼承Exception;
(3)、如果需要編寫一個(gè)運(yùn)行時(shí)異常,那么就需要繼承RuntimeException()異常
42、什么是繼承?繼承的特點(diǎn)有哪些?
繼承是子類繼承父類的特征和行為,使得子類對(duì)象(實(shí)例)具有父類的實(shí)例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為。
特點(diǎn):
(1)、子類擁有父類非private的屬性,方法;
(2)、子類可以擁有自己的屬性和方法,即子類可以對(duì)父類進(jìn)行擴(kuò)展;
(3)、子類可以擁有自己的方式實(shí)現(xiàn)父類的方法;
(4)、Java繼承只能是單繼承,但是可以多重繼承,單繼承就是一個(gè)子類只能繼承一個(gè)父類,多重繼承就是:A繼承B,B繼承C,所以按照關(guān)系就行C類是B類的父類,B是A的父類,這就是java繼承區(qū)別與c++的一個(gè)特征。
43、繼承的關(guān)鍵字是什么?
繼承可以使用extends和Implements這兩個(gè)關(guān)鍵字來實(shí)現(xiàn)繼承。而且所有的類都繼承與java.lang.Object,當(dāng)一個(gè)類沒有繼承的關(guān)鍵字,則默認(rèn)繼承Object(這個(gè)類在java.lang包中所以不需要導(dǎo)包)類。
super關(guān)鍵字:可以super關(guān)鍵字來實(shí)現(xiàn)對(duì)父類成員的訪問,用來引用當(dāng)前對(duì)象繼承的父類。
this關(guān)鍵字:指向自己的引用。
final關(guān)鍵字:聲明類可以把類定義為不能繼承的,即最終類;或者用于修飾方法,該方法不能被子類重寫
44、父類的構(gòu)造器有什么特點(diǎn)?
子類不能繼承父類的構(gòu)造器(構(gòu)造方法和構(gòu)造函數(shù)(帶有參數(shù))),但是父類的構(gòu)造器帶有參數(shù)的,則必須在子類的構(gòu)造器中顯式的通過supper關(guān)鍵字調(diào)用父類是構(gòu)造器并適當(dāng)?shù)膮?shù)列表:
如果父類有無參構(gòu)造器,則在子類的構(gòu)造器中用supper調(diào)用父類不是必須的,如果沒有使用super關(guān)鍵字,則系統(tǒng)會(huì)自動(dòng)調(diào)用父類的無參構(gòu)造器。
45、什么是重寫(override),什么是重載(overLoad),他們兩個(gè)的區(qū)別?
重寫:是子類對(duì)父類的允許訪問的方法的實(shí)現(xiàn)過程進(jìn)行重寫編寫,返回值和參數(shù)不能改變,即外殼不能改變,核心改變。重寫的好處在于子類可以根據(jù)需要,定于特定于自己的行為。也就是說子類能夠根據(jù)需要實(shí)現(xiàn)父類的方法。重寫方法不能拋出檢查時(shí)異?;蛘弑戎貙懛椒暶鞲訉挿旱漠惓!?br>重載:重載是在一個(gè)類里面,方法名相同,而參數(shù)不同,返回類型可以相同也可以不相同。每一個(gè)重載的方法(或者構(gòu)造函數(shù))都必須有一個(gè)獨(dú)一無二的參數(shù)類型列表。最常見的就是構(gòu)造器的重載。
區(qū)別:方法的重寫與重載是java多態(tài)的不同表現(xiàn),重寫是父類與子類之間多態(tài)性的一種表現(xiàn),重載可以理解為多態(tài)的具體表現(xiàn)形式。
(1)、方法重載是一個(gè)類中定義了多個(gè)方法名相同,而且參數(shù)不同或數(shù)量相同類型不同和次序不同,則成為方法的重載。
(2)、方法重寫是在子類存在方法與父類方法的名字相同,而且參數(shù)的個(gè)數(shù)與類型一樣,返回值也一樣的方法,稱為重寫
(3)、方法重載是一個(gè)類的多態(tài)性表現(xiàn),二方法的重寫是子類與父類的一種多態(tài)表現(xiàn)。
46、什么是抽象類,如何定義抽象類與方法?
抽象類:抽象類除了不能實(shí)例化對(duì)象之外,類的其它功能依然存在,成員變量,成員方法和構(gòu)造方法的訪問方式和普通類不一樣。由于抽象類不能實(shí)例化對(duì)象,所以抽象類必須被繼承,才能被使用:
父類包含了子類集合的常見方法,但是由于父類本身是抽象的,所以不能使用這些方法。在Java中抽象類表示的是一種繼承關(guān)系,一個(gè)類只能繼承一個(gè)抽象類,而一個(gè)類卻可以實(shí)現(xiàn)多個(gè)接口。
定義抽象類:在Java語言中使用abstract class來定義抽象類。
定義抽象方法:如果想設(shè)計(jì)這樣的類,該類包含一個(gè)特殊的成員方法,該方法的具體實(shí)現(xiàn)有它的子類確定,那么你可以在父類中聲明該方法。Abstract關(guān)鍵字同樣用來聲明抽象方法,抽象方法只包含一個(gè)方法名,沒有方法體(抽象方法沒有定義,方法名后面直接跟一個(gè)分號(hào),而不是花括號(hào))。如果一個(gè)類有抽象方法那么一定是抽象類
47、聲明抽象方法會(huì)有什么結(jié)果?
(1)、如果一個(gè)類包含抽象方法,那么該類必須是抽象類
(2)、任何一個(gè)子類必須重寫父類的抽象方法,或聲明自身為抽象類。
(推薦教程:java課程)
48、封裝是什么,有什么優(yōu)點(diǎn)?Java是怎么進(jìn)行封裝的?
封裝:是指一種將抽象性函式接口的實(shí)現(xiàn)細(xì)節(jié)部分包裝、隱藏起來的方法。封裝可以認(rèn)為是一個(gè)保護(hù)屏障,防止該類的代碼和數(shù)據(jù)被外部類定義的代碼隨機(jī)訪問。
優(yōu)點(diǎn):
(1)、良好的封裝能夠減少耦合;
(2)、類內(nèi)部的結(jié)構(gòu)可以自由修改;
(3)、可以對(duì)成員變量進(jìn)行更精準(zhǔn)的控制;
(4)、隱藏信息,實(shí)現(xiàn)細(xì)節(jié);
進(jìn)行封裝:
(1)、修改屬性的可見性來限制對(duì)屬性的訪問(一般限制為private);
(2)、對(duì)每一個(gè)值屬性提供對(duì)外的接口的公共方法訪問。也就是說,用于對(duì)私有屬性的訪問。(通常情況下這些方法被稱為getter和setter方法,例如開發(fā)中的實(shí)體類)
49、接口與類的異同?
相同:
(1)、一個(gè)接口可以可以有多個(gè)方法;
(2)、接口文件保存在.java結(jié)尾的文件中
(3)、接口的字節(jié)碼文件保存在.class結(jié)尾的文件中
不同:
(1)、接口不能實(shí)例化對(duì)象(與抽象類一樣)
(2)、接口沒有構(gòu)造方法;
(3)、接口中所有的方法必須是抽象方法;
(4)、接口中不能包含成員變量;
(5)、接口不能被類繼承(被類實(shí)現(xiàn) );
(6)、接口支持多繼承;
50、抽象類和接口的區(qū)別?
(1)、抽象類中的方法可以有方法體,就是能實(shí)現(xiàn)方法具體功能,但是接口中的方法不行。
(2)、抽象類中的成員變量可以是各種類型的,而接口中的成員變量只能是public static final類型的;
(3)、接口中不能包含靜態(tài)代碼塊以及靜態(tài)方法(用static修飾的方法),而抽象類可以有靜態(tài)代碼塊和靜態(tài)方法
(4)、一個(gè)類只能繼承一個(gè)抽象類,而一個(gè)類可以實(shí)現(xiàn)多個(gè)接口。
接口是隱士抽象的,當(dāng)聲明一個(gè)接口時(shí),不必使用abstract關(guān)鍵字。接口中每一個(gè)方法也是隱性抽象的,聲明時(shí)不必加abstract。接口中的方法在接口中有實(shí)現(xiàn)接口的類來實(shí)現(xiàn)接口中的方法。
做為一個(gè)Java應(yīng)屆生來說,Java基礎(chǔ)是至關(guān)重要的也是絕對(duì)會(huì)問道的問題。如果連這些基礎(chǔ)都掌握你好的話,那我們面試通過的幾率就微乎其微了。下面就讓我們一起來復(fù)習(xí)一下Java基礎(chǔ)吧!
1、Java到底是什么東西?
Java是一款面向?qū)ο蟮木幊陶Z言,是SUN(斯坦福大學(xué)網(wǎng)絡(luò)公司)1995年推出的,在2010年被ORACLE收購
2、Java這么熱門它有什么特點(diǎn)呢?
Java是跨平臺(tái)性的語言(一處編譯,到處執(zhí)行)。
例如:Java在Windows平臺(tái)中編寫hello.java文件—>編譯成hello.class文件;在不同的操作系統(tǒng)中安裝對(duì)應(yīng)的Java虛擬機(jī)(所有的系統(tǒng)平臺(tái)必須有JVM才可以運(yùn)行Java編譯的文件),就可以直接運(yùn)行
3、Java的三種技術(shù)架構(gòu)
Java三種基本技術(shù)架構(gòu)分別是:JavaSE、JavaEE、JavaME
JavaSE:是JavaEE與JavaME的基礎(chǔ),是非常平面話的
JavaEE:適合開發(fā)者的平臺(tái)主要針對(duì)WEB應(yīng)用系統(tǒng)的開發(fā)
JavaME:開發(fā)小型的電子消費(fèi)品;比如:手機(jī)上的APP;機(jī)器上的語言(電梯、掃地機(jī)器人)
4、在編寫Java程序時(shí)的注意點(diǎn)
(1)、Java是大小寫敏感的,對(duì)應(yīng)的Hello和hello是不同的
(2)、Java對(duì)于所有的類來說,類的首字母應(yīng)該大寫、若類名有多個(gè)單詞組成,則每個(gè)單詞首字母都應(yīng)該大寫。如:MyFirstJava
(3)、Java所有的方法名首字母都應(yīng)該小寫,如有多個(gè)單詞組成,則后面的單詞首字母要大寫。如:findByName
(4)、源文件必須與類名一致
5、Java有那幾個(gè)基本數(shù)據(jù)類型
Java有八種基本數(shù)據(jù)類型:byte、short、int、long、float、double、char、boolean(六種數(shù)字類型:四個(gè)整型(byte、short、int、long),兩個(gè)浮點(diǎn)型(float、double))
byte:數(shù)據(jù)類型是8位、有符號(hào)的,以二進(jìn)制補(bǔ)碼表示的整數(shù)。用于大型數(shù)組中節(jié)約空間,用為byte變量占用的空間只有int類型的四分之一。對(duì)應(yīng)的包裝類:Byte,取值(27- 27-1)
short:數(shù)據(jù)類型是16位、以二進(jìn)制補(bǔ)碼表示的整數(shù)。short數(shù)據(jù)類型也可以像byte那樣節(jié)約空間。一個(gè)short變量是int型變量的二分之一。對(duì)應(yīng)的包裝類:Short。取值(215- 215-1)
int:數(shù)據(jù)類型是32位、有符號(hào)的,以二進(jìn)制補(bǔ)碼表示的整數(shù)。一般的整型變量默認(rèn)為int類型。取值(231- 231-1)
long:數(shù)據(jù)類型是64位,有符號(hào)的,以二進(jìn)制補(bǔ)碼表示的整數(shù)。這種數(shù)據(jù)類型主要使用在需要比較大整數(shù)的系統(tǒng)上。取值(263- 263-1)
float:數(shù)據(jù)類型是單精度、32位的浮點(diǎn)數(shù)。float在存儲(chǔ)大型浮點(diǎn)數(shù)組的時(shí)候可以節(jié)約內(nèi)存空間。默認(rèn)值是0.0f。浮點(diǎn)數(shù)不能用來表示精確的值,如貨幣。
double:數(shù)據(jù)類型是雙精度、64位的浮點(diǎn)數(shù)。浮點(diǎn)數(shù)的默認(rèn)類型位double類型。double類型同樣不能表示精確的值,如貨幣。默認(rèn)值是0.0d。
char:類型是一個(gè)單一的16位Unicode字符。char數(shù)據(jù)類型可以存儲(chǔ)任何字符。但只能存儲(chǔ)一個(gè)字符
boolean:數(shù)據(jù)類型表示一位數(shù)字信息,只有兩個(gè)取值:true和false。這種類型只作為一種標(biāo)志來記錄true\false情況,默認(rèn)值是false。
6、訪問權(quán)限修飾符分別是什么?
訪問權(quán)限修飾符有:public、protected、default(默認(rèn)不寫)、private
public:最大訪問權(quán),用于對(duì)外的接口
protected:用于保護(hù)子類傳遞給子類一種繼承的東西
default:是針對(duì)與本包的訪問而設(shè)計(jì)的
private:訪問權(quán)限僅限于類的內(nèi)部,不能被外層的類訪問
7、怎樣才能運(yùn)行一個(gè)程序?
所有的Java程序都是由public static viod main(String []args){}方法開始執(zhí)行。
8、Java中經(jīng)常提到的對(duì)象是什么?
對(duì)象是類的一個(gè)實(shí)例,有狀態(tài)有行為。
例如:一條狗是一個(gè)對(duì)象,它的狀態(tài)有:顏色、名字、品種;行為有:搖尾巴、叫、吃等。
軟件對(duì)象也有狀態(tài)和行為。軟件的對(duì)象就是屬性,行為通過方法體現(xiàn)
9、類是什么?
類是一個(gè)模板,它描述一類對(duì)象的行為和狀態(tài),一個(gè)類可以擁有多個(gè)方法
10、類里面的方法,要如何去構(gòu)造?
創(chuàng)建一個(gè)對(duì)象的時(shí)候,至少要調(diào)用一個(gè)構(gòu)造方法。構(gòu)造方法的名稱必須與類同名,一個(gè)類可以有多個(gè)構(gòu)造方法。
11、如何創(chuàng)造一個(gè)對(duì)象?
對(duì)象是根據(jù)類創(chuàng)建的。在Java中,使用關(guān)鍵字new來創(chuàng)建一個(gè)新的對(duì)象。創(chuàng)建對(duì)象需要三步:
聲明:聲明一個(gè)對(duì)象,包括對(duì)象的名稱和對(duì)象的類型。
實(shí)例化:使用關(guān)鍵字new來創(chuàng)建一個(gè)對(duì)象
初始化:使用new來創(chuàng)建對(duì)象時(shí)會(huì)調(diào)用構(gòu)造方法初始化對(duì)象
12、源文件的聲明有聲明規(guī)則?
(1)、源文件只能有一個(gè)public類
(2)、可以有多個(gè)非public類
(3)、源文件的名稱必須與類同名
(4)、如果源文件定義在某個(gè)包內(nèi),那么導(dǎo)包應(yīng)該在源文件的首行。
(5)、如果源文件包含import語句,那么在包語句和類之間定義,如果沒有package語句,那么import語句應(yīng)該在源文件最前面
(6)、import語句和package語句對(duì)源文件中定義的所有類都有效。在同一源文件中,不能給不同的類定義不同的包聲明
13、什么是變量?
變量就是申請(qǐng)內(nèi)存來存儲(chǔ)值。也就是說,當(dāng)創(chuàng)建變量的時(shí)候,需要在內(nèi)存中申請(qǐng)空間。內(nèi)存管理系統(tǒng)根據(jù)變量的類型來分配空間,分配的空間只能用來存儲(chǔ)該類型的數(shù)據(jù)。
14、定義變量有什么作用?
通過定義不同的類型,可以用于存儲(chǔ)不同類型的數(shù)(如:整數(shù),小數(shù)、字符)
15、各個(gè)類型之間能不能轉(zhuǎn)換?
從低到高:
byte,short,char——>int——>long——>float——>double
可以自動(dòng)轉(zhuǎn)換。
(1)、不能對(duì)boolean類型進(jìn)行類型轉(zhuǎn)換
(2)、不能把對(duì)象類型轉(zhuǎn)換成不相關(guān)類的對(duì)象
(3)、把容量大的類型轉(zhuǎn)換為容量小的類型時(shí)必須強(qiáng)制類型轉(zhuǎn)換(type)value type。轉(zhuǎn)換過程中可能導(dǎo)致溢出或損失精度
(4)、自動(dòng)類型轉(zhuǎn)換必須滿足轉(zhuǎn)換前的數(shù)據(jù)的位數(shù)小于轉(zhuǎn)換以后的數(shù)據(jù)類型位數(shù)。
(5)、浮點(diǎn)型到整數(shù)的轉(zhuǎn)換是直接通過舍棄小數(shù)部分得到,而不是四舍五入。
例如:(int)23.7 == 23, (int)-23.7 = = -23
16、java運(yùn)算符有哪些?
(·1)、算數(shù)運(yùn)算符:與數(shù)學(xué)中的類似,主要有+ - * \ % ++ --(++a是先在原來基礎(chǔ)加1再進(jìn)行運(yùn)算,a–則先運(yùn)算再減1)
(2)、邏輯運(yùn)算符:主要有 && || !
(3)、賦值運(yùn)算符:主要起一個(gè)賦值的作用,常用的有 = += -=
(4)、條件運(yùn)算符:也稱為三元運(yùn)算符。該運(yùn)算符有3個(gè)操作數(shù),并且需要判斷布爾表達(dá)式的值。該運(yùn)算符的主要是決定那個(gè)值應(yīng)該賦值給變量
例如:int a = (20==40)? 30 : 50;
17、java主要的三種循環(huán)結(jié)構(gòu)是?
Java主要的三種循環(huán)結(jié)構(gòu):while 循環(huán)、do……while循環(huán)、for循環(huán)
(1)、while是最基本的循環(huán),它的結(jié)構(gòu)為:
while(布爾表達(dá)式){
//循環(huán)內(nèi)容
}
只需要布爾表達(dá)式為true,循環(huán)會(huì)一直進(jìn)行。
(2)、do…while循環(huán)和while循環(huán)相識(shí),不同的是,do…while循環(huán)至少會(huì)執(zhí)行一次。
do{
//循環(huán)內(nèi)容
}while(布爾表達(dá)式)
(3)、for循環(huán)執(zhí)行的次數(shù)是在執(zhí)行前就確定的
for(初始化;布爾表達(dá)式;更新){
//代碼語句
}
18、循環(huán)結(jié)構(gòu)有什么關(guān)鍵字嗎?
主要有:break和continue;
break:主要用在循環(huán)語句或者switch語句中,用來跳出整個(gè)語句塊;break跳出當(dāng)前循環(huán),并且繼續(xù)執(zhí)行該循環(huán)下面的語句。
continue:適用于任何循環(huán)控制結(jié)構(gòu)中,作用是讓程序立即跳轉(zhuǎn)到下一次循環(huán)的迭代。在for循環(huán)中,continue語句使程序立即跳轉(zhuǎn)到更新語句。
在while和do…while循環(huán)中,程序立即跳轉(zhuǎn)到布爾表達(dá)式的判斷語句。
19、Number類是一個(gè)什么東西?
當(dāng)內(nèi)置數(shù)據(jù)類型被當(dāng)作對(duì)象使用的時(shí)候,編譯器會(huì)把內(nèi)置類型裝箱為包裝類。Number類屬于java.lang包。所有的包裝類(Integer、Long、Byte、Double、Float、Short)都是抽象類Number的子類。
20、Java中Math類是怎么樣的?
包含了用于執(zhí)行基本的數(shù)學(xué)運(yùn)算的屬性與方法,如初等指數(shù)、對(duì)象、平方根和三角函數(shù)。Math的方法都被定義為static形式。通過Math類可以在主函數(shù)中直接調(diào)用。
21、Math中的floor,round、ceil有什么區(qū)別?
ceil:返回大于等于給指導(dǎo)參數(shù)的最小整數(shù)(例如:Math.ceil(23.2) ==24 而不是四舍五入)
floor:返回小于等于給指導(dǎo)參數(shù)的最大整數(shù)(例如:Math.ceil(23.7) ==23 而不是四舍五入)
round:它表示四舍五入,算法為Math.round(x+0.5),即將原來的數(shù)加上0.5后再向下取整。所以,Math.round(11.4) 等于11,Math.round(11.5) 等于12,Math.round(-11.5) 等于-11。
22、Character類是什么東西,該類有哪些方法?
Character:是Java語言為內(nèi)置基本數(shù)據(jù)類型char提供的包裝類。
Character主要的方法有:isLetter()—是否是一個(gè)字母;toString—返回字符串的長度,字符串長度僅為1;isUpperCase()----是否是大寫字母;isLowerCase()—是否是小寫字母。
23、前面有反斜杠(\)的字符代表的轉(zhuǎn)義字符有哪些?
常用的轉(zhuǎn)義字符有:\t(在文中該處插入一個(gè)tab鍵)
\d(在文中該處插入一個(gè)后退鍵)
\n(在文中該處插入換行)
\r(在文中該處插入回車)
24、Java的String類有什么注意事項(xiàng)?
字符串在Java中屬于對(duì)象,Java提供String類來創(chuàng)建和操作字符串。String類是不可以改變的,一旦創(chuàng)建String對(duì)象,那么它的值就無法改變了。如果需要對(duì)字符串進(jìn)行修改就應(yīng)該使用StringBuffer或StringBuilder類。
25、length()方法,length屬性和size()的方法有什么區(qū)別?
length()方法是針對(duì)字符串來說的,要求一個(gè)字符串的長度就要用到它的length()方法;
length()屬性是針對(duì)Java中數(shù)組來說的,要求數(shù)組的長度可以用其length屬性;
java中的size()是針對(duì)泛型集合來說的,如果想看這個(gè)泛型有多少元素,就調(diào)用這個(gè)方法來查看!
26、連接字符串的方法有哪些?
有兩種:
(1)、字符串1.concat(字符串2)
(2)、更常用的是使用‘+’操作來連接字符串,如:“Hello”+“Word”+"!";
27、Java中StringBuffer和StringBuilder類有什么區(qū)別?
StringBuilder類在Java 5被提出,它和StringBuffer之間最大的不同在于StringBuilder的方法不是線程安全的(不能同步訪問)由于StringBuilder相對(duì)與StringBuffer有速度的優(yōu)勢(shì),所以大多數(shù)情況下使用StringBuilder。然而在應(yīng)用程序要求線性安全的情況下,則必須使用StringBuffer類。
28、StringBuffer是如何實(shí)現(xiàn)對(duì)象修改的?
String Buffer主要有append()方法完成連接,insert()方法完成增加;reverse()方法完成反轉(zhuǎn);replace()方法完成替換。
如:buf.append(“hi”);
buf.insert(0,“Hello”); //在第一個(gè)內(nèi)容之前添加
buf.insert(buf.length,‘Hello’); //在最后面插入數(shù)據(jù)
String str = buf.reverse().toString(); //將內(nèi)容反轉(zhuǎn)后轉(zhuǎn)為字符串
buf.replace(6,11,“yes”); //將word的內(nèi)容替換
29、數(shù)組可以作為參數(shù)傳遞到方法里嗎?
可以
30、如何獲取當(dāng)前時(shí)間,以及自定義時(shí)間?
打印當(dāng)前時(shí)間:Data data = new Date(); data就是當(dāng)前時(shí)間!
設(shè)置日期時(shí)間格式,SimpleDateFormat
SimpleDateFormat sc = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
System.out.printf(sc.format(要轉(zhuǎn)換的時(shí)間))
31、Java是如何進(jìn)行休眠的?
休眠sleep()使當(dāng)前線程進(jìn)入停滯狀態(tài)(阻塞當(dāng)前進(jìn)程),讓出cpu的使用、目的是不讓當(dāng)前的線程獨(dú)自霸占該線程所獲取的cpu資源,以留一定時(shí)間給其他線程執(zhí)行的機(jī)會(huì)。可以讓程序休眠幾毫秒的時(shí)間。Tread.sleep(1000*3) //休眠3秒
32、如何設(shè)置獲取日期格式的特定部分,比如年,月,日,日分秒?
是使用Calender類。Calender類是一個(gè)抽象類,在實(shí)際的使用時(shí)實(shí)現(xiàn)特定的子類的對(duì)象,創(chuàng)建對(duì)象的過程對(duì)程序員來說是透明的,只需要使用getInstance方法創(chuàng)建即可。
33、使用的話有什么類或者方法嗎?
java.util.regex包主要包括以下三個(gè)類:
Pattern類:Pattern對(duì)象是正則表達(dá)式的編譯表示,Pattern類沒有公共構(gòu)造方法。要?jiǎng)?chuàng)建一個(gè)Pattern對(duì)象,必須首先調(diào)用其公共的靜態(tài)編譯方法,它返回一個(gè)Pattern對(duì)象。
Matcher類:Matcher對(duì)象是對(duì)輸入的字符串進(jìn)行編譯和匹配操作的引擎。
PatternSyntaxExeption:PatternSyntaxExeption是一個(gè)非強(qiáng)制異常類,它表示一個(gè)正則表達(dá)式模式的語法錯(cuò)誤。
34、構(gòu)造方法與方法之間有什么聯(lián)系?
構(gòu)造方法的概念:當(dāng)創(chuàng)建對(duì)象時(shí),系統(tǒng)會(huì)自動(dòng)調(diào)用構(gòu)造方法。沒有自定義構(gòu)造方法時(shí),系統(tǒng)會(huì)調(diào)用默認(rèn)的構(gòu)造方法。構(gòu)造方法可以被重載,不能被重寫,不同的構(gòu)造方法名字相同,參數(shù)列表不同,參數(shù)列表是其識(shí)別的依據(jù)、標(biāo)準(zhǔn)、類似與人的名字有可能相同但是身份證不相同。
當(dāng)自定義構(gòu)造方法時(shí),系統(tǒng)依據(jù)傳入的參數(shù)類型、數(shù)量,自動(dòng)匹配構(gòu)造方法初始化對(duì)象。
35、Scanner類是什么?如何創(chuàng)建Scanner對(duì)象
java.util.Scanner是java5的一個(gè)新特征。我們可以獲取用戶的輸入。
Scanner sc = new Scanner();
36、Scanner類的next()與nextLine()方法獲取輸入的字符串有什么區(qū)別?
next():
(1)、一定要讀取到有效字符后才會(huì)結(jié)束輸入;
(2)、對(duì)對(duì)輸入有效的字符之間遇到空白,會(huì)自動(dòng)去掉;
(3)、只有輸入有效字符才能將后面輸入的空白作為分隔符或結(jié)束符;
(4)、next()不能得到帶有空格的字符串;
nextLine():
(1)、以Enter為結(jié)束符,即輸入回車之前的所有字符;
(2)、可以獲得空白;
37、Java三種類型的異常是什么?
檢查時(shí)異常:最具有檢查性異常的是用戶錯(cuò)誤或問題引起的異常,這是程序員無法預(yù)見的。例如要打開一個(gè)不存在的文件時(shí),一個(gè)異常就發(fā)生了,這些異常在編譯時(shí)不能被簡(jiǎn)單的忽略。
運(yùn)行時(shí)異常:運(yùn)行異常是可以被程序員避免的異常。與檢查時(shí)異常相反,運(yùn)行時(shí)異常可以在編譯時(shí)被忽略。
錯(cuò)誤:錯(cuò)誤不是異常,而是脫離程序員控制的問題,錯(cuò)誤在代碼中通常被忽略。例如:當(dāng)棧溢出時(shí),一個(gè)錯(cuò)誤就發(fā)生了,它們?cè)诰幾g也檢查不到的。
在 Java 中所有異常類型都是內(nèi)置類 java.lang.Throwable 類的子類,即 Throwable 位于異常類層次結(jié)構(gòu)的頂層。Throwable 類下有兩個(gè)異常分支 Exception 和 Error,如圖所示。
38、異常和錯(cuò)誤的區(qū)別?
所有的異常都繼承Throwable類,也就是說所有的異常都是一個(gè)對(duì)象。
從大體來分異常分為兩塊:
(1)、錯(cuò)誤error:是指程序無法處理的錯(cuò)誤,表示應(yīng)用程序運(yùn)行時(shí)出現(xiàn)的重大錯(cuò)誤。例如jvm運(yùn)行時(shí)出現(xiàn)的OutOfMemoryError以及Socket編程時(shí)出現(xiàn)的端口被占用等程序無法處理的錯(cuò)誤
(2)、Exception異常:異??煞譃檫\(yùn)行時(shí)異常和編譯異常,異常類有兩個(gè)主要的子類:IOException類和RuntimeException類
39、什么是捕捉異常?
使用try和catch關(guān)鍵字捕捉異常,try/catch代碼塊放在異常可能發(fā)生的地方。try/catch代碼塊中的代碼成為保護(hù)代碼。
40、throws和throw關(guān)鍵字的區(qū)別?
如果一個(gè)方法沒有捕獲一個(gè)檢查時(shí)異常,那么該方法必須使用throws關(guān)鍵字來聲明。throws關(guān)鍵字放在方法簽名的尾部。也可以使用throw拋出一個(gè)異常,無論它是最新實(shí)例化的還是剛捕獲到的。
一個(gè)方法可以聲明拋出多個(gè)異常,多個(gè)異常之間用逗號(hào)隔開。
41、在Java中如何自定義異常?
可以自己編寫異常類:
(1)、所有的異常都必須是Throwable類的子類;
(2)、如果希望寫一個(gè)檢查時(shí)異常,則需要繼承Exception;
(3)、如果需要編寫一個(gè)運(yùn)行時(shí)異常,那么就需要繼承RuntimeException()異常
42、什么是繼承?繼承的特點(diǎn)有哪些?
繼承是子類繼承父類的特征和行為,使得子類對(duì)象(實(shí)例)具有父類的實(shí)例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為。
特點(diǎn):
(1)、子類擁有父類非private的屬性,方法;
(2)、子類可以擁有自己的屬性和方法,即子類可以對(duì)父類進(jìn)行擴(kuò)展;
(3)、子類可以擁有自己的方式實(shí)現(xiàn)父類的方法;
(4)、Java繼承只能是單繼承,但是可以多重繼承,單繼承就是一個(gè)子類只能繼承一個(gè)父類,多重繼承就是:A繼承B,B繼承C,所以按照關(guān)系就行C類是B類的父類,B是A的父類,這就是java繼承區(qū)別與c++的一個(gè)特征。
43、繼承的關(guān)鍵字是什么?
繼承可以使用extends和Implements這兩個(gè)關(guān)鍵字來實(shí)現(xiàn)繼承。而且所有的類都繼承與java.lang.Object,當(dāng)一個(gè)類沒有繼承的關(guān)鍵字,則默認(rèn)繼承Object(這個(gè)類在java.lang包中所以不需要導(dǎo)包)類。
super關(guān)鍵字:可以super關(guān)鍵字來實(shí)現(xiàn)對(duì)父類成員的訪問,用來引用當(dāng)前對(duì)象繼承的父類。
this關(guān)鍵字:指向自己的引用。
final關(guān)鍵字:聲明類可以把類定義為不能繼承的,即最終類;或者用于修飾方法,該方法不能被子類重寫
44、父類的構(gòu)造器有什么特點(diǎn)?
子類不能繼承父類的構(gòu)造器(構(gòu)造方法和構(gòu)造函數(shù)(帶有參數(shù))),但是父類的構(gòu)造器帶有參數(shù)的,則必須在子類的構(gòu)造器中顯式的通過supper關(guān)鍵字調(diào)用父類是構(gòu)造器并適當(dāng)?shù)膮?shù)列表:
如果父類有無參構(gòu)造器,則在子類的構(gòu)造器中用supper調(diào)用父類不是必須的,如果沒有使用super關(guān)鍵字,則系統(tǒng)會(huì)自動(dòng)調(diào)用父類的無參構(gòu)造器。
45、什么是重寫(override),什么是重載(overLoad),他們兩個(gè)的區(qū)別?
重寫:是子類對(duì)父類的允許訪問的方法的實(shí)現(xiàn)過程進(jìn)行重寫編寫,返回值和參數(shù)不能改變,即外殼不能改變,核心改變。重寫的好處在于子類可以根據(jù)需要,定于特定于自己的行為。也就是說子類能夠根據(jù)需要實(shí)現(xiàn)父類的方法。重寫方法不能拋出檢查時(shí)異?;蛘弑戎貙懛椒暶鞲訉挿旱漠惓?。
重載:重載是在一個(gè)類里面,方法名相同,而參數(shù)不同,返回類型可以相同也可以不相同。每一個(gè)重載的方法(或者構(gòu)造函數(shù))都必須有一個(gè)獨(dú)一無二的參數(shù)類型列表。最常見的就是構(gòu)造器的重載。
區(qū)別:方法的重寫與重載是java多態(tài)的不同表現(xiàn),重寫是父類與子類之間多態(tài)性的一種表現(xiàn),重載可以理解為多態(tài)的具體表現(xiàn)形式。
(1)、方法重載是一個(gè)類中定義了多個(gè)方法名相同,而且參數(shù)不同或數(shù)量相同類型不同和次序不同,則成為方法的重載。
(2)、方法重寫是在子類存在方法與父類方法的名字相同,而且參數(shù)的個(gè)數(shù)與類型一樣,返回值也一樣的方法,稱為重寫
(3)、方法重載是一個(gè)類的多態(tài)性表現(xiàn),二方法的重寫是子類與父類的一種多態(tài)表現(xiàn)。
46、什么是抽象類,如何定義抽象類與方法?
抽象類:抽象類除了不能實(shí)例化對(duì)象之外,類的其它功能依然存在,成員變量,成員方法和構(gòu)造方法的訪問方式和普通類不一樣。由于抽象類不能實(shí)例化對(duì)象,所以抽象類必須被繼承,才能被使用:
父類包含了子類集合的常見方法,但是由于父類本身是抽象的,所以不能使用這些方法。在Java中抽象類表示的是一種繼承關(guān)系,一個(gè)類只能繼承一個(gè)抽象類,而一個(gè)類卻可以實(shí)現(xiàn)多個(gè)接口。
定義抽象類:在Java語言中使用abstract class來定義抽象類。
定義抽象方法:如果想設(shè)計(jì)這樣的類,該類包含一個(gè)特殊的成員方法,該方法的具體實(shí)現(xiàn)有它的子類確定,那么你可以在父類中聲明該方法。Abstract關(guān)鍵字同樣用來聲明抽象方法,抽象方法只包含一個(gè)方法名,沒有方法體(抽象方法沒有定義,方法名后面直接跟一個(gè)分號(hào),而不是花括號(hào))。如果一個(gè)類有抽象方法那么一定是抽象類
47、聲明抽象方法會(huì)有什么結(jié)果?
(1)、如果一個(gè)類包含抽象方法,那么該類必須是抽象類
(2)、任何一個(gè)子類必須重寫父類的抽象方法,或聲明自身為抽象類。
48、封裝是什么,有什么優(yōu)點(diǎn)?Java是怎么進(jìn)行封裝的?
封裝:是指一種將抽象性函式接口的實(shí)現(xiàn)細(xì)節(jié)部分包裝、隱藏起來的方法。封裝可以認(rèn)為是一個(gè)保護(hù)屏障,防止該類的代碼和數(shù)據(jù)被外部類定義的代碼隨機(jī)訪問。
優(yōu)點(diǎn):
(1)、良好的封裝能夠減少耦合;
(2)、類內(nèi)部的結(jié)構(gòu)可以自由修改;
(3)、可以對(duì)成員變量進(jìn)行更精準(zhǔn)的控制;
(4)、隱藏信息,實(shí)現(xiàn)細(xì)節(jié);
進(jìn)行封裝:
(1)、修改屬性的可見性來限制對(duì)屬性的訪問(一般限制為private);
(2)、對(duì)每一個(gè)值屬性提供對(duì)外的接口的公共方法訪問。也就是說,用于對(duì)私有屬性的訪問。(通常情況下這些方法被稱為getter和setter方法,例如開發(fā)中的實(shí)體類)
49、接口與類的異同?
相同:
(1)、一個(gè)接口可以可以有多個(gè)方法;
(2)、接口文件保存在.java結(jié)尾的文件中
(3)、接口的字節(jié)碼文件保存在.class結(jié)尾的文件中
不同:
(1)、接口不能實(shí)例化對(duì)象(與抽象類一樣)
(2)、接口沒有構(gòu)造方法;
(3)、接口中所有的方法必須是抽象方法;
(4)、接口中不能包含成員變量;
(5)、接口不能被類繼承(被類實(shí)現(xiàn) );
(6)、接口支持多繼承;
50、抽象類和接口的區(qū)別?
(1)、抽象類中的方法可以有方法體,就是能實(shí)現(xiàn)方法具體功能,但是接口中的方法不行。
(2)、抽象類中的成員變量可以是各種類型的,而接口中的成員變量只能是public static final類型的;
(3)、接口中不能包含靜態(tài)代碼塊以及靜態(tài)方法(用static修飾的方法),而抽象類可以有靜態(tài)代碼塊和靜態(tài)方法
(4)、一個(gè)類只能繼承一個(gè)抽象類,而一個(gè)類可以實(shí)現(xiàn)多個(gè)接口。
接口是隱士抽象的,當(dāng)聲明一個(gè)接口時(shí),不必使用abstract關(guān)鍵字。接口中每一個(gè)方法也是隱性抽象的,聲明時(shí)不必加abstract。接口中的方法在接口中有實(shí)現(xiàn)接口的類來實(shí)現(xiàn)接口中的方法。
相關(guān)推薦:java入門
Atas ialah kandungan terperinci java實(shí)習(xí)生面試題. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Untuk mengendalikan transaksi JDBC dengan betul, anda mesti terlebih dahulu mematikan mod komit automatik, kemudian melakukan pelbagai operasi, dan akhirnya melakukan atau mengembalikan semula hasilnya; 1. Panggil Conn.SetAutOcommit (palsu) untuk memulakan transaksi; 2. Melaksanakan pelbagai operasi SQL, seperti memasukkan dan mengemaskini; 3. Panggil Conn.Commit () jika semua operasi berjaya, dan hubungi conn.rollback () jika pengecualian berlaku untuk memastikan konsistensi data; Pada masa yang sama, cuba-dengan-sumber harus digunakan untuk menguruskan sumber, mengendalikan pengecualian dengan betul dan menutup sambungan untuk mengelakkan kebocoran sambungan; Di samping itu, adalah disyorkan untuk menggunakan kolam sambungan dan menetapkan mata simpan untuk mencapai rollback separa, dan menyimpan urus niaga sesingkat mungkin untuk meningkatkan prestasi.

Gunakan kelas dalam pakej Java.Time untuk menggantikan kelas lama dan kelas kalendar; 2. Dapatkan tarikh dan masa semasa melalui LocalDate, LocalDateTime dan Tempatan Tempatan; 3. Buat tarikh dan masa tertentu menggunakan kaedah (); 4. Gunakan kaedah tambah/tolak untuk meningkatkan dan mengurangkan masa; 5. Gunakan zoneddatetime dan zonid untuk memproses zon waktu; 6. Format dan parse date string melalui DateTimeFormatter; 7. Gunakan segera untuk bersesuaian dengan jenis tarikh lama apabila perlu; pemprosesan tarikh di java moden harus memberi keutamaan untuk menggunakan java.timeapi, yang memberikan jelas, tidak berubah dan linear

Pra-formancetartuptimemoryusage, quarkusandmicronautleadduetocompile-timeprocessingandgraalvsupport, withquarkusoftenperforminglightbetterine serverless scenarios.tyvelopecosyste,

HTTP Log Middleware di GO boleh merakam kaedah permintaan, laluan, IP klien dan memakan masa. 1. Gunakan http.handlerfunc untuk membungkus pemproses, 2. Rekod waktu mula dan masa akhir sebelum dan selepas memanggil next.servehttp, 3. Dapatkan IP pelanggan sebenar melalui r.remoteaddr dan X-forward-for headers, 4. Gunakan log.printf untuk mengeluarkan log permintaan, 5. Kod sampel lengkap telah disahkan untuk dijalankan dan sesuai untuk memulakan projek kecil dan sederhana. Cadangan lanjutan termasuk menangkap kod status, menyokong log JSON dan meminta penjejakan ID.

Koleksi Sampah Java (GC) adalah mekanisme yang secara automatik menguruskan ingatan, yang mengurangkan risiko kebocoran ingatan dengan menuntut semula objek yang tidak dapat dicapai. 1.GC menghakimi kebolehcapaian objek dari objek akar (seperti pembolehubah stack, benang aktif, medan statik, dan lain -lain), dan objek yang tidak dapat dicapai ditandakan sebagai sampah. 2. Berdasarkan algoritma penandaan tanda, tandakan semua objek yang dapat dicapai dan objek yang tidak ditandai. 3. Mengamalkan strategi pengumpulan generasi: Generasi Baru (Eden, S0, S1) sering melaksanakan MinorGC; Orang tua melakukan kurang tetapi mengambil masa lebih lama untuk melakukan MajorGC; Metaspace Stores Metadata kelas. 4. JVM menyediakan pelbagai peranti GC: SerialGC sesuai untuk aplikasi kecil; ParallelGC meningkatkan throughput; CMS mengurangkan

Memilih jenis htmlinput yang betul dapat meningkatkan ketepatan data, meningkatkan pengalaman pengguna, dan meningkatkan kebolehgunaan. 1. Pilih jenis input yang sepadan mengikut jenis data, seperti teks, e -mel, tel, nombor dan tarikh, yang secara automatik boleh menyemak dan menyesuaikan diri dengan papan kekunci; 2. Gunakan HTML5 untuk menambah jenis baru seperti URL, Warna, Julat dan Carian, yang dapat memberikan kaedah interaksi yang lebih intuitif; 3. Gunakan pemegang tempat dan sifat -sifat yang diperlukan untuk meningkatkan kecekapan dan ketepatan pengisian bentuk, tetapi harus diperhatikan bahawa pemegang tempat tidak dapat menggantikan label.

GradleisthebetterChoiceFormostNewProjectSduetoitSsuperiorflexibility, Prestasi, danModernToolingSupport.1.Gradle'sGroovy/KOT lindslismoreconciseandexpressivethanmaven'sverbosexml.2.GradleOutPerformsMaveninBuildSpeedWithIncrementalcompilation, BuildCac

Defer digunakan untuk melaksanakan operasi tertentu sebelum fungsi pulangan, seperti sumber pembersihan; Parameter dinilai dengan serta-merta apabila menangguhkan, dan fungsi-fungsi dilaksanakan mengikut urutan terakhir (LIFO); 1. Pelbagai penahanan dilaksanakan dalam urutan terbalik pengisytiharan; 2. Biasanya digunakan untuk pembersihan yang selamat seperti penutupan fail; 3. Nilai pulangan yang dinamakan boleh diubah suai; 4. Ia akan dilaksanakan walaupun panik berlaku, sesuai untuk pemulihan; 5. Elakkan penyalahgunaan menangguhkan gelung untuk mengelakkan kebocoran sumber; Penggunaan yang betul boleh meningkatkan keselamatan kod dan kebolehbacaan.
