国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁(yè) Java Java面試題 java高頻率基礎(chǔ)面試題

java高頻率基礎(chǔ)面試題

Aug 26, 2020 pm 03:38 PM
java 面試題

java高頻率基礎(chǔ)面試題

一、是否可以從一個(gè)static方法內(nèi)部發(fā)出對(duì)非static方法的呼叫?

(影片教學(xué)推薦:java課程

不可以。因?yàn)榉莝tatic方法是要與物件關(guān)聯(lián)在一起的,必須建立一個(gè)物件後,才可以在該物件上進(jìn)行方法調(diào)用,而static方法調(diào)用時(shí)不需要建立對(duì)象,可以直接調(diào)用。也就是說(shuō),當(dāng)一個(gè)static方法被呼叫時(shí),可能還沒(méi)有建立任何實(shí)例對(duì)象,如果從一個(gè)static方法中發(fā)出對(duì)非static方法的調(diào)用,那個(gè)非static方法是關(guān)聯(lián)到哪個(gè)物件上的呢?這個(gè)邏輯無(wú)法成立,所以,一個(gè)static方法內(nèi)部發(fā)出對(duì)非static方法的呼叫。

二、Integer與int的差異

int是java提供的8種原始資料型別之一。 Java為每個(gè)原始類型提供了封裝類,Integer是java為int提供的封裝類別。 int的預(yù)設(shè)值為0,而Integer的預(yù)設(shè)值為null,即Integer可以區(qū)分出未賦值和值為0的區(qū)別,int則無(wú)法表達(dá)出未賦值的情況。

例如:若要表達(dá)出沒(méi)有參加考試和考試成績(jī)?yōu)?的區(qū)別,則只能使用Integer。在JSP開(kāi)發(fā)中,Integer的預(yù)設(shè)值為null,所以用el表達(dá)式在文字方塊中顯示時(shí),值為空白字串,而int預(yù)設(shè)的預(yù)設(shè)值為0,所以用el表達(dá)式在文字方塊中顯示時(shí),結(jié)果為0,所以,int不適合作為web層的表單資料的型別。

在Hibernate中,如果將OID定義為Integer類型,那麼Hibernate就可以根據(jù)其值是否為null而判斷一個(gè)物件是否是臨時(shí)的,如果將OID定義為了int類型,還需要在hbm映射文件中設(shè)定其unsaved-value屬性為0。

另外,Integer提供了多個(gè)與整數(shù)相關(guān)的操作方法,例如,將一個(gè)字串轉(zhuǎn)換成整數(shù),Integer中也定義了表示整數(shù)的最大值和最小值的常數(shù)。

三、Math.round(11.5)等於多少?Math.round(-11.5)等於多少?

Math類別中提供了三個(gè)與取整有關(guān)的方法:ceil、floor、round,這些方法的作用與它們的英文名稱的含義相對(duì)應(yīng)。

例如,ceil的英文意義是天花板,該方法就表示向上取整,Math.ceil(11.3)的結(jié)果為12,Math.ceil(-11.3)的結(jié)果是-11;floor的英文意義是地板,該方法就表示向下取整,Math.ceil(11.6)的結(jié)果為11,Math.ceil(-11.6)的結(jié)果是-12;最難掌握的是round方法,它表示“四捨五入” ,演算法為Math.floor(x 0.5),即將原來(lái)的數(shù)字加上0.5後再向下取整,所以,Math.round(11.5)的結(jié)果為12,Math.round(-11.5)的結(jié)果為-11 。

這裡有一些筆誤,floor的英文意義是地板,該方法就表示向下取整,Math.floor(11.6)的結(jié)果為11,Math.floor(-11.6)的結(jié)果是-12 ;

(更多相關(guān)面試題推薦:java面試題目及答案

四、Overload和Override的差別? Overloaded的方法是否可以改變回傳值的型別?

Overload是重載的意思,Override是覆寫的意思,也就是重寫。

重載Overload表示同一個(gè)類別中可以有多個(gè)名稱相同的方法,但這些方法的參數(shù)清單各不相同(即參數(shù)個(gè)數(shù)或型別不同)。

重寫Override表示子類別中的方法可以與父類別中的某個(gè)方法的名稱和參數(shù)完全相同,透過(guò)子類別建立的實(shí)例物件呼叫這個(gè)方法時(shí),將呼叫子類別中的定義方法,這相當(dāng)於把父類別中定義的那個(gè)完全相同的方法給覆蓋了,這也是物件導(dǎo)向程式設(shè)計(jì)的多態(tài)性的一種表現(xiàn)。當(dāng)子類別覆蓋父類別的方法時(shí),只能比父類別拋出更少的異常,或者是拋出父類別拋出的異常的子異常,因?yàn)樽宇悇e可以解決父類別的一些問(wèn)題,不能比父類有更多的問(wèn)題。子類別方法的存取權(quán)限只能比父類別的更大,不能更小。如果父類別的方法是private類型,那麼,子類別則不存在覆蓋的限制,相當(dāng)於子類別中增加了一個(gè)全新的方法。

至於Overloaded的方法是否可以改變回傳值的型別這個(gè)問(wèn)題,要看你倒底想問(wèn)什麼呢?這個(gè)題目很模糊。如果幾個(gè)Overloaded的方法的參數(shù)清單不一樣,它們的回傳者類型當(dāng)然也可以不一樣。但我估計(jì)你想問(wèn)的問(wèn)題是:如果兩個(gè)方法的參數(shù)列表完全一樣,是否可以讓它們的回傳值不同來(lái)實(shí)作重載Overload。這是不行的,我們可以用反證法來(lái)說(shuō)明這個(gè)問(wèn)題,因?yàn)槲覀冇袝r(shí)在呼叫一個(gè)方法時(shí)也可以不定義回傳結(jié)果變量,即不要關(guān)心其回傳結(jié)果。

例如,當(dāng)我們呼叫map.remove(key)方法時(shí),雖然remove方法有回傳值,但是我們通常都不會(huì)定義接收回傳結(jié)果的變量,這時(shí)候假設(shè)該類別中有兩個(gè)名稱和參數(shù)列表完全相同的方法,光是傳回型別不同,java就無(wú)法確定程式設(shè)計(jì)者倒底是想呼叫哪個(gè)方法了,因?yàn)樗鼰o(wú)法透過(guò)傳回結(jié)果類型來(lái)判斷。

override可以翻譯為覆蓋,從字面就可以知道,它是覆蓋了一個(gè)方法並且對(duì)其重寫,以求達(dá)到不同的作用。對(duì)我們來(lái)說(shuō)最熟悉的覆蓋就是對(duì)介面方法的實(shí)現(xiàn),在介面中一般只是對(duì)方法進(jìn)行了聲明,而我們?cè)趯?shí)現(xiàn)時(shí),就需要實(shí)現(xiàn)介面聲明的所有方法。除了這個(gè)典型的用法以外,我們?cè)诶^承中也可能會(huì)在子類別覆寫父類別中的方法。在覆蓋要注意以下的幾點(diǎn):

1、覆蓋的方法的標(biāo)誌必須要和被覆蓋的方法的標(biāo)誌完全匹配,才能達(dá)到覆蓋的效果;

2、覆蓋的方法的回傳值必須和被覆寫的方法的回傳一致;

3、覆寫的方法所拋出的例外必須和被覆寫方法的所拋出的異常一致,或者是其子類別;

4、被覆寫的方法不能為private,否則在其子類別中只是新定義了一個(gè)方法,並沒(méi)有對(duì)其進(jìn)行覆寫。

Overload對(duì)我們來(lái)說(shuō)可能比較熟悉,可以翻譯為重載,它是指我們可以定義一些名稱相同的方法,透過(guò)定義不同的輸入?yún)?shù)來(lái)區(qū)分這些方法,然後再呼叫時(shí),VM就會(huì)根據(jù)不同的參數(shù)樣式,來(lái)選擇適當(dāng)?shù)姆椒▓?zhí)行。在使用重載要注意以下的幾點(diǎn):

1、使用重載時(shí)只能透過(guò)不同的參數(shù)樣式。例如,不同的參數(shù)類型,不同的參數(shù)個(gè)數(shù),不同的參數(shù)順序(當(dāng)然,同一方法內(nèi)的幾個(gè)參數(shù)類型必須不一樣,例如可以是fun(int,float),但是不能為fun(int,int ));

2、不能透過(guò)存取權(quán)限、傳回型別、拋出的例外進(jìn)行重載;

3、方法的例外類型和數(shù)目不會(huì)對(duì)重載造成影響;

4、對(duì)於繼承來(lái)說(shuō),如果某一方法在父類別中是存取權(quán)限是priavte,那麼就不能在子類別中重載,如果定義的話,也只是定義了一個(gè)新方法,而不會(huì)達(dá)到重載的效果。

五、介面是否可繼承介面?抽象類別是否可實(shí)現(xiàn)(implements)介面?抽象類別是否可繼承具體類別(concreteclass)?抽象類別中是否可以有靜態(tài)的main方法?

介面可以繼承介面。抽象類別可以實(shí)作(implements)接口,抽象類別可以繼承具體類別。抽象類別中可以有靜態(tài)的main方法。

備註:只要明白了介面和抽象類別的本質(zhì)和作用,這些問(wèn)題都很好回答,你想想,如果你是java語(yǔ)言的設(shè)計(jì)者,你是否會(huì)提供這樣的支持,如果不提供的話,有什麼理由嗎?如果你沒(méi)有道理不提供,那答案就是肯定的了。

只要記住抽象類別與普通類別的唯一區(qū)別就是不能建立實(shí)例物件和允許有abstract方法。

六、Java中實(shí)作多態(tài)的機(jī)制是什麼?

靠的是父類別或介面定義的參考變數(shù)可以指向子類別或具體實(shí)作類別的實(shí)例對(duì)象,而程式呼叫的方法在運(yùn)行期間才會(huì)動(dòng)態(tài)綁定,就是引用變數(shù)所指向的具體實(shí)例物件的方法,也就是記憶體裡正在運(yùn)行的那個(gè)物件的方法,而不是引用變數(shù)的型別中定義的方法。

七、abstractclass和interface語(yǔ)法上有什麼差別?

1、抽象類別可以有建構(gòu)方法,介面中不能有建構(gòu)方法。

2、抽象類別中可以有普通成員變量,介面中沒(méi)有普通成員變數(shù)

3、抽象類別中可以包含非抽象的普通方法,介面中的所有方法必須都是抽象的,不能有非抽象的普通方法。

4、抽象類別中的抽象方法的存取類型可以是public,protected和(預(yù)設(shè)類型,雖然

eclipse下不報(bào)錯(cuò),但應(yīng)該也不行),但介面中的抽象方法只能是public型別的,並且預(yù)設(shè)為public abstract類型。

5、抽象類別中可以包含靜態(tài)方法,介面中不能包含靜態(tài)方法

6、抽象類別和介面中都可以包含靜態(tài)成員變量,抽象類別中的靜態(tài)成員變數(shù)的存取類型可以任意,但介面中定義的變數(shù)只能是publicstatic final類型,且預(yù)設(shè)為publicstatic final類型。

7、一個(gè)類別可以實(shí)作多個(gè)接口,但只能繼承一個(gè)抽象類別。

(相關(guān)教學(xué)推薦:java入門教學(xué)

c、abstract的method是否可同時(shí)是static,是否可同時(shí)是native,是否可同時(shí)是synchronized?

abstract的method不可以是static的,因?yàn)槌橄蟮姆椒ㄊ窍胍蛔宇悇e實(shí)現(xiàn)的,而static與子類別扯不上關(guān)係!

native方法表示該方法要用另外一種依賴平臺(tái)的程式語(yǔ)言實(shí)現(xiàn)的,不存在著被子類別實(shí)現(xiàn)的問(wèn)題,所以,它也不能是抽象的,不能與abstract混用。例如,F(xiàn)ileOutputSteam類別要硬體打交道,底層的實(shí)作用的是作業(yè)系統(tǒng)相關(guān)的api實(shí)作;例如,在windows用c語(yǔ)言實(shí)作的,所以,查看jdk的原始碼,可以發(fā)現(xiàn)FileOutputStream的open方法的定義如下:

private native void open(Stringname) throwsFileNotFoundException;

如果我們要用java呼叫別人寫的c語(yǔ)言函數(shù),我們是無(wú)法直接呼叫的,我們需要按照java的要求寫一個(gè)c語(yǔ)言的函數(shù),又我們的這個(gè)c語(yǔ)言函數(shù)去呼叫別人的c語(yǔ)言函數(shù)。由於我們的c語(yǔ)言函數(shù)是按java的要求來(lái)寫的,我們這個(gè)c語(yǔ)言函數(shù)就可以與java對(duì)接上,java那邊的對(duì)接方式就是定義出與我們這個(gè)c函數(shù)相對(duì)應(yīng)的方法,java中對(duì)應(yīng)的方法不需要寫具體的程式碼,但需要在前面聲明native。

關(guān)於synchronized與abstract合用的問(wèn)題,我覺(jué)得也不行,因?yàn)樵谖規(guī)啄甑膶W(xué)習(xí)和開(kāi)發(fā)中,從來(lái)沒(méi)見(jiàn)過(guò)過(guò)這種情況,並且我覺(jué)得synchronized應(yīng)該是作用在一個(gè)具體的方法上才有意義。而且,方法上的synchronized同步所使用的同步鎖定物件是this,而抽象方法上無(wú)法確定this是什麼。

九、內(nèi)部類別可以引用它的包含類別的成員嗎?有沒(méi)有什麼限制?

完全可以。如果不是靜態(tài)內(nèi)部類,那沒(méi)有什麼限制!

如果你把靜態(tài)嵌套類別當(dāng)作內(nèi)部類別的一種特例,那麼在這種情況下不可以存取外部類別的普通成員變量,而只能存取外部類別中的靜態(tài)成員,例如,下面的程式碼:

class Outer
{
static int x;
static class Inner
    {
        voidtest()
        {
              syso(x);
        }
    }
}

十、String s = "Hello";s = s "world!";這兩行程式碼執(zhí)行後,原始的String物件中的內(nèi)容到底變了沒(méi)有?

沒(méi)有。因?yàn)镾tring被設(shè)計(jì)成不可變(immutable)類,所以它的所有物件都是不可變物件。在這段程式碼中,s原先指向一個(gè)String對(duì)象,內(nèi)容是 "Hello",然後我們對(duì)s進(jìn)行了 操作,那麼s所指向的那個(gè)對(duì)像是否發(fā)生了改變呢?答案是沒(méi)有。這時(shí),s不指向原來(lái)那個(gè)對(duì)象了,而指向了另一個(gè) String對(duì)象,內(nèi)容為"Hello world!",原來(lái)那個(gè)對(duì)象還存在於內(nèi)存之中,只是s這個(gè)引用變量不再指向它了。

透過(guò)上面的說(shuō)明,我們很容易導(dǎo)出另一個(gè)結(jié)論,如果經(jīng)常對(duì)字串進(jìn)行各種各樣的修改,或者說(shuō),不可預(yù)見(jiàn)的修改,那麼使用String來(lái)代表字串的話會(huì)引起很大的記憶體開(kāi)銷。因?yàn)镾tring物件建立之後不能再改變,所以對(duì)於每一個(gè)不同的字串,都需要一個(gè)String物件來(lái)表示。這時(shí),應(yīng)該考慮使用StringBuffer類,它允許修改,而不是每個(gè)不同的字串都要產(chǎn)生一個(gè)新的物件。並且,這兩種類別的物件轉(zhuǎn)換十分容易。

同時(shí),我們也可以知道,如果要使用內(nèi)容相同的字串,不必每次都new一個(gè)String。例如我們要在建構(gòu)器中對(duì)一個(gè)名叫s的String引用變數(shù)進(jìn)行初始化,把它設(shè)為初始值,就應(yīng)該這樣做:

public class Demo {
private String s;
...
public Demo {
s = "Initial Value";
}
...
}

而不是

s = new String("Initial Value");

後者每次都會(huì)呼叫建構(gòu)器,產(chǎn)生新對(duì)象,效能低且記憶體開(kāi)銷大,且沒(méi)有意義,因?yàn)镾tring物件不可改變,所以對(duì)於內(nèi)容相同的字串,只要一個(gè)String物件來(lái)表示就可以了。也就說(shuō),多次呼叫上面的建構(gòu)器創(chuàng)建多個(gè)對(duì)象,他們的String類型屬性s都指向同一個(gè)對(duì)象。

上面的結(jié)論也基於這樣一個(gè)事實(shí):對(duì)於字串常數(shù),如果內(nèi)容相同,Java認(rèn)為它們代表同一個(gè)String物件。而用關(guān)鍵字new呼叫建構(gòu)器,總是會(huì)建立一個(gè)新的對(duì)象,無(wú)論內(nèi)容是否相同。

至於為什麼要把String類別設(shè)計(jì)成不可變類,是它的用途決定的。其實(shí)不只String,很多Java標(biāo)準(zhǔn)類別庫(kù)中的類別都是不可變的。在發(fā)展一個(gè)系統(tǒng)的時(shí)候,我們有時(shí)候也需要設(shè)計(jì)不可變類,來(lái)傳遞一組相關(guān)的值,這也是物件導(dǎo)向思想的體現(xiàn)。不可變類別有一些優(yōu)點(diǎn),例如因?yàn)樗奈锛俏ㄗx的,所以多執(zhí)行緒並發(fā)存取也不會(huì)有任何問(wèn)題。當(dāng)然也有一些缺點(diǎn),例如每個(gè)不同的狀態(tài)都要一個(gè)物件來(lái)代表,可能會(huì)造成效能上的問(wèn)題。所以Java標(biāo)準(zhǔn)類別函式庫(kù)也提供了一個(gè)可變版本,即StringBuffer。

以上是java高頻率基礎(chǔ)面試題的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1601
29
PHP教程
1502
276
如何使用JDBC處理Java的交易? 如何使用JDBC處理Java的交易? Aug 02, 2025 pm 12:29 PM

要正確處理JDBC事務(wù),必須先關(guān)閉自動(dòng)提交模式,再執(zhí)行多個(gè)操作,最後根據(jù)結(jié)果提交或回滾;1.調(diào)用conn.setAutoCommit(false)以開(kāi)始事務(wù);2.執(zhí)行多個(gè)SQL操作,如INSERT和UPDATE;3.若所有操作成功則調(diào)用conn.commit(),若發(fā)生異常則調(diào)用conn.rollback()確保數(shù)據(jù)一致性;同時(shí)應(yīng)使用try-with-resources管理資源,妥善處理異常並關(guān)閉連接,避免連接洩漏;此外建議使用連接池、設(shè)置保存點(diǎn)實(shí)現(xiàn)部分回滾,並保持事務(wù)盡可能短以提升性能。

了解Java虛擬機(jī)(JVM)內(nèi)部 了解Java虛擬機(jī)(JVM)內(nèi)部 Aug 01, 2025 am 06:31 AM

TheJVMenablesJava’s"writeonce,runanywhere"capabilitybyexecutingbytecodethroughfourmaincomponents:1.TheClassLoaderSubsystemloads,links,andinitializes.classfilesusingbootstrap,extension,andapplicationclassloaders,ensuringsecureandlazyclassloa

如何使用Java的日曆? 如何使用Java的日曆? Aug 02, 2025 am 02:38 AM

使用java.time包中的類替代舊的Date和Calendar類;2.通過(guò)LocalDate、LocalDateTime和LocalTime獲取當(dāng)前日期時(shí)間;3.使用of()方法創(chuàng)建特定日期時(shí)間;4.利用plus/minus方法不可變地增減時(shí)間;5.使用ZonedDateTime和ZoneId處理時(shí)區(qū);6.通過(guò)DateTimeFormatter格式化和解析日期字符串;7.必要時(shí)通過(guò)Instant與舊日期類型兼容;現(xiàn)代Java中日期處理應(yīng)優(yōu)先使用java.timeAPI,它提供了清晰、不可變且線

比較Java框架:Spring Boot vs Quarkus vs Micronaut 比較Java框架:Spring Boot vs Quarkus vs Micronaut Aug 04, 2025 pm 12:48 PM

前形式攝取,quarkusandmicronautleaddueTocile timeProcessingandGraalvSupport,withquarkusoftenpernperforminglightbetterine nosserless notelless centarios.2。

了解網(wǎng)絡(luò)端口和防火牆 了解網(wǎng)絡(luò)端口和防火牆 Aug 01, 2025 am 06:40 AM

NetworkPortSandFireWallsworkTogetHertoEnableCommunication whereSeringSecurity.1.NetWorkPortSareVirtualendPointSnumbered0-655 35,with-Well-with-Newonportslike80(HTTP),443(https),22(SSH)和25(smtp)sindiessingspefificservices.2.portsoperateervertcp(可靠,c

垃圾收集如何在Java工作? 垃圾收集如何在Java工作? Aug 02, 2025 pm 01:55 PM

Java的垃圾回收(GC)是自動(dòng)管理內(nèi)存的機(jī)制,通過(guò)回收不可達(dá)對(duì)象釋放堆內(nèi)存,減少內(nèi)存洩漏風(fēng)險(xiǎn)。 1.GC從根對(duì)象(如棧變量、活動(dòng)線程、靜態(tài)字段等)出發(fā)判斷對(duì)象可達(dá)性,無(wú)法到達(dá)的對(duì)像被標(biāo)記為垃圾。 2.基於標(biāo)記-清除算法,標(biāo)記所有可達(dá)對(duì)象,清除未標(biāo)記對(duì)象。 3.採(cǎi)用分代收集策略:新生代(Eden、S0、S1)頻繁執(zhí)行MinorGC;老年代執(zhí)行較少但耗時(shí)較長(zhǎng)的MajorGC;Metaspace存儲(chǔ)類元數(shù)據(jù)。 4.JVM提供多種GC器:SerialGC適用於小型應(yīng)用;ParallelGC提升吞吐量;CMS降

比較Java構(gòu)建工具:Maven vs. Gradle 比較Java構(gòu)建工具:Maven vs. Gradle Aug 03, 2025 pm 01:36 PM

Gradleisthebetterchoiceformostnewprojectsduetoitssuperiorflexibility,performance,andmoderntoolingsupport.1.Gradle’sGroovy/KotlinDSLismoreconciseandexpressivethanMaven’sverboseXML.2.GradleoutperformsMaveninbuildspeedwithincrementalcompilation,buildcac

以身作則,解釋說(shuō)明 以身作則,解釋說(shuō)明 Aug 02, 2025 am 06:26 AM

defer用於在函數(shù)返回前執(zhí)行指定操作,如清理資源;參數(shù)在defer時(shí)立即求值,函數(shù)按後進(jìn)先出(LIFO)順序執(zhí)行;1.多個(gè)defer按聲明逆序執(zhí)行;2.常用於文件關(guān)閉等安全清理;3.可修改命名返回值;4.即使發(fā)生panic也會(huì)執(zhí)行,適合用於recover;5.避免在循環(huán)中濫用defer,防止資源洩漏;正確使用可提升代碼安全性和可讀性。

See all articles