Java日常練習題,每天進步一點點(7)

承蒙各位厚愛,我們一起每天進步一點點!(鼠標選中空白處查看答案)

1、下面的代碼運行的結果是:

class B extends Object
{
    static
    {
        System.out.println("Load B");
    }
    public B()
    {
        System.out.println("Create B");
    }
}
class A extends B
{
    static
    {
        System.out.println("Load A");
    }
    public A()
    {
        System.out.println("Create A");
    }
}
public class Testclass
{
    public static void main(String[] args)
    {
        new A();
    }
}

正確答案: B

Load B ->Create B->Load A -> Create A

Load B -> Load A ->Create B ->Create A

Load B -> Create B-> Create A -> Load A

Create B ->Create A ->Load B ->Load A

題解:
初始化塊在構造器執行之前執行,類初始化階段先執行最頂層父類的靜態初始化塊,依次向下執行,最後執行當前類的靜態初始化塊;創建對象時,先調用頂層父類的構造方法,依次向下執行,最後調用本類的構造方法。
父類靜態代碼塊-》子類靜態代碼塊-》父類構造代碼塊-》父類構造函數-》子類構造代碼塊-》子類構造函數
初始化過程:
1.初始化父類中的靜態成員變量和靜態代碼塊 ;
2.初始化子類中的靜態成員變量和靜態代碼塊 ;
3.初始化父類的普通成員變量和代碼塊,再執行父類的構造方法;
4.初始化子類的普通成員變量和代碼塊,再執行子類的構造方法

2、下面有關java實例變量,局部變量,類變量和final變量的說法,錯誤的是?

正確答案: B

實例變量指的是類中定義的變量,即成員變量,如果沒有初始化,會有默認值。

局部變量指的是在方法中定義的變量,如果沒有初始化,會有默認值

類變量指的是用static修飾的屬性

final變量指的是用final 修飾的變量

題解:
局部變量必須有初始值

3、執行如下代碼段後,變量s1引用的字符串值是( )。

String s1 = “ABCD”;

String s2 = “1234”;

System.out.println(s1 + s2);

正確答案: A

ABCD

1234

ABCD1234

1234ABCD

題解:
變量s1引用的字符串值是
這題出的牛,有誰跟我一樣看見輸出就覺得選C
其實題問的就是s1,牛這題

4、類A1和類A2在同一包中,類A2有個protected的方法testA2,類A1不是類A2的子類(或子類的子類),類A1可以訪問類A2的方法testA2。( )

正確答案: A

正確

錯誤

題解:
public:可以被所有其他類所訪問
private:隻能被自己訪問和修改
protected:自身、子類及同一個包中類可以訪問
default:同一包中的類可以訪問,聲明時沒有加修飾符,認為是friendly。
在這裡插入圖片描述

5、在一個基於分佈式的遊戲服務器系統中,不同的服務器之間,哪種通信方式是不可行的()?

正確答案: A

管道

消息隊列

高速緩存數據庫

套接字

題解:
管道( pipe ):管道是一種半雙工的通信方式,數據隻能單向流動,而且隻能在具有親緣關系的進程間使用。進程的親緣關系通常是指父子進程關系。
既然是不同的服務器之間進行通信,怎麼可能會是具有親緣關系的進程呢?

6、下面有個hibernate延遲加載,說法錯誤的是?

正確答案: C

Hibernate2延遲加載實現:a)實體對象 b)集合(Collection)

Hibernate3 提供瞭屬性的延遲加載功能

get支持延遲加載,load不支持延遲加

hibernate使用Java反射機制,而不是字節碼增強程序來實現透明性

題解:
get()采用立即加載方式,而load()采用延遲加載

7、下面關於Spring的說法中錯誤的是()

正確答案: D

Spring是一系列輕量級Java EE框架的集合

Spring中包含一個“依賴註入”模式的實現

使用Spring可以實現聲明式事務

Spring提供瞭AOP方式的日志系統

題解:
Spring並沒有為我們提供日志系統,我們需要使用AOP(面向方面編程)的方式,借助Spring與日志系統log4j實現我們自己的日志系統。

8、servlet周期包含哪些:

正確答案: A B C

初始化

銷毀

請求處理

開始

題解:
Servlet生命周期分成3個階段:
1)初始化階段:調用init方法
2)響應客戶請求:調用service
3)終止:調用destory方法

初始化階段:在下列時刻servlet容器裝載servlet
1 servlet容器啟動時,自動裝載某些servlet
2 在servlet容器啟動後,客戶首次向servlet發送請求
3 servlet類文件被更新之後,重新裝載servlet

Servlet被裝載之後,servlet容器創建一個servlet’對象並調用servlet的init方法,在servlet生命周期內,init方法隻能被調用一次。servlet工作原理:客戶端發起一個請求,servlet調用service方法時請求進行響應,service對請求的方式進行瞭匹配,選擇調用dopost或者doget等這些方法,然後進入對應方法中調用邏輯層的方法,實現對客戶的響應。

響應客戶請求:對於用戶到達servlet的請求,servlet容器會創建特定於該請求的servletrequest和servletresponse對象,然後調用servlet的service方法,service方法從servletrequest對象中獲取客戶請求的信息,處理該請求,並且通過servletresponse對象向客戶端返回響應信息。

終止:當web應用終止或者servlet容器終止或servlet容器重新裝載servlet新實例時,servlet容器會調用servlet對象的destory方法,在destory方法中可以釋放servlet占用的資源
在這裡插入圖片描述

9、已知如下的命令執行 java MyTest a b c 請問哪個語句是正確的? ( )

正確答案: C D

args[0] = “MyTest a b c”

args[0] = “MyTest”

args[0] = “a”

args[1]= “b”

題解:
題目這樣理解:java命令執行MyTest類下的main函數,命令行輸入java MyTest a b c,請問入參中對應的args為如下哪種?
main函數格式如下:public static void main(String[] args),入參中有一個String[] args,這是一個字符串數組,它早期是為瞭接收鍵盤錄入的數據的,而現在被Scanner(JDK 1.5以後才出現)所替代,通過String[] args錄入數據的格式是 java 類名(main方法所在類的類名) 字符串1 字符串2 字符串3 …。對應本題,args[0]=a args[1]=b args[2]=c

10、關於java集合下列說法不正確的有哪些()

正確答案: A B D

HashSet 它是線程安全的,不允許存儲相同的對象

ConcurrentHashMap 它是線程安全的,其中存儲的鍵對象可以重復,值對象不能重復

Collection接口是List接口和Set接口的父接口,通常情況下不被直接使用

ArrayList線程安全的,允許存放重復對象

題解:
A: HashSet 它不是線程安全的,屬於Set接口下的實現類,Set下的實現類特征就是無序,不允許存儲相同的對象
B: ConcurrentHashMap 它是線程安全的HashMap實現,特征也相似,其中存儲的值對象可以重復,鍵對象不能重復
C: Collection接口是List接口和Set接口的父接口,通常情況下不被直接使用
D: ArrayList線程不安全的,底層是數組實現,允許存放重復對象

答案匯總:

1、正確答案: B

2、正確答案: B

3、正確答案: A

4、正確答案: A

5、正確答案: A

6、正確答案: C

7、正確答案: D

8、正確答案: A B C

9、正確答案: C D

10、正確答案: A B D

推薦閱讀: