更新時(shí)間:2020-08-04 15:52:24 來源:動(dòng)力節(jié)點(diǎn) 瀏覽3047次
接口與抽象類的區(qū)別?
一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,但只能繼承最多一個(gè)抽象類
抽象類可以包含具體的方法;接口所有的方法都是抽象的(不管是否對接口聲明都是抽象的)(jdk1.7以前,jdk1.8開始新增功能接口中有default方法,有興趣自己研究)
抽象類可以聲明和使用字段;接口則不能,但是可以創(chuàng)建靜態(tài)的final常量
抽象類中的方法可以是public、protected、private或者默認(rèn)的package;接口的方法都是public(不管是否聲明,接口都是公開的)
抽象類可以定義構(gòu)造函數(shù),接口不能。
接口被聲明為public,省略后,包外的類不能訪問接口
Java中的異常有哪幾類?分別怎么使用?
Throwable包含了錯(cuò)誤(Error)和異常(Excetion兩類)
Exception又包含了運(yùn)行時(shí)異常(RuntimeException,又叫非檢查異常)和非運(yùn)行時(shí)異常(又叫檢查異常)(1)Error是程序無法處理了,如果OutOfMemoryError、OutOfMemoryError等等,這些異常發(fā)生時(shí),java虛擬機(jī)一般會終止線程.
-(2)運(yùn)行時(shí)異常都是RuntimeException類及其子類,如NullPointerException、IndexOutOfBoundsException等,這些異常是不檢查的異常,是在程序運(yùn)行的時(shí)候可能會發(fā)生的,所以程序可以捕捉,也可以不捕捉.這些錯(cuò)誤一般是由程序的邏輯錯(cuò)誤引起的,程序應(yīng)該從邏輯角度去盡量避免.
(3)檢查異常是運(yùn)行時(shí)異常以外的異常,也是Exception及其子類,這些異常從程序的角度來說是必須經(jīng)過捕捉檢查處理的,否則不能通過編譯.如IOException、SQLException等
常用的集合類有哪些?比如List如何排序?
常用的集合分為List(有序排放)、Map(以名和值一一對應(yīng)的存放)、Set(既無序也沒名).在這三者之中其中List和Set是Collection接口的子接口,而Map不是Collection接口的子接口.
List常用有:ArrayList和LinkedList,Vecotr(線程安全)
Set常用有:TreeSet,HashSet元素不可重復(fù),內(nèi)部結(jié)構(gòu)用HashMap,Key為Set的item值,value為一個(gè)固定的常量。java.util.Collections.newHashSetFromMap(),內(nèi)部其實(shí)質(zhì)還是通過ConcurrentHashMap實(shí)現(xiàn)線程安全的。
Map:TreeMap和LinkedHashMap,HashMap,HashTable(線程安全)
sort()方法排序的本質(zhì)其實(shí)也是借助Comparable接口和Comparator接口的實(shí)現(xiàn),一般有2種用法:
直接將需要排序的list作為參數(shù)傳入,此時(shí)list中的對象必須實(shí)現(xiàn)了Comparable接口,然后sort會按升序的形式對元素進(jìn)行排序;
傳入list作為第一個(gè)參數(shù),同時(shí)追加一個(gè)Comparator的實(shí)現(xiàn)類作為第二個(gè)參數(shù),然后sort方法會根據(jù)Comparator接口的實(shí)現(xiàn)類的邏輯,按升序進(jìn)行排序;
ArrayList和LinkedList內(nèi)部的實(shí)現(xiàn)大致是怎樣的?他們之間的區(qū)別和優(yōu)缺點(diǎn)?
Linkedlist集合的優(yōu)勢:添加元素時(shí)可以指定位置,比ArrayList集合添加元素要快很多。
Linkedlist在get很慢,LinkedList在get任何一個(gè)位置的數(shù)據(jù)的時(shí)候,都會把前面的數(shù)據(jù)走一遍。盡量不使用,而使用foreach LinkedList的方式來直接取得數(shù)據(jù)。
這兩種方式各有優(yōu)缺,為更好的使用可以將這兩者進(jìn)行聯(lián)合使用,使用Linkedlist集合進(jìn)行存儲和添加元素,使用Arraylist集合進(jìn)行g(shù)et獲取元素。
內(nèi)存溢出是怎么回事?請舉一個(gè)例子?
內(nèi)存溢出(out of memory)通俗理解就是內(nèi)存不夠,在計(jì)算機(jī)程序中通俗的理解就是開辟的內(nèi)存空間得不到釋放。
OOM有堆溢出,棧溢出,方法區(qū)溢出(主要是動(dòng)態(tài)生成class的處理過多)
==和equals的區(qū)別?
==號在比較基本數(shù)據(jù)類型時(shí)比較的是值,而用==號比較兩個(gè)對象時(shí)比較的是兩個(gè)對象的地址值
Object類中equals()方法底層依賴的是==號,那么,在所有沒有重寫equals()方法的類中,調(diào)用equals()方法其實(shí)和使用==號的效果一樣,然而,Java提供的所有類中,絕大多數(shù)類都重寫了equals()方法,重寫后的equals()方法一般都是比較兩個(gè)對象的值
hashCode方法的作用?
hashCode的存在主要是用于查找的快捷性,如Hashtable,HashMap等,hashCode是用來在散列存儲結(jié)構(gòu)中確定對象的存儲地址的;
如果兩個(gè)對象相同,就是適用于equals(Java.lang.Object)方法,那么這兩個(gè)對象的hashCode一定要相同;
如果對象的equals方法被重寫,那么對象的hashCode也盡量重寫,并且產(chǎn)生hashCode使用的對象,一定要和equals方法中使用的一致,否則就會違反上面提到的第2點(diǎn);
兩個(gè)對象的hashCode相同,并不一定表示兩個(gè)對象就相同,也就是不一定適用于equals(java.lang.Object)方法,只能夠說明這兩個(gè)對象在散列存儲結(jié)構(gòu)中,如Hashtable,他們“存放在同一個(gè)籃子里”。

以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對“2020年企業(yè)常用的高級java面試題及答案”的內(nèi)容進(jìn)行的回答,希望對大家有所幫助,如有疑問,請?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。

初級 202925

初級 203221

初級 202629

初級 203743