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