static關(guān)鍵字什么意思?java中是否可以覆蓋一個private或者是static的方法?
“static”表明一個成員變量或者是成員方法可以在沒有所屬類的實例變量的情況下訪問。
java中static方法不能被覆蓋,因為方法覆蓋是基于運行時動態(tài)綁定的,而static方法是編譯時靜態(tài)綁定的。static方法與類的任何實例都不相關(guān)。
java中不可以覆蓋private方法。因為private修飾的變量和方法只能在當前類中使用,如果是其他類繼承當前類,繼承類中是不能訪問到private變量和方法的
能否在static環(huán)境中訪問訪問非static變量?
不能。static變量是屬于類的。當類被虛擬機載入時,會對static變量進行初始化。非static變量是屬于實例的,這個時候?qū)嵗€沒有被創(chuàng)建,編譯器會報錯
java基本類型,什么是自動拆裝箱?
基本類型:byte,short,int,float,long,double,boolean,char
自動裝箱:是java編譯器在基本類型和對應(yīng)的對象包裝類型之間做一個轉(zhuǎn)化。比如把int轉(zhuǎn)化為Integer等等。反之為自動拆箱
java的方法覆蓋overriding和方法重載overloading是什么意思?
java中方法重載發(fā)生在同一個類中有兩個或者多個方法名字相同但是參數(shù)不同的情況。方法覆蓋是子類重新定義父類的方法。方法覆蓋必須有相同的方法名,參數(shù)列表和返回類型
java中,什么是構(gòu)造方法?什么是構(gòu)造方法重載?什么是復(fù)制構(gòu)造方法?
當新對象被創(chuàng)建時,構(gòu)造方法會被調(diào)用。每一個類都有一個構(gòu)造方法,在沒有給類提供構(gòu)造函數(shù)時,編譯器會自動創(chuàng)建一個默認的構(gòu)造方法
java中構(gòu)造方法重載和方法重載很相似。可以為一個類創(chuàng)建多個構(gòu)造方法,每一個構(gòu)造方法必須有它自己唯一的參數(shù)列表
java支持多繼承嗎?
不支持。只能支持單繼承,即一個類只有一個父類??梢杂胕mplements實現(xiàn)多個接口擴展
接口與抽象類的區(qū)別
1.接口中所有方法隱含都是抽象的。而抽象類則可以同時包含抽象和非抽象的方法
2.接口中聲明的變量默認都是final,而抽象類可以包含非final的變量
3.接口中成員函數(shù)默認都會public。抽象類的成員函數(shù)可以是private,protected或者public
4.類可以不實現(xiàn)抽象類和接口聲明中的所有方法,這種情況下,類也必須聲明為抽象的
jdk與jre區(qū)別是什么?
java運行時環(huán)境(jre)是將要執(zhí)行的java程序的java虛擬機,同時也包含了執(zhí)行applet需要的瀏覽器插件。java開發(fā)工具包(jdk)是完整的java軟件開發(fā)包,包含了jre,編譯器和其他工具(比如:javadoc,java調(diào)試器),可以讓開發(fā)者開發(fā),編譯,執(zhí)行java應(yīng)用程序
什么是只傳遞和引用傳遞
值傳遞是對基本類型變量而言,傳遞是該變量的一個副本,改變副本不會影響原變量
引用傳遞一般是對于對象型變量而言,傳遞的是該對象地址的一個副本,改變副本,會影響原變量
進程和線程的區(qū)別?
進程是執(zhí)行著的應(yīng)用程序,線程是進程內(nèi)部的一個執(zhí)行序列。一個進程可以有多個線程
區(qū)別:
1.地址空間和其他資源:進程之間相互獨立。同一個進程的各個線程間共享。某進程內(nèi)的線程在其他進程不可見
2。通信:進程之間通信ipc,線程間可以直接讀寫進程數(shù)據(jù)段(如全局變量)來進行通信--需要進程同步和互斥手段的輔助,以保證數(shù)據(jù)的一致性
3.調(diào)度和切換:線程之間上下文切換比進程上下文切換快的多
4.在多線程os中,進程不是一個可執(zhí)行的實體
同步方法和同步代碼塊的區(qū)別
同步方法默認是用this或當前類對象作為鎖
同步代碼塊可以選擇以什么來加鎖,比同步方法更細粒度。我們可以選擇只同步會發(fā)生同步問題的部分代碼而不是整個方法
死鎖
死鎖是值多個線程因資源競爭而造成的一種僵局,若無外力作用,這些線程都無法向前推進。產(chǎn)生死鎖的4個必要條件
1.互斥條件
2.不剝奪條件
3.請求和保持條件
4.循環(huán)等待
如何確保N個線程可以訪問N個資源同時又不導致死鎖?
一種非常簡單的避免死鎖的方式:指定獲取鎖的順序,并強制線程按照指定的順序獲取鎖。因此如果所有的線程都是以同樣的順序加鎖和釋放鎖,就不會出現(xiàn)死鎖
java集合類框架的基本接口有哪些?
Collection,Set,List,Map
HashMap工作原理
hashMap是以鍵值對的形式存儲。hashmap需要一個hash函數(shù),它使用hashCode和equals方法來向集合/從集合添加和檢索元素。當調(diào)用put時,HashMap會計算key的hash值,然后把鍵值對存儲在集合中合適的索引上。如果key已經(jīng)存在,value會被更新成新值。hashMap的一些重要的特性是它的容量,負載因子和擴容極限
hashcode和equals重要性體現(xiàn)在什么地方
hashmap通過hashcode和equals確定鍵值對索引
hashmap和hashtable區(qū)別?
hashmap允許鍵和值是null,hashtable不允許鍵或值為null
hashtable同步,而hashmap不是