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

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

1、假設 A 類有如下定義,設 a 是 A 類同一個包下的一個實例,下列語句調用哪個是錯誤的?()

class A{ int i; static String s; void method1() { } static void method2() { } }

正確答案:C

A System.out.println(a.i);

B a.method1();

C A.method1();

D A.method2()

題解:
1、非靜態方法隻能通過實例對象來調用,不能直接通過類名調用。靜態方法(static)才能通過類名直接調用.
2、 類中變量:除瞭private權限外,其他權限的變量(沒有表示默認default),均可以用“對象.變量名”來調用。對於private變量,即使使用static,也不能用“類.變量名”來調用私有變量。隻能通過類中的public get()方法來調用。 類中方法:除瞭private權限外,其他權限的方法(沒有表示默認default),均可以用“對象.方法名”來調用。private方法可以用java反射機制調用。當然如果用 private修飾方法,該方法隻在類的內部調用。其中比較著名的就是單例模式中的私有構造方法。 static屬性:static方法在編譯期就已經生成瞭,其他方法在運行期生成。非私有的static方法可以用“類.方法名”調用。但是私有的static變量和方法都是不可能被調用的,雖然private static這種寫法很少見,但仍然存在,且編譯器不會報錯。題中static void method2() { }的權限是默認權限,所以可以用“類.方法名”來調用。如果題目中寫成private static void method2(){ }
3、那麼D選項也是錯誤的。
4、 小學語文畢業瞭再來出題!隻是說a是A類同包下的一個實例,那麼有關a的選項全是錯的。

2、Java中基本的編程單元為:

正確答案:A

A類

B 函數

C 變量

D 數據

題解:
1、java的基本編程單元是類,基本存儲單元是變量。
2、 沒有類就沒有函數
3、 Java的基本編程單位是類,基本存儲單元是變量

3、下列代碼的執行結果是:( )

public class Test3{


public static void main(String args){


System.out.println(100%3);


System.out.println(100%3.0);


}


}

正確答案:B

A 1和1

B 1和1.0

C 1.0和1

D 1.0和1.0

題解:
1、多種混合計算時,自動將所有數據類型轉換為容量最大的一種數據類型。所以都轉為float類型。
2、 修復後的答案是B 100對3取餘,兩者都是int型,所以結果也是int型,也就是1 100對3.0取餘,虛擬機會對100進行轉換,轉換成100.0,也就是float型,結果也就是float型,也就是1.0
3、 根據Java 語言規范(JLS) 中15.17.3 對 %運算的定義可以知 %是可以用於浮點數 因此是B。 In C and C++
4、 the remainder operator accepts only integral operands
5、 but in the Java programming language
6、 it also accepts floating-point operands. The result of a floating-point remainder operation is determined by the rules of IEEE 754 arithmetic: If either operand is NaN
7、 the result is NaN. If the result is not NaN
8、 the sign of the result equals the sign of the dividend. If the dividend is an infinity
9、 or the divisor is a zero
:、 or both
;、 the result is NaN. If the dividend is finite and the divisor is an infinity
<、 the result equals the dividend. If the dividend is a zero and the divisor is finite
=、 the result equals the dividend. In the remaining cases
、 where neither an infinity
?、 nor a zero
@、 nor NaN is involved
A、 the floating-point remainder r from the division of a dividend n by a divisor d is defined by the mathematical relation r = n – ( d ⋅ q ) where q is an integer that is negative only if n / d is negative and positive only if n / d is positive
B、 and whose magnitude is as large as possible without exceeding the magnitude of the true mathematical quotient of n and d . 參考地址:http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.17.3

4、給定以下JAVA代碼,這段代碼運行後輸出的結果是()

public class Test
{
public static int aMethod(int i)throws Exception
{
try{
return i / 10;
}
catch (Exception ex)
{
throw new Exception(“exception in a Method”);
} finally{
System.out.printf(“finally”);
}
}
public static void main(String args)
{
try
{
aMethod(0);
}
catch (Exception ex)
{
System.out.printf(“exception in main”);
}
System.out.printf(“finished”);
}
}

正確答案:B

A exception in main finished

B finally finished

C exception in main finally

D finally exception in main finished

題解:
1、 尼瑪,看成瞭10/0
2、 1、finally塊一定會執行,無論是否try…catch。 2、finally前有return,會先執行return語句,並保存下來,再執行finally塊,最後return。 3、finally前有return、finally塊中也有return,先執行前面的return,保存下來,再執行finally的return,覆蓋之前的結果,並返回。

5、以下哪一項正則能正確的匹配網址: http://www.bilibili.com/video/av21061574 ()

正確答案:B

A /^(https?:\/\/)?(a-zA-Z\d+).bilibili.com\/?video\/av(\D{1 ,8})\/?$/

B /^(http:\/\/)?(\w+)\.bilibili\.com\/?video\/av(\d{1 ,8})\/?$/

C /^(https?:\/\/)?(\w+)\.bilibili\.com\/?\w*$/

D /^(http:\/\/)?(a-zA-Z\d+).bilibili.com\/?video\/av\w*\/+$/

題解:
簡單的梳理一下這道題用到的正則表達式的知識點: 首先,^表示匹配輸入的開始,$表示匹配輸入的結束 每個選項從前向後看,http都能夠嚴格匹配 ?表示匹配某元素0次或1次,這裡四個選項都沒有問題,能夠匹配0次或1次字符s 接下來:嚴格匹配,\/\/嚴格匹配兩個// 接著往下看,[]表示字符集合,它用在正則表達式中表示匹配集合中的任一字符 A D 選項中的 [a-zA-Z\d] 表示匹配一個小寫字母 或者 大寫字母 或者 數字 B C 選項中的 \w 表示匹配字母數字或下劃線(註意這裡比A D中能多匹配下劃線類型) +表示匹配某元素1次或多次,到這裡四個選項都能夠完美匹配字符www .可以匹配除瞭換行符\n \r外的任何字符 接下來我們看選項A,bilibili com video av都嚴格匹配,而 \D 表示匹配一個非數字字符而非數字字符,av後的數字是無法匹配成功的,A錯誤 B選項,\d匹配數字,{m,n}表示最少匹配m次,最多匹配n次,\/?能匹配末尾的0個或1個/字符,B正確 C選項,*表示匹配某元素0次或多次,但 \w 並不能匹配字符 /,C錯誤 D選項,前面都對,錯在最後的\/+至少要匹配一個/,而原字符串最後並沒有/

6、下列關於異常處理的描述中,錯誤的是()。

正確答案:D

A 程序運行時異常由Java虛擬機自動進行處理

B 使用try-catch-finally語句捕獲異常

C 可使用throw語句拋出異常

D 捕獲到的異常隻能在當前方法中處理,不能在其他方法中處理

題解:
1、編譯時異常必須顯示處理,運行時異常交給虛擬機。 運行時異常可以不處理。當出現這樣的異常時,總是由虛擬機接管。比如我們從來沒有人去處理過Null Pointer Exception異常,它就是運行時異常,並且這種異常還是最常見的異常之一。出現運行時異常後,系統會把異常一直往上層拋,一直遇到處理代碼。如果沒有處理塊,到最上層,如果是多線程就由Thread.run()拋出,如果是單線程就被main()拋出。拋出之後,如果是線程,這個線程也就退出瞭。如果是主程序拋出的異常,整個程序也就退出瞭。運行時異常是Exception的子類,也有一般異常的特點,是可以被Catch塊處理的。隻不過往往不對它處理罷瞭。也就是說,如果不對運行時異常進行處理,那麼出現運行時異常之後,要麼是線程中止,要麼是主程序終止。
2、 捕獲到的異常不僅可以在當前方法中處理,還可以將異常拋給調用它的上一級方法來處理。
3、 D”捕獲到的異常隻能在當前方法中處理,不能在其他方法中處理”這句話是錯的,在實際應用中,當一個異常出現時,單靠某個方法無法完全處理該異常,必須由幾個方法協作才可以處理,這個時候同時使用catch和throw語句,捕獲異常後,隻對異常進行部分處理,還有些處理需要在該方法的調用者中才能完成,所以應該再次拋出異常,讓該方法的調用者也能捕獲到異常。(引用自《Java瘋狂講義》)

7、以下哪項不屬於java類加載過程?

正確答案:B

A 生成java.lang.Class對象

B int類型對象成員變量賦予默認值

C 執行static塊代碼

D 類方法解析

題解:
1、 類加載過程 類從被加載到虛擬機內存中開始,到卸載出內存為止,它的整個生命周期包括:加載(Loading)、驗證(Verification)、準備(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸載(Unloading)7個階段。其中準備、驗證、解析3個部分統稱為連接(Linking)。如圖所示。 加載、驗證、準備、初始化和卸載這5個階段的順序是確定的,類的加載過程必須按照這種順序按部就班地開始,而解析階段則不一定:它在某些情況下可以在初始化階段之後再開始,這是為瞭支持Java語言的運行時綁定(也稱為動態綁定或晚期綁定)。以下陳述的內容都已HotSpot為基準。 加載 在加載階段(可以參考java.lang.ClassLoader的loadClass()方法),虛擬機需要完成以下3件事情: 通過一個類的全限定名來獲取定義此類的二進制字節流(並沒有指明要從一個Class文件中獲取,可以從其他渠道,譬如:網絡、動態生成、數據庫等); 將這個字節流所代表的靜態存儲結構轉化為方法區的運行時數據結構; 在內存中生成一個代表這個類的java.lang.Class對象,作為方法區這個類的各種數據的訪問入口; 加載階段和連接階段(Linking)的部分內容(如一部分字節碼文件格式驗證動作)是交叉進行的,加載階段尚未完成,連接階段可能已經開始,但這些夾在加載階段之中進行的動作,仍然屬於連接階段的內容,這兩個階段的開始時間仍然保持著固定的先後順序。 驗證 驗證是連接階段的第一步,這一階段的目的是為瞭確保Class文件的字節流中包含的信息符合當前虛擬機的要求,並且不會危害虛擬機自身的安全。 驗證階段大致會完成4個階段的檢驗動作: 文件格式驗證:驗證字節流是否符合Class文件格式的規范;例如:是否以魔術0xCAFEBABE開頭、主次版本號是否在當前虛擬機的處理范圍之內、常量池中的常量是否有不被支持的類型。 元數據驗證:對字節碼描述的信息進行語義分析(註意:對比javac編譯階段的語義分析),以保證其描述的信息符合Java語言規范的要求;例如:這個類是否有父類,除瞭java.lang.Object之外。 字節碼驗證:通過數據流和控制流分析,確定程序語義是合法的、符合邏輯的。 符號引用驗證:確保解析動作能正確執行。 驗證階段是非常重要的,但不是必須的,它對程序運行期沒有影響,如果所引用的類經過反復驗證,那麼可以考慮采用-Xverifynone參數來關閉大部分的類驗證措施,以縮短虛擬機類加載的時間。 準備 準備階段是正式為類變量分配內存並設置類變量初始值的階段,這些變量所使用的內存都將在方法區中進行分配。這時候進行內存分配的僅包括類變量(被static修飾的變量),而不包括實例變量,實例變量將會在對象實例化時隨著對象一起分配在堆中。其次,這裡所說的初始值“通常情況”下是數據類型的零值,假設一個類變量的定義為: 1 publicstaticintvalue=123; 那變量value在準備階段過後的初始值為0而不是123.因為這時候尚未開始執行任何java方法,而把value賦值為123的putstatic指令是程序被編譯後,存放於類構造器()方法之中,所以把value賦值為123的動作將在初始化階段才會執行。 至於“特殊情況”是指:public static final int value=123,即當類字段的字段屬性是ConstantValue時,會在準備階段初始化為指定的值,所以標註為final之後,value的值在準備階段初始化為123而非0. 解析 解析階段是虛擬機將常量池內的符號引用替換為直接引用的過程。解析動作主要針對類或接口、字段、類方法、接口方法、方法類型、方法句柄和調用點限定符7類符號引用進行。 初始化 類初始化階段是類加載過程的最後一步,到瞭初始化階段,才真正開始執行類中定義的java程序代碼。在準備極端,變量已經付過一次系統要求的初始值,而在初始化階段,則根據程序猿通過程序制定的主管計劃去初始化類變量和其他資源,或者說:初始化階段是執行類構造器()方法的過程. ()方法是由編譯器自動收集類中的所有類變量的賦值動作和靜態語句塊static{}中的語句合並產生的,編譯器收集的順序是由語句在源文件中出現的順序所決定的,靜態語句塊隻能訪問到定義在靜態語句塊之前的變量,定義在它之後的變量,在前面的靜態語句塊可以賦值,但是不能訪問 原文鏈接 http://www.importnew.com/18548.html
2、 java類加載過程如圖所示

8、對於文件的描述正確的是( )

正確答案:D

A 文本文件是以“.txt”為後綴名的文件,其他後綴名的文件是二進制文件。

B File類是Java中對文件進行讀寫操作的基本類。

C 無論文本文件還是二進制文件,讀到文件末尾都會拋出EOFException異常。

D Java中對於文本文件和二進制文件,都可以當作二進制文件進行操作。

題解:
1、A.文件分為文本文件和二進制文件,計算機隻認識二進制,所以實際上都是二進制的不同解釋方式。文本文件是以不同編碼格式顯示的字符,例如Ascii、Unicode等,window中文本文件的後綴名有”.txt”
2、”.log”
3、各種編程語言的源碼文件等;二進制文件就是用文本文檔打開是看不懂亂碼,隻要能用文本打開的文件都可以算是文本文件,隻是顯示的結果不是你想要的,二進制文件隻有用特殊的應用才能讀懂的文件,例如”.png”
4、”.bmp”等,計算機中大部分的文件還是二進制文件。 B.File類是對文件整體或者文件屬性操作的類,例如創建文件、刪除文件、查看文件是否存在等功能,不能操作文件內容;文件內容是用IO流操作的。 C.當輸入過程中意外到達文件或流的末尾時,拋出EOFException異常
5、正常情況下讀取到文件末尾時,返回一個特殊值表示文件讀取完成,例如read()返回-1表示文件讀取完成。 D.上面A選項已經說瞭,不論是文本文件還是二進制文件,在計算機中都是以二進制形式存儲的,所以都當做二進制文件讀取。
6、 File類是 文件和目錄路徑名的抽象表示形式。
7、 D:正確 B:File類是java中文件和目錄路徑名的抽象表示形式。Java中對文件進行讀寫操作的基本類是IO類。 C:讀到文件末尾不會拋出異常。EOFException:當輸入過程中意外到達文件或流的末尾時,拋出此異常。

9、有關hashMap跟hashtable的區別,說法正確的是?

正確答案:BCD

A HashMap和Hashtable都實現瞭Map接口

B HashMap是非synchronized,而Hashtable是synchronized

C HashTable使用Enumeration,HashMap使用Iterator

D HashMap允許將 null 作為一個 entry 的 key 或者 value,而 Hashtable 不允許。

題解:
1、HashTable和HashMap區別 ①繼承不同。 public class Hashtable extends Dictionary implements Map public class HashMap extends AbstractMap implements Map ② Hashtable 中的方法是同步的,而HashMap中的方法在缺省情況下是非同步的。在多線程並發的環境下,可以直接使用Hashtable,但是要使用HashMap的話就要自己增加同步處理瞭。 ③ Hashtable中,key和value都不允許出現null值。 在HashMap中,null可以作為鍵,這樣的鍵隻有一個;可以有一個或多個鍵所對應的值為null。當get()方法返回null值時,即可以表示 HashMap中沒有該鍵,也可以表示該鍵所對應的值為null。因此,在HashMap中不能由get()方法來判斷HashMap中是否存在某個鍵, 而應該用containsKey()方法來判斷。 ④兩個遍歷方式的內部實現上不同。 Hashtable、HashMap都使用瞭 Iterator。而由於歷史原因,Hashtable還使用瞭Enumeration的方式 。 ⑤ 哈希值的使用不同,HashTable直接使用對象的hashCode。而HashMap重新計算hash值。 ⑥ Hashtable和HashMap它們兩個內部實現方式的數組的初始大小和擴容的方式。HashTable中hash數組默認大小是11,增加的方式是 old*2+1。HashMap中hash數組的默認大小是16,而且一定是2的指數。
2、 A正確。Map是一個接口,hashtable
3、hashmap都是它的實現。 B正確。由於Hashtable是線程安全的也是synchronized,所以在單線程環境下它比HashMap要慢。如果你不需要同步,隻需要單一線程,那麼使用HashMap性能要好過Hashtable。 C正確。 HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以當有其它線程改變瞭HashMap的結構(增加或者移除元素),將會拋出ConcurrentModificationException,但迭代器本身的remove()方法移除元素則不會拋出ConcurrentModificationException異常。但這並不是一個一定發生的行為,要看JVM。這條同樣也是Enumeration和Iterator的區別。 D正確。 哈希值的使用不同,HashTable直接使用對象的hashCode,代碼是這樣的: int hash = key.hashCode(); int index = (hash & 0x7FFFFFFF) % tab.length; 而HashMap重新計算hash值,而且用與代替求模: int hash = hash(k); int i = indexFor(hash
4、 table.length);
5、 選ABCD,下面是直接總結的,有個地方寫錯瞭Hashtable的默認長度是11不是16。

10、java中 String str = “hello world”下列語句錯誤的是?

正確答案:ABC

A str+=’ a’

B int strlen = str.length

C str=100

D str=str+100

題解:
1、str += ‘a’ 和 str +=“a”都是對的,但是如果a前面加一個空格,那麼隻能用雙引號瞭。代表字符串
2、 數組有length屬性,字符串隻有length()方法
3、 ABC在java中會報錯,D可以正常運行
4、 所以答案是ABC. A. ‘a’是字符
5、’ a’這個是空格和a,必須要用” a”才可以; B.String有length()方法 C.int 無法直接轉成String類型 D.尾部添加字符串”100“

答案匯總:

1、正確答案:C

2、正確答案:A

3、正確答案:B

4、正確答案:B

5、正確答案:B

6、正確答案:D

7、正確答案:B

8、正確答案:D

9、正確答案:BCD

10、正確答案:ABC

總結

本篇文章就到這裡瞭,希望能給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!

推薦閱讀: