Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(22)
承蒙各位厚愛(ài),我們一起每天進(jìn)步一點(diǎn)點(diǎn)?。ㄊ髽?biāo)選中空白處查看答案)
1、有以下代碼片段:
String str1=“hello”;
String str2=“he”+ new String(“l(fā)lo”);
System.out.println(str1==str2);
請(qǐng)問(wèn)輸出的結(jié)果是:
正確答案: D
true
都不對(duì)
null
false
題解:
String str1=“hello”; 這樣創(chuàng)建字符串是存在于常量池中
String str2=new String(“hello”); str2存在于堆中,
==是驗(yàn)證兩個(gè)對(duì)象是否是一個(gè)(內(nèi)存地址是否相同),所以是false
用+拼接字符串時(shí)會(huì)創(chuàng)建一個(gè)新對(duì)象再返回。
2、HashMap的數(shù)據(jù)結(jié)構(gòu)是怎樣的?
正確答案: C
數(shù)組
鏈表
數(shù)組+鏈表
二叉樹(shù)
題解:
HashMap 由數(shù)組+鏈表組成的,數(shù)組是 HashMap 的主體,鏈表則是主要為了解決哈希沖突而存在的
HashMap內(nèi)部包含了一個(gè)默認(rèn)大小為 16 Entry 類型的數(shù)組 table,其中每個(gè)Entry 是一個(gè)鏈表,當(dāng)鏈表長(zhǎng)度大于等于 8 時(shí)會(huì)將鏈表轉(zhuǎn)換為紅黑樹(shù)。
3、關(guān)于下面的程序,說(shuō)法正確的是:
class StaticStuff
{
static int x = 10;
static { x += 5; }
public static void main(String args[])
{
System.out.println(“x = ” + StaticStuff .x);
}
static
{x /= 3; }
}
正確答案: D
第5行和12行不能編譯,因?yàn)樵摲椒](méi)有方法名和返回值。
第12 行不能編譯,因?yàn)橹荒苡幸粋€(gè)static初始化塊。
代碼編譯并執(zhí)行,輸出結(jié)果x = 10.
代碼編譯并執(zhí)行,輸出結(jié)果 x = 5.
代碼編譯并執(zhí)行,輸出結(jié)果 x = 15.
題解:
第5、12行屬于static修飾的靜態(tài)代碼塊。所以A、B說(shuō)法錯(cuò)誤。
靜態(tài)代碼塊以及靜態(tài)變量自上而下的順序依次隨著類加載而執(zhí)行,所以依據(jù)題目的變量初始化:
x初始為10
x+5賦值x,結(jié)果為15
x/3賦值給x,結(jié)果為5
4、枚舉(enum)屬于原始數(shù)據(jù)類型(primitive type)。
正確答案: B
正確
錯(cuò)誤
題解:
在Java中,變量有兩種類型,一種是原始類型,一種是引用類型。
原始類型一共有8種,它們分別是char,boolean,byte,short,int,long,float,double。在Java API中,有它們對(duì)應(yīng)的包裝類,分別是(首字母大寫)Character,Boolean,Byte,Short,Integer,Long,Float,Double(char,int的變化稍微大點(diǎn))。
JAVA JVM對(duì)于不同的原始類型會(huì)分配不同的存儲(chǔ)空間,具體分配如下:
byte : 1個(gè)字節(jié) 8位
最大值: 127 (有符號(hào))
short : 2個(gè)字節(jié) 16位 32767
int : 4個(gè)字節(jié) 32位 2147483647
long: 8個(gè)字節(jié) 64位 9223372036854775807
float: 4個(gè)字節(jié) 32位 3.4028235E38
double:8個(gè)字節(jié) 64位 1.7976931348623157E308
枚舉(enum)類型是Java 5新增的特性,它是一種新的類型,允許用常量來(lái)表示特定的數(shù)據(jù)片斷,而且全部都以類型安全的形式來(lái)表示,是特殊的類,可以擁有成員變量和方法。
5、如下代碼的輸出是
package Test;
public class Test {
private static void test(int[] arr) {
for (int i = 0; i < arr.length; i++) {
try {
if (arr[i] % 2 == 0) {
throw new NullPointerException();
} else {
System.out.print(i);
}
} finally {
System.out.print("e");
}
}
}
public static void main(String[]args) {
try {
test(new int[] {0, 1, 2, 3, 4, 5});
} catch (Exception e) {
System.out.print("E");
}
}
}
正確答案: B
編譯出錯(cuò)
eE
Ee
eE1eE3eE5
Ee1Ee3Ee5
題解:
會(huì)先進(jìn)到test(new int[] {0, 1, 2, 3, 4, 5});這里,進(jìn)入test方法,然后if成立,throw new NullPointerException();但是此時(shí)并不會(huì)立馬返回,會(huì)先把test方法中的finally執(zhí)行,輸出e然后回到main進(jìn)到catch中輸出E,所以輸出eE
6、設(shè)有下面兩個(gè)賦值語(yǔ)句:
a = Integer.parseInt(“1024”);
b = Integer.valueOf(“1024”).intValue();
下述說(shuō)法正確的是()
正確答案: D
a是整數(shù)類型變量,b是整數(shù)類對(duì)象。
a是整數(shù)類對(duì)象,b是整數(shù)類型變量。
a和b都是整數(shù)類對(duì)象并且它們的值相等。
a和b都是整數(shù)類型變量并且它們的值相等。
題解:
Integer對(duì)象的方法
Integer.parseInt("");是將字符串類型轉(zhuǎn)換為int的基礎(chǔ)數(shù)據(jù)類型
Integer.valueOf("")是將字符串類型數(shù)據(jù)轉(zhuǎn)換為Integer對(duì)象
Integer.intValue();是將Integer對(duì)象中的數(shù)據(jù)取出,返回一個(gè)基礎(chǔ)數(shù)據(jù)類型int
在源碼中這兩個(gè)方法返回的都是int 也就是說(shuō)都是整數(shù)類型變量。所以應(yīng)該選D
7、關(guān)于Java語(yǔ)言描述正確的是? ( )
正確答案: B
java和C++都保留了指針
java和C++都有三個(gè)特征:封裝、繼承和多態(tài)
java的垃圾回收機(jī)制是指程序結(jié)束時(shí)系統(tǒng)自動(dòng)回收內(nèi)存
以上說(shuō)法都不正確
題解:
送分題
A:Java沒(méi)有指針,只有引用。
B:c是面向過(guò)程,java和c++都是面向?qū)ο?,面向?qū)ο蟮娜筇卣魇牵悍庋b、繼承、多態(tài)。
C:并不是程序結(jié)束的時(shí)候進(jìn)行GC,GC的時(shí)間是不確定的,且GC的過(guò)程需要經(jīng)過(guò)可達(dá)性分析,一個(gè)對(duì)象只有被標(biāo)記兩次才會(huì)被GC。
下圖是一個(gè)對(duì)象被GC的全過(guò)程。
8、Integer i = 42;
Long l = 42l;
Double d = 42.0;
下面為true的是
正確答案: G
A:(i == l)
B:(i == d)
C:(l == d)
D:i.equals(d)
E:d.equals(l)
F:i.equals(l)
G:l.equals(42L)
題解:
ABC3 個(gè)選項(xiàng)很明顯,不同類型引用的 == 比較,會(huì)出現(xiàn)編譯錯(cuò)誤,不能比較。
DEF 調(diào)用 equals 方法,因?yàn)榇朔椒ㄏ仁潜容^類型,而 i , d , l 是不同的類型,所以返回假。
選項(xiàng) G ,會(huì)自動(dòng)裝箱,將 42L 裝箱成 Long 類型,所以調(diào)用 equals 方法時(shí),類型相同,且值也相同,因此返回真。
9、關(guān)于equals和hashCode描述正確的是 ()
正確答案: A B C
兩個(gè)obj,如果equals()相等,hashCode()一定相等(符合代碼規(guī)范的情況下)
兩個(gè)obj,如果hashCode()相等,equals()不一定相等
兩個(gè)不同的obj, hashCode()可能相等
其他都不對(duì)
題解:
hashCode()的存在是為了查找的快捷性,用于在散列存儲(chǔ)結(jié)構(gòu)中確定對(duì)象的存儲(chǔ)地址
如果兩個(gè)對(duì)象 equals相等,則 hashCode()也一定相等
如果 equals方法被重寫,則 hashCode()也應(yīng)該被重寫
如果兩個(gè)對(duì)象的 hashCode()相等, equals()方法不一定相等
equals方法沒(méi)有重寫,比較的就是應(yīng)用類型的變量所指向的對(duì)象的地址
10、有關(guān)finally語(yǔ)句塊說(shuō)法正確的是( )
正確答案: A B C
不管catch是否捕獲異常,finally語(yǔ)句塊都是要被執(zhí)行的
在try語(yǔ)句塊或catch語(yǔ)句塊中執(zhí)行到System.exit(0)直接退出程序
finally塊中的return語(yǔ)句會(huì)覆蓋try塊中的return返回
finally 語(yǔ)句塊在 catch語(yǔ)句塊中的return語(yǔ)句之前執(zhí)行
題解:
D不是return之前,是return執(zhí)行完成之前,return表達(dá)式的結(jié)果會(huì)暫時(shí)保存起來(lái),不會(huì)被改變
答案匯總:
1、正確答案: D
2、正確答案: C
3、正確答案: D
4、正確答案: B
5、正確答案: B
6、正確答案: D
7、正確答案: B
8、正確答案: G
9、正確答案: A B C
10、正確答案: A B C
總結(jié)
本篇文章就到這里了,希望能給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
解決使用gateway后靜態(tài)資源失效的問(wèn)題
這篇文章主要介紹了解決使用gateway后靜態(tài)資源失效的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
idea集成shell運(yùn)行環(huán)境以及shell輸出中文亂碼的解決
這篇文章主要介紹了idea集成shell運(yùn)行環(huán)境以及shell輸出中文亂碼的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
SpringBoot實(shí)現(xiàn)PPT格式文件上傳并在線預(yù)覽功能
本文介紹SpringBoot實(shí)現(xiàn)PPT格式文件上傳并在線預(yù)覽功能,通過(guò)上傳接口,可在C盤的tempfile目錄下找到上傳的文件,預(yù)覽時(shí)會(huì)在同級(jí)目錄下創(chuàng)建一個(gè)相同文件名后綴為pdf的文件,每次預(yù)覽會(huì)先查找文件是否存在,存在則直接預(yù)覽,不存在則會(huì)走上面的處理,需要的朋友可以參考下2022-02-02
SpringBoot與Spring中數(shù)據(jù)緩存Cache超詳細(xì)講解
我們知道內(nèi)存讀取速度遠(yuǎn)大于硬盤讀取速度,當(dāng)需要重復(fù)獲取相同數(shù)據(jù)時(shí),一次一次的請(qǐng)求數(shù)據(jù)庫(kù)或者遠(yuǎn)程服務(wù),導(dǎo)致在數(shù)據(jù)庫(kù)查詢或者遠(yuǎn)程方法調(diào)用上小號(hào)大量的時(shí)間,最終導(dǎo)致程序性能降低,這就是數(shù)據(jù)緩存要解決的問(wèn)題,學(xué)過(guò)計(jì)算機(jī)組成原理或者操作系統(tǒng)的同學(xué)們應(yīng)該比較熟悉2022-10-10
如何使用會(huì)話Cookie和Java實(shí)現(xiàn)JWT身份驗(yàn)證
這篇文章主要介紹了如何使用會(huì)話Cookie和Java實(shí)現(xiàn)JWT身份驗(yàn)證,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下2021-03-03
基于Spring Boot保護(hù)Web應(yīng)用程序
這篇文章主要介紹了基于Spring Boot保護(hù)Web應(yīng)用程序,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03


