Java基礎面試題16~30

面試題上 :上半部分面試題

16.接口是否可繼承(extends)接口?抽象類是否可實現(implements)接口?抽象類是否可繼承具體類(concrete class)?

  • 接口可以繼承接口
  • 抽象類可以實現接口
  • 抽象類可以繼承具體類也可以繼承抽象類

17.Anonymous Inner Class(匿名內部類)是否可以繼承其它類?是否可以實現接口?
都可以

18.內部類可以引用它的包含類(外部類)的成員嗎?有沒有什麼限制?
可以引用,包括私有屬性

19.Java 中的final關鍵字有哪些用法?

  • 修飾類,不能被繼承
  • 修飾方法,不能被重寫
  • 修飾屬性,不能改變值(常量);

20.下面程序的運行結果

class HelloA {
    //構造方法
    public HelloA() {
        System.out.println("Hello A!父類構造方法");
    }

    {
        System.out.println("i'm A class.父類非靜態代碼塊");
    }

    static {
        System.out.println("static A 父類靜態代碼塊");
    }
}
public class HelloB extends HelloA {
    //構造方法
    public HelloB(){
        System.out.println("Hello B! 構造方法");
    } //非靜態代碼塊
    {
        System.out.println("i'm B class.非靜態代碼塊");
    } //靜態代碼塊
    static{
        System.out.println("static B 靜態代碼塊");
    }
    public static void main(String[] args) {
        System.out.println("---start---");
        new HelloB();
        new HelloB();
        System.out.println("---end---");
    }
}

執行結果:

static A 父類靜態代碼塊
static B 靜態代碼塊
---start---
i'm A class.父類非靜態代碼塊
Hello A!父類構造方法
i'm B class.非靜態代碼塊
Hello B! 構造方法
i'm A class.父類非靜態代碼塊
Hello A!父類構造方法
i'm B class.非靜態代碼塊
Hello B! 構造方法
---end---

21.如何實現字符串的反轉及替換

public static String reverse(String originStr) {
        if (originStr == null || originStr.length() <= 1) 
                   return originStr;        
	return reverse(originStr.substring(1)) + originStr.charAt(0);
	    }

22.try{}裏有一個return語句,那麼緊跟在這個try後的finally{}裏的代碼會不會被執行,什麼時候被執行,在return前還是後?
會,在返回結果前調用,如果finally中修改了返回值,則返回修改後的值.

23.運行時異常與受查異常有何異同

  • 運行時異常沒有要求捕獲
  • 受查異常要求捕獲或拋出異常

24.List、Set、Map是否繼承自Collection接口?
不是,List,Set 繼承自Collection接口 ,Map不是

25.闡述ArrayList、Vector、LinkedList的存儲性能和特性

  • ArrayList : 基於數組實現,性能較高,非線程安全,插入刪除慢,索引快
  • Vector : 基於數組實現,性能低,線程安全
  • LinkedList : 基於鏈表實現,性能較高,非線程安全,插入刪除快,索引慢;

26.Collection和Collections的區別?

  • Conllection 是一個接口
  • Conllections 是一個工具類,輔助容器類操作,有排序,搜索,線程安全化

27.Collections工具類中的sort()方法如何比較元素?
在這裏插入圖片描述
一種是傳入容器對象
另一種是傳入容器對象後,還必須傳入Comparator子類的compare()方法

28.Thread類的sleep()方法和對象的wait()方法都可以讓線程暫停執行,它們有什麼區別?

  • sleep(),交出cpu,不會釋放鎖
  • wait(),釋放鎖,進入等待池,等待notify()

29.線程池基本狀態
在這裏插入圖片描述
30.synchronized和java.util.concurent.locks.Lock的區別

  • 相同點:Lock能實現synchronized的所有功能
  • 不同點:Lock性能好於synchronized,不強制要求獲取鎖.synchronized會主動釋放鎖,Lock需要手工釋放鎖,最好在finally中釋放
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章