接口和抽象類的區(qū)別是什么泡孩?
Java提供和支持創(chuàng)建抽象類和接口车摄。它們的實(shí)現(xiàn)有共同點(diǎn),不同點(diǎn)在于:
接口中所有的方法隱含的都是抽象的仑鸥。而抽象類則可以同時(shí)包含抽象和非抽象的方法吮播。
類可以實(shí)現(xiàn)很多個(gè)接口,但是只能繼承一個(gè)抽象類
類可以不實(shí)現(xiàn)抽象類和接口聲明的所有方法眼俊,當(dāng)然意狠,在這種情況下,類也必須得聲明成是抽象的疮胖。
抽象類可以在不提供接口方法實(shí)現(xiàn)的情況下實(shí)現(xiàn)接口环戈。
Java接口中聲明的變量默認(rèn)都是final的。抽象類可以包含非final的變量澎灸。
Java接口中的成員函數(shù)默認(rèn)是public的院塞。抽象類的成員函數(shù)可以是private,protected或者是public性昭。
接口是絕對抽象的拦止,不可以被實(shí)例化。抽象類也不可以被實(shí)例化糜颠,但是汹族,如果它包含main方法的話是可以被調(diào)用的。
也可以參考JDK8中抽象類和接口的區(qū)別
什么是值傳遞和引用傳遞其兴?
值傳遞是對基本型變量而言的顶瞒,傳遞的是該變量的一個(gè)副本。改變副本當(dāng)然不影響原變量元旬。
引用傳遞一般是對于對象型變量而言的榴徐。傳遞的是該對象地址的一個(gè)副本。這個(gè)地址空間
保存對象的數(shù)據(jù)法绵,雖然是副本箕速,但地址是唯一的。好比我拿你家地址的原件或復(fù)印件都能
找到你家朋譬。所以對改地址進(jìn)行操作會(huì)同樣改變原對象盐茎。
但傳遞的并不是原對象本身。所以徙赢,如果函數(shù)內(nèi)的對象指向新的地址字柠,并不會(huì)改變原對象的地址探越。
其實(shí)一般認(rèn)為,java內(nèi)的傳遞都是值傳遞窑业。只是傳遞的內(nèi)容不同罷了钦幔。
進(jìn)程和線程的區(qū)別是什么?
進(jìn)程是執(zhí)行著的應(yīng)用程序常柄,而線程是進(jìn)程內(nèi)部的一個(gè)執(zhí)行序列鲤氢。一個(gè)進(jìn)程可以有多個(gè)線程。線程又叫做輕量級(jí)進(jìn)程西潘。
Java中卷玉,什么是構(gòu)造函數(shù)?什么是構(gòu)造函數(shù)重載喷市?什么是復(fù)制構(gòu)造函數(shù)相种?
當(dāng)新對象被創(chuàng)建的時(shí)候,構(gòu)造函數(shù)會(huì)被調(diào)用品姓。每一個(gè)類都有構(gòu)造函數(shù)寝并。在程序員沒有給類提供構(gòu)造函數(shù)的情況下,Java編譯器會(huì)為這個(gè)類創(chuàng)建一個(gè)默認(rèn)的構(gòu)造函數(shù)腹备。
Java中構(gòu)造函數(shù)重載和方法重載很相似衬潦。可以為一個(gè)類創(chuàng)建多個(gè)構(gòu)造函數(shù)馏谨。每一個(gè)構(gòu)造函數(shù)必須有它自己唯一的參數(shù)列表别渔。
Java不支持像C++中那樣的復(fù)制構(gòu)造函數(shù),這個(gè)不同點(diǎn)是因?yàn)槿绻悴蛔约簩憳?gòu)造函數(shù)的情況下惧互,Java不會(huì)創(chuàng)建默認(rèn)的復(fù)制構(gòu)造函數(shù)。
什么是迭代器(Iterator)喇伯?
Iterator接口提供了很多對集合元素進(jìn)行迭代的方法喊儡。每一個(gè)集合類都包含了可以返回迭代器實(shí)例的迭代方法。迭代器可以在迭代的過程中刪除底層集合的元素稻据。
Java中的HashMap的工作原理是什么艾猜?
Java中的HashMap是以鍵值對(key-value)的形式存儲(chǔ)元素的。HashMap需要一個(gè)hash函數(shù)捻悯,它使用hashCode()和equals()方法來向集合/從集合添加和檢索元素匆赃。當(dāng)調(diào)用put()方法的時(shí)候,HashMap會(huì)計(jì)算key的hash值今缚,然后把鍵值對存儲(chǔ)在集合中合適的索引上算柳。如果key已經(jīng)存在了,value會(huì)被更新成新值姓言。HashMap的一些重要的特性是它的容量(capacity)瞬项,負(fù)載因子(load factor)和擴(kuò)容極限(threshold resizing)蔗蹋。