Java日常練習題,每天進步一點點(60)
承蒙各位厚愛,我們一起每天進步一點點!(鼠標選中空白處查看答案)
1、假設(shè) A 類有如下定義,設(shè) a 是 A 類同一個包下的一個實例,下列語句調(diào)用哪個是錯誤的?()
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、非靜態(tài)方法只能通過實例對象來調(diào)用,不能直接通過類名調(diào)用。靜態(tài)方法(static)才能通過類名直接調(diào)用.
2、 類中變量:除了private權(quán)限外,其他權(quán)限的變量(沒有表示默認default),均可以用“對象.變量名”來調(diào)用。對于private變量,即使使用static,也不能用“類.變量名”來調(diào)用私有變量。只能通過類中的public get()方法來調(diào)用。 類中方法:除了private權(quán)限外,其他權(quán)限的方法(沒有表示默認default),均可以用“對象.方法名”來調(diào)用。private方法可以用java反射機制調(diào)用。當然如果用 private修飾方法,該方法只在類的內(nèi)部調(diào)用。其中比較著名的就是單例模式中的私有構(gòu)造方法。 static屬性:static方法在編譯期就已經(jīng)生成了,其他方法在運行期生成。非私有的static方法可以用“類.方法名”調(diào)用。但是私有的static變量和方法都是不可能被調(diào)用的,雖然private static這種寫法很少見,但仍然存在,且編譯器不會報錯。題中static void method2() { }的權(quán)限是默認權(quán)限,所以可以用“類.方法名”來調(diào)用。如果題目中寫成private static void method2(){ }
3、那么D選項也是錯誤的。
4、 小學(xué)語文畢業(yè)了再來出題!只是說a是A類同包下的一個實例,那么有關(guān)a的選項全是錯的。
2、Java中基本的編程單元為:
正確答案:A
A類
B 函數(shù)
C 變量
D 數(shù)據(jù)
題解:
1、java的基本編程單元是類,基本存儲單元是變量。
2、 沒有類就沒有函數(shù)
3、 Java的基本編程單位是類,基本存儲單元是變量
3、下列代碼的執(zhí)行結(jié)果是:( )
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、多種混合計算時,自動將所有數(shù)據(jù)類型轉(zhuǎn)換為容量最大的一種數(shù)據(jù)類型。所以都轉(zhuǎn)為float類型。
2、 修復(fù)后的答案是B 100對3取余,兩者都是int型,所以結(jié)果也是int型,也就是1 100對3.0取余,虛擬機會對100進行轉(zhuǎn)換,轉(zhuǎn)換成100.0,也就是float型,結(jié)果也就是float型,也就是1.0
3、 根據(jù)Java 語言規(guī)范(JLS) 中15.17.3 對 %運算的定義可以知 %是可以用于浮點數(shù) 因此是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代碼,這段代碼運行后輸出的結(jié)果是()
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塊一定會執(zhí)行,無論是否try…catch。 2、finally前有return,會先執(zhí)行return語句,并保存下來,再執(zhí)行finally塊,最后return。 3、finally前有return、finally塊中也有return,先執(zhí)行前面的return,保存下來,再執(zhí)行finally的return,覆蓋之前的結(jié)果,并返回。
5、以下哪一項正則能正確的匹配網(wǎng)址: 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*\/+$/
題解:
簡單的梳理一下這道題用到的正則表達式的知識點: 首先,^表示匹配輸入的開始,$表示匹配輸入的結(jié)束 每個選項從前向后看,http都能夠嚴格匹配 ?表示匹配某元素0次或1次,這里四個選項都沒有問題,能夠匹配0次或1次字符s 接下來:嚴格匹配,\/\/嚴格匹配兩個// 接著往下看,[]表示字符集合,它用在正則表達式中表示匹配集合中的任一字符 A D 選項中的 [a-zA-Z\d] 表示匹配一個小寫字母 或者 大寫字母 或者 數(shù)字 B C 選項中的 \w 表示匹配字母數(shù)字或下劃線(注意這里比A D中能多匹配下劃線類型) +表示匹配某元素1次或多次,到這里四個選項都能夠完美匹配字符www .可以匹配除了換行符\n \r外的任何字符 接下來我們看選項A,bilibili com video av都嚴格匹配,而 \D 表示匹配一個非數(shù)字字符而非數(shù)字字符,av后的數(shù)字是無法匹配成功的,A錯誤 B選項,\d匹配數(shù)字,{m,n}表示最少匹配m次,最多匹配n次,\/?能匹配末尾的0個或1個/字符,B正確 C選項,*表示匹配某元素0次或多次,但 \w 并不能匹配字符 /,C錯誤 D選項,前面都對,錯在最后的\/+至少要匹配一個/,而原字符串最后并沒有/
6、下列關(guān)于異常處理的描述中,錯誤的是()。
正確答案:D
A 程序運行時異常由Java虛擬機自動進行處理
B 使用try-catch-finally語句捕獲異常
C 可使用throw語句拋出異常
D 捕獲到的異常只能在當前方法中處理,不能在其他方法中處理
題解:
1、編譯時異常必須顯示處理,運行時異常交給虛擬機。 運行時異常可以不處理。當出現(xiàn)這樣的異常時,總是由虛擬機接管。比如我們從來沒有人去處理過Null Pointer Exception異常,它就是運行時異常,并且這種異常還是最常見的異常之一。出現(xiàn)運行時異常后,系統(tǒng)會把異常一直往上層拋,一直遇到處理代碼。如果沒有處理塊,到最上層,如果是多線程就由Thread.run()拋出,如果是單線程就被main()拋出。拋出之后,如果是線程,這個線程也就退出了。如果是主程序拋出的異常,整個程序也就退出了。運行時異常是Exception的子類,也有一般異常的特點,是可以被Catch塊處理的。只不過往往不對它處理罷了。也就是說,如果不對運行時異常進行處理,那么出現(xiàn)運行時異常之后,要么是線程中止,要么是主程序終止。
2、 捕獲到的異常不僅可以在當前方法中處理,還可以將異常拋給調(diào)用它的上一級方法來處理。
3、 D"捕獲到的異常只能在當前方法中處理,不能在其他方法中處理"這句話是錯的,在實際應(yīng)用中,當一個異常出現(xiàn)時,單靠某個方法無法完全處理該異常,必須由幾個方法協(xié)作才可以處理,這個時候同時使用catch和throw語句,捕獲異常后,只對異常進行部分處理,還有些處理需要在該方法的調(diào)用者中才能完成,所以應(yīng)該再次拋出異常,讓該方法的調(diào)用者也能捕獲到異常。(引用自《Java瘋狂講義》)
7、以下哪項不屬于java類加載過程?
正確答案:B
A 生成java.lang.Class對象
B int類型對象成員變量賦予默認值
C 執(zhí)行static塊代碼
D 類方法解析
題解:
1、 類加載過程 類從被加載到虛擬機內(nèi)存中開始,到卸載出內(nèi)存為止,它的整個生命周期包括:加載(Loading)、驗證(Verification)、準備(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸載(Unloading)7個階段。其中準備、驗證、解析3個部分統(tǒng)稱為連接(Linking)。如圖所示。 加載、驗證、準備、初始化和卸載這5個階段的順序是確定的,類的加載過程必須按照這種順序按部就班地開始,而解析階段則不一定:它在某些情況下可以在初始化階段之后再開始,這是為了支持Java語言的運行時綁定(也稱為動態(tài)綁定或晚期綁定)。以下陳述的內(nèi)容都已HotSpot為基準。 加載 在加載階段(可以參考java.lang.ClassLoader的loadClass()方法),虛擬機需要完成以下3件事情: 通過一個類的全限定名來獲取定義此類的二進制字節(jié)流(并沒有指明要從一個Class文件中獲取,可以從其他渠道,譬如:網(wǎng)絡(luò)、動態(tài)生成、數(shù)據(jù)庫等); 將這個字節(jié)流所代表的靜態(tài)存儲結(jié)構(gòu)轉(zhuǎn)化為方法區(qū)的運行時數(shù)據(jù)結(jié)構(gòu); 在內(nèi)存中生成一個代表這個類的java.lang.Class對象,作為方法區(qū)這個類的各種數(shù)據(jù)的訪問入口; 加載階段和連接階段(Linking)的部分內(nèi)容(如一部分字節(jié)碼文件格式驗證動作)是交叉進行的,加載階段尚未完成,連接階段可能已經(jīng)開始,但這些夾在加載階段之中進行的動作,仍然屬于連接階段的內(nèi)容,這兩個階段的開始時間仍然保持著固定的先后順序。 驗證 驗證是連接階段的第一步,這一階段的目的是為了確保Class文件的字節(jié)流中包含的信息符合當前虛擬機的要求,并且不會危害虛擬機自身的安全。 驗證階段大致會完成4個階段的檢驗動作: 文件格式驗證:驗證字節(jié)流是否符合Class文件格式的規(guī)范;例如:是否以魔術(shù)0xCAFEBABE開頭、主次版本號是否在當前虛擬機的處理范圍之內(nèi)、常量池中的常量是否有不被支持的類型。 元數(shù)據(jù)驗證:對字節(jié)碼描述的信息進行語義分析(注意:對比javac編譯階段的語義分析),以保證其描述的信息符合Java語言規(guī)范的要求;例如:這個類是否有父類,除了java.lang.Object之外。 字節(jié)碼驗證:通過數(shù)據(jù)流和控制流分析,確定程序語義是合法的、符合邏輯的。 符號引用驗證:確保解析動作能正確執(zhí)行。 驗證階段是非常重要的,但不是必須的,它對程序運行期沒有影響,如果所引用的類經(jīng)過反復(fù)驗證,那么可以考慮采用-Xverifynone參數(shù)來關(guān)閉大部分的類驗證措施,以縮短虛擬機類加載的時間。 準備 準備階段是正式為類變量分配內(nèi)存并設(shè)置類變量初始值的階段,這些變量所使用的內(nèi)存都將在方法區(qū)中進行分配。這時候進行內(nèi)存分配的僅包括類變量(被static修飾的變量),而不包括實例變量,實例變量將會在對象實例化時隨著對象一起分配在堆中。其次,這里所說的初始值“通常情況”下是數(shù)據(jù)類型的零值,假設(shè)一個類變量的定義為: 1 publicstaticintvalue=123; 那變量value在準備階段過后的初始值為0而不是123.因為這時候尚未開始執(zhí)行任何java方法,而把value賦值為123的putstatic指令是程序被編譯后,存放于類構(gòu)造器()方法之中,所以把value賦值為123的動作將在初始化階段才會執(zhí)行。 至于“特殊情況”是指:public static final int value=123,即當類字段的字段屬性是ConstantValue時,會在準備階段初始化為指定的值,所以標注為final之后,value的值在準備階段初始化為123而非0. 解析 解析階段是虛擬機將常量池內(nèi)的符號引用替換為直接引用的過程。解析動作主要針對類或接口、字段、類方法、接口方法、方法類型、方法句柄和調(diào)用點限定符7類符號引用進行。 初始化 類初始化階段是類加載過程的最后一步,到了初始化階段,才真正開始執(zhí)行類中定義的java程序代碼。在準備極端,變量已經(jīng)付過一次系統(tǒng)要求的初始值,而在初始化階段,則根據(jù)程序猿通過程序制定的主管計劃去初始化類變量和其他資源,或者說:初始化階段是執(zhí)行類構(gòu)造器()方法的過程. ()方法是由編譯器自動收集類中的所有類變量的賦值動作和靜態(tài)語句塊static{}中的語句合并產(chǎn)生的,編譯器收集的順序是由語句在源文件中出現(xiàn)的順序所決定的,靜態(tài)語句塊只能訪問到定義在靜態(tài)語句塊之前的變量,定義在它之后的變量,在前面的靜態(tài)語句塊可以賦值,但是不能訪問 原文鏈接 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、各種編程語言的源碼文件等;二進制文件就是用文本文檔打開是看不懂亂碼,只要能用文本打開的文件都可以算是文本文件,只是顯示的結(jié)果不是你想要的,二進制文件只有用特殊的應(yīng)用才能讀懂的文件,例如".png"
4、".bmp"等,計算機中大部分的文件還是二進制文件。 B.File類是對文件整體或者文件屬性操作的類,例如創(chuàng)建文件、刪除文件、查看文件是否存在等功能,不能操作文件內(nèi)容;文件內(nèi)容是用IO流操作的。 C.當輸入過程中意外到達文件或流的末尾時,拋出EOFException異常
5、正常情況下讀取到文件末尾時,返回一個特殊值表示文件讀取完成,例如read()返回-1表示文件讀取完成。 D.上面A選項已經(jīng)說了,不論是文本文件還是二進制文件,在計算機中都是以二進制形式存儲的,所以都當做二進制文件讀取。
6、 File類是 文件和目錄路徑名的抽象表示形式。
7、 D:正確 B:File類是java中文件和目錄路徑名的抽象表示形式。Java中對文件進行讀寫操作的基本類是IO類。 C:讀到文件末尾不會拋出異常。EOFException:當輸入過程中意外到達文件或流的末尾時,拋出此異常。
9、有關(guān)hashMap跟hashtable的區(qū)別,說法正確的是?
正確答案:BCD
A HashMap和Hashtable都實現(xiàn)了Map接口
B HashMap是非synchronized,而Hashtable是synchronized
C HashTable使用Enumeration,HashMap使用Iterator
D HashMap允許將 null 作為一個 entry 的 key 或者 value,而 Hashtable 不允許。
題解:
1、HashTable和HashMap區(qū)別 ①繼承不同。 public class Hashtable extends Dictionary implements Map public class HashMap extends AbstractMap implements Map ② Hashtable 中的方法是同步的,而HashMap中的方法在缺省情況下是非同步的。在多線程并發(fā)的環(huán)境下,可以直接使用Hashtable,但是要使用HashMap的話就要自己增加同步處理了。 ③ Hashtable中,key和value都不允許出現(xiàn)null值。 在HashMap中,null可以作為鍵,這樣的鍵只有一個;可以有一個或多個鍵所對應(yīng)的值為null。當get()方法返回null值時,即可以表示 HashMap中沒有該鍵,也可以表示該鍵所對應(yīng)的值為null。因此,在HashMap中不能由get()方法來判斷HashMap中是否存在某個鍵, 而應(yīng)該用containsKey()方法來判斷。 ④兩個遍歷方式的內(nèi)部實現(xiàn)上不同。 Hashtable、HashMap都使用了 Iterator。而由于歷史原因,Hashtable還使用了Enumeration的方式 。 ⑤ 哈希值的使用不同,HashTable直接使用對象的hashCode。而HashMap重新計算hash值。 ⑥ Hashtable和HashMap它們兩個內(nèi)部實現(xiàn)方式的數(shù)組的初始大小和擴容的方式。HashTable中hash數(shù)組默認大小是11,增加的方式是 old*2+1。HashMap中hash數(shù)組的默認大小是16,而且一定是2的指數(shù)。
2、 A正確。Map是一個接口,hashtable
3、hashmap都是它的實現(xiàn)。 B正確。由于Hashtable是線程安全的也是synchronized,所以在單線程環(huán)境下它比HashMap要慢。如果你不需要同步,只需要單一線程,那么使用HashMap性能要好過Hashtable。 C正確。 HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以當有其它線程改變了HashMap的結(jié)構(gòu)(增加或者移除元素),將會拋出ConcurrentModificationException,但迭代器本身的remove()方法移除元素則不會拋出ConcurrentModificationException異常。但這并不是一個一定發(fā)生的行為,要看JVM。這條同樣也是Enumeration和Iterator的區(qū)別。 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,下面是直接總結(jié)的,有個地方寫錯了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(chǎn)' 和 str +=“a"都是對的,但是如果a前面加一個空格,那么只能用雙引號了。代表字符串
2、 數(shù)組有l(wèi)ength屬性,字符串只有l(wèi)ength()方法
3、 ABC在java中會報錯,D可以正常運行
4、 所以答案是ABC. A. ‘a(chǎn)'是字符
5、' a'這個是空格和a,必須要用” a"才可以; B.String有l(wèi)ength()方法 C.int 無法直接轉(zhuǎn)成String類型 D.尾部添加字符串”100“
答案匯總:
1、正確答案:C
2、正確答案:A
3、正確答案:B
4、正確答案:B
5、正確答案:B
6、正確答案:D
7、正確答案:B
8、正確答案:D
9、正確答案:BCD
10、正確答案:ABC
總結(jié)
本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
SpringBoot+Quartz實現(xiàn)定時任務(wù)的代碼模版分享
quartz?是一款開源且豐富特性的Java?任務(wù)調(diào)度庫,用于實現(xiàn)任務(wù)調(diào)度和定時任務(wù),本文主要和大家分享一個SpringBoot整合Quartz實現(xiàn)定時任務(wù)的代碼模版,需要的可以參考一下2023-06-06SpringCloud Gateway自定義filter獲取body中的數(shù)據(jù)為空的問題
這篇文章主要介紹了SpringCloud Gateway自定義filter獲取body中的數(shù)據(jù)為空,本文給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10elasticsearch數(shù)據(jù)信息索引操作action?support示例分析
這篇文章主要為大家介紹了elasticsearch數(shù)據(jù)信息索引操作action?support示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-04-04基于RecyclerChart的KLine的繪制Scale詳解
這篇文章主要為大家詳細介紹了基于RecyclerChart實現(xiàn)KLine繪制Scale的相關(guān)資料,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習一下2023-03-03