static關(guān)鍵字什么意思则北?java中是否可以覆蓋一個private或者是static的方法宋税?
“static”表明一個成員變量或者是成員方法可以在沒有所屬類的實(shí)例變量的情況下訪問。
java中static方法不能被覆蓋杯巨,因?yàn)榉椒ǜ采w是基于運(yùn)行時動態(tài)綁定的韵吨,而static方法是編譯時靜態(tài)綁定的贩猎。static方法與類的任何實(shí)例都不相關(guān)肩祥。
java中不可以覆蓋private方法坞嘀。因?yàn)閜rivate修飾的變量和方法只能在當(dāng)前類中使用,如果是其他類繼承當(dāng)前類,繼承類中是不能訪問到private變量和方法的
能否在static環(huán)境中訪問訪問非static變量争剿?
不能已艰。static變量是屬于類的痊末。當(dāng)類被虛擬機(jī)載入時蚕苇,會對static變量進(jìn)行初始化。非static變量是屬于實(shí)例的凿叠,這個時候?qū)嵗€沒有被創(chuàng)建涩笤,編譯器會報(bào)錯
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)造方法?
當(dāng)新對象被創(chuàng)建時强窖,構(gòu)造方法會被調(diào)用盈匾。每一個類都有一個構(gòu)造方法,在沒有給類提供構(gòu)造函數(shù)時毕骡,編譯器會自動創(chuàng)建一個默認(rèn)的構(gòu)造方法
java中構(gòu)造方法重載和方法重載很相似削饵。可以為一個類創(chuàng)建多個構(gòu)造方法未巫,每一個構(gòu)造方法必須有它自己唯一的參數(shù)列表
java支持多繼承嗎窿撬?
不支持。只能支持單繼承叙凡,即一個類只有一個父類劈伴。可以用implements實(shí)現(xiàn)多個接口擴(kuò)展
接口與抽象類的區(qū)別
1.接口中所有方法隱含都是抽象的。而抽象類則可以同時包含抽象和非抽象的方法
2.接口中聲明的變量默認(rèn)都是final跛璧,而抽象類可以包含非final的變量
3.接口中成員函數(shù)默認(rèn)都會public严里。抽象類的成員函數(shù)可以是private,protected或者public
4.類可以不實(shí)現(xiàn)抽象類和接口聲明中的所有方法追城,這種情況下刹碾,類也必須聲明為抽象的
jdk與jre區(qū)別是什么?
java運(yùn)行時環(huán)境(jre)是將要執(zhí)行的java程序的java虛擬機(jī)座柱,同時也包含了執(zhí)行applet需要的瀏覽器插件迷帜。java開發(fā)工具包(jdk)是完整的java軟件開發(fā)包,包含了jre色洞,編譯器和其他工具(比如:javadoc戏锹,java調(diào)試器),可以讓開發(fā)者開發(fā)火诸,編譯锦针,執(zhí)行java應(yīng)用程序
什么是只傳遞和引用傳遞
值傳遞是對基本類型變量而言,傳遞是該變量的一個副本置蜀,改變副本不會影響原變量
引用傳遞一般是對于對象型變量而言奈搜,傳遞的是該對象地址的一個副本,改變副本盾碗,會影響原變量
進(jìn)程和線程的區(qū)別媚污?
進(jìn)程是執(zhí)行著的應(yīng)用程序,線程是進(jìn)程內(nèi)部的一個執(zhí)行序列廷雅。一個進(jìn)程可以有多個線程
區(qū)別:
1.地址空間和其他資源:進(jìn)程之間相互獨(dú)立耗美。同一個進(jìn)程的各個線程間共享。某進(jìn)程內(nèi)的線程在其他進(jìn)程不可見
2航缀。通信:進(jìn)程之間通信ipc商架,線程間可以直接讀寫進(jìn)程數(shù)據(jù)段(如全局變量)來進(jìn)行通信--需要進(jìn)程同步和互斥手段的輔助,以保證數(shù)據(jù)的一致性
3.調(diào)度和切換:線程之間上下文切換比進(jìn)程上下文切換快的多
4.在多線程os中芥玉,進(jìn)程不是一個可執(zhí)行的實(shí)體
同步方法和同步代碼塊的區(qū)別
同步方法默認(rèn)是用this或當(dāng)前類對象作為鎖
同步代碼塊可以選擇以什么來加鎖蛇摸,比同步方法更細(xì)粒度。我們可以選擇只同步會發(fā)生同步問題的部分代碼而不是整個方法
死鎖
死鎖是值多個線程因資源競爭而造成的一種僵局灿巧,若無外力作用赶袄,這些線程都無法向前推進(jìn)。產(chǎn)生死鎖的4個必要條件
1.互斥條件
2.不剝奪條件
3.請求和保持條件
4.循環(huán)等待
如何確保N個線程可以訪問N個資源同時又不導(dǎo)致死鎖抠藕?
一種非常簡單的避免死鎖的方式:指定獲取鎖的順序饿肺,并強(qiáng)制線程按照指定的順序獲取鎖。因此如果所有的線程都是以同樣的順序加鎖和釋放鎖盾似,就不會出現(xiàn)死鎖
java集合類框架的基本接口有哪些敬辣?
Collection,Set,List,Map
HashMap工作原理
hashMap是以鍵值對的形式存儲。hashmap需要一個hash函數(shù)溉跃,它使用hashCode和equals方法來向集合/從集合添加和檢索元素村刨。當(dāng)調(diào)用put時,HashMap會計(jì)算key的hash值撰茎,然后把鍵值對存儲在集合中合適的索引上嵌牺。如果key已經(jīng)存在,value會被更新成新值乾吻。hashMap的一些重要的特性是它的容量髓梅,負(fù)載因子和擴(kuò)容極限
hashcode和equals重要性體現(xiàn)在什么地方
hashmap通過hashcode和equals確定鍵值對索引
hashmap和hashtable區(qū)別拟蜻?
hashmap允許鍵和值是null绎签,hashtable不允許鍵或值為null
hashtable同步,而hashmap不是