最新Java基礎面試題

時(shí)間:2022-07-02 11:39:46 面試 我要投稿
  • 相關(guān)推薦

最新Java基礎面試題

Java基礎面試題(一)

最新Java基礎面試題

1.面向對象的特征

1)抽象

抽象就是忽略一個(gè)主題中與當前目標無(wú)關(guān)的那些方面,一邊更充分地注意與目標有關(guān)的方面。抽象并不打算了解全部問(wèn)題,而只是選擇其中的一部分,暫不用部分細節。抽象包括兩個(gè)方面,一是過(guò)程抽象,二是數據抽象。

2)繼承

在定義和實(shí)現一個(gè)類(lèi)的時(shí)候,可以在一個(gè)已經(jīng)存在的類(lèi)的基礎之上來(lái)進(jìn)行,把這個(gè)已經(jīng)存在的類(lèi)所定義的內容作為自己的內容,并可以加入若干新的內容,或修改原來(lái)的方法使之更適合特殊的需要,這個(gè)就是繼承。繼承是子類(lèi)自動(dòng)貢獻父類(lèi)數據和方法的機制,這是類(lèi)之間的一種關(guān)系,提高了軟件的可重用性和可擴展性。

3)封裝

封裝是把過(guò)程和數據包圍起來(lái),對數據的訪(fǎng)問(wèn)只能通過(guò)已定義的接口。

4)多態(tài)

多態(tài)是指程序中所定義的引用變量所指向的具體類(lèi)型和通過(guò)該引用變量發(fā)出的方法調用在編程時(shí)并不確定,而是在程序運行期間才確定,即一個(gè)引用變量到底會(huì )指向哪個(gè)類(lèi)的實(shí)例對象,該引用變量發(fā)出的方法調用到底是哪個(gè)類(lèi)中實(shí)現的方法,必須在程序運行期間才能決定。

2.Java的基本數據類(lèi)型

byte, short, int, long, float, double, char, boolean

3.int和Integer有什么區別

Java提供兩種不同類(lèi)型:引用類(lèi)型和原始類(lèi)型。int是Java的原始數據類(lèi)型,Integer是Java為int提供的封裝類(lèi)型。

原始類(lèi)型 封裝類(lèi)

boolean Boolean

char Character

byte Byte

short Short

int Integer

long Long

float Float

double Double

封裝類(lèi)型的實(shí)例變量的缺省值為null,而原始類(lèi)型實(shí)例變量的缺省值跟他們的類(lèi)型有關(guān)。

4.String和StringBuffer的區別

String類(lèi)用來(lái)表示那些創(chuàng )建后就不會(huì )再改變的字符串。

StringBuffer類(lèi)用來(lái)表示內容可變的字符串,并鼻孔了修改底層字符串的方法,當我們進(jìn)行字符串拼接時(shí)使用。

5.StringBuffer和StringBuilder的區別

它們都是表示可變的字符串。StringBuffer是線(xiàn)程安全的,StringBulider是非線(xiàn)程安全的。兩者方法基本相同,優(yōu)先采用StringBuilder,在大多數的時(shí)候比StringBuffer快。StringBuilder一般使用在方法內部來(lái)完成字符串拼接功能,StringBuffer要用來(lái)全部變量中。

6.運行時(shí)異常與一般異常有何異同

Java一共了兩類(lèi)主要的異常:runtime exception和checked exception。我們經(jīng)常遇到的IO異常以及SQL異常是checked exception,對于這些非運行時(shí)異常必須進(jìn)行捕獲或拋出。但并不要求對運行時(shí)異常進(jìn)行處理,如NullPointerException,出現運行時(shí)異常后,系統會(huì )把異常一直往上層拋,一直遇到處理代碼塊或Java虛擬機處理。運行時(shí)異常表示虛擬機的通常操作中可能遇到的異常,是一種常見(jiàn)運行錯誤。

7.ArrayList,Vector,LinkedList的存儲性能和特性

ArrayList和Vector都是使用數組方式存儲數據,允許直接按序號索引元素,但是插入元素要涉及數組元素移動(dòng)等內存操作,所以索引數據快而插入數據慢,Vector由于使用了synchronized方法(線(xiàn)程安全),通常性能上較ArrayList差。

LinkedList使用雙向鏈表實(shí)現存儲,按序號索引數據需要進(jìn)行前向或后向遍歷,但是插入數據時(shí)只需記錄本項的前后項即可,所以插入速度較快。

8.Collection和Collections的區別

Collection是集合類(lèi)的上級接口,繼承于他的接口主要有Set和List。

Collections是針對集合類(lèi)的一個(gè)幫助類(lèi),他提供一系列靜態(tài)方法實(shí)現對各種集合的搜索、排序、線(xiàn)程安全化等操作。

9.&和&&的區別

&和&&都有邏輯運算符and的功能,&還可以用作位運算符,&&具有短路功能,即如果第一個(gè)表達式為false,則不再計算第二個(gè)表達式的值。

10.HashMap和Hashtable的區別

HashMap是非線(xiàn)程安全的,Hashtable是線(xiàn)程安全的。

HashMap允許將null作為一個(gè)entry的key或者value,而Hashtable不允許。

11.final,finally,finalize的區別

final用于聲明屬性,方法和類(lèi),分別表示屬性不可變,方法不可覆蓋,類(lèi)不可繼承。

finally是異常處理語(yǔ)句結構的一部分,表示總是會(huì )執行。

finalize是Object類(lèi)的一個(gè)方法,在垃圾收集器執行的時(shí)候會(huì )調用被回收對象的此方法。

12.sleep()和wait()有什么區別

sleep()是Thread類(lèi)的方法,在指定的毫秒數內讓正在執行的線(xiàn)程暫停執行,把執行機會(huì )讓給其他線(xiàn)程,到指定時(shí)間會(huì )自動(dòng)恢復。調用sleep不會(huì )釋放對象鎖。

wait()是Object類(lèi)的方法,對此對象調用wait方法導致本線(xiàn)程放棄對象鎖,進(jìn)入等待此對象的等待鎖定池,只有針對此對象發(fā)出notify/notifyAll方法后,本線(xiàn)程才進(jìn)入對象鎖定池準備獲得對象鎖進(jìn)入運行狀態(tài)。

13.Overload和Override的區別。Overload的方法可以改變返回值的類(lèi)型嗎?

方法的重寫(xiě)Override和重載Overload是Java多態(tài)性的不同表現。重寫(xiě)Override是父類(lèi)與子類(lèi)之間多態(tài)性的一種表現,重載Overload是一個(gè)類(lèi)中多態(tài)性的一種表現。

方法覆蓋要求參數簽名必須一致,而辦法重載要求參數簽名必須不一致。

方法覆蓋要求返回類(lèi)型必須一致,而方法重載不做限制。

方法覆蓋只能用于子類(lèi)覆蓋父類(lèi)的方法,方法重載用于同一個(gè)類(lèi)的所有方法。

方法覆蓋對方法的訪(fǎng)問(wèn)權限和拋出的異常有特殊要求,而方法重載沒(méi)有限制。

父類(lèi)的一個(gè)方法只能被子類(lèi)覆蓋一次,而一個(gè)方法在所在的類(lèi)中可以被重載多次。

方法重載可以改變返回值的類(lèi)型。

14.error和exception有什么區別?

error表示恢復不是不可能但很困難的情況下的一種嚴重問(wèn)題。比如內存溢出,不可能指望程序能處理這樣的情況。

exception表示一種設計或實(shí)現問(wèn)題。如果程序運行正常,從不會(huì )發(fā)生的情況。

15.同步和異步有何異同,在什么情況下分別使用他們?舉例說(shuō)明。

如果數據將在線(xiàn)程間共享,例如正在寫(xiě)的數據以后可能被另一個(gè)線(xiàn)程讀到,或者正在讀的數據可能已經(jīng)被另一個(gè)線(xiàn)程寫(xiě)過(guò)了,那么這些數據就是共享數據,必須進(jìn)行同步存取。

當應用程序在對象上調用了一個(gè)需要花費很長(cháng)時(shí)間來(lái)執行的方法,并且不希望讓程序等待方法的返回時(shí),就應該使用異步編程,在很多情況下采用異步途徑往往更有效率。

16.abstract class和interface有什么區別?

聲明方法的存在而不去實(shí)現他的類(lèi)叫做抽象類(lèi)。接口是抽象類(lèi)的特例。接口中的所有方法都必須是抽象的,接口中的方法定義默認為public abstract。接口中的變量是全局常量,即public static修飾的。一個(gè)類(lèi)可以實(shí)現多個(gè)接口,但只能繼承一個(gè)抽象類(lèi)。

17.heap和stack有什么區別

棧是一種線(xiàn)型集合,添加和刪除的操作在同一端完成,按照后進(jìn)先出的方式進(jìn)行處理。堆是棧的一個(gè)組成元素。

18. Static Nested Class和Inner Class的不同。

Static Nestec Class是被聲明為靜態(tài)static的內部類(lèi),它可以不依賴(lài)于外部類(lèi)實(shí)例被實(shí)例化。而通常的內部類(lèi)需要在外部類(lèi)實(shí)例化后才能實(shí)例化。

19.JSP中動(dòng)態(tài)include與靜態(tài)include的區別

動(dòng)態(tài)include用jsp:include動(dòng)作實(shí)現 它總是檢查所含文件中的變化,適合用于包含動(dòng)態(tài)頁(yè)面,并且可以帶參數。

靜態(tài)include用include偽碼實(shí)現,不會(huì )檢查所含文件的變化,適合包含靜態(tài)頁(yè)面<%@ include file="include.html" %>

20.GC是什么?為什么要有GC?

GC是垃圾回收的意思(Garbage Collection),內存處理是編程人員出現問(wèn)題的地方,忘記或者錯誤的內存回收會(huì )導致程序或系統的不穩定甚至崩潰,Java提供自動(dòng)垃圾回收機制,自動(dòng)檢測對象是否超過(guò)作用域從而達到自動(dòng)回收內存的目的,Java語(yǔ)言沒(méi)有提供釋放已分配內存的顯式操作方法。

21. short s1 = 1; s1 = s1 + 1;有什么錯? short s1 = 1; s1+=1; 有什么錯?

short s1 = 1; s1 = s1 + 1;// s1+1運算結果是int型,需要強制轉換類(lèi)型

short s1 = 1; s1 += 1; // 可以正確編譯

22.Math.round(11.5)等于多少?Math.round(-11.5)等于多少?

Math.round(11.5)==12;Math.round(-11.5)==-11;

round方法返回與參數最接近的長(cháng)整數,參數加1/2后求其floor。

23.Java中有沒(méi)有g(shù)oto?

goto在Java中作為保留字,但沒(méi)有被使用。

24.String s = new String("xyz");創(chuàng )建了幾個(gè)對象?

兩個(gè)

25.接口是否可繼承接口?抽象類(lèi)是否可實(shí)現(implements)接口?抽象類(lèi)是否可繼承實(shí)體類(lèi)(concrete class)?

接口可以繼承接口。

抽象類(lèi)可以實(shí)現接口。

抽象類(lèi)可以繼承實(shí)體類(lèi),但前提是實(shí)體類(lèi)必須有明確的構造函數。

26.List,Set,Map是否繼承自Collection接口?

List,Set是,Map不是。

<p< p="">


【最新Java基礎面試題】相關(guān)文章:

java基礎面試題07-13

java 基礎面試題07-11

java基礎面試題(2012完整版)07-13

Java面試題07-12

JAVA題庫:JAVA面試題目整理07-11

求java面試題07-11

java面試題307-13

JAVA面試題(問(wèn)題)07-13

java面試題分析07-13

JAVA面試題求解?07-13

99久久精品免费看国产一区二区三区|baoyu135国产精品t|40分钟97精品国产最大网站|久久综合丝袜日本网|欧美videosdesexo肥婆