Java日常練習題,每天進步一點點(63)
1、Java Application 源程序的主類是指包含有( )方法的類。
正確答案:A
A public static void main方法
B toString方法
C init方法
D actionPerfromed方法
題解:
1、java程序種類: 1.內嵌於web文件中,有瀏覽器觀看的applet 2.可獨立運行的application 3.服務器端的servlets
2、 一個類的內部可以有多個方法名為main的方法啊,是有定義為 public static void的main方法才是主類吧
3、 已經看瞭解釋
2、如果定義一種表達式結構:(+ 6 3)的值為9,(- 6 3)的值為3,( * 6 3)的值為18,( / 6 3)的值為2;那麼對於表達式( * (- 16 (*3 2 2 )) (+ 5 (/ 6 (- 5 3))))輸出的結果為____。
正確答案:D
A 44
B 40
C 40
D 32
E 24
F 21
題解:
1、 這個和學過數據結構沒有太大關系,當然做過這類題的人一瞬間就懂瞭,我數據結構已經很多年沒看瞭。有的人之所以沒看懂,我也是看瞭好久才明白,是因為沒看懂題目的邏輯關系。下面我來通俗的講一下: 題目中規定(+6 3)=9何解?其真實含義就是往棧中存瞭三個值,符號為加,於是6+3就等於9瞭。以此類推( *6 3)自然就是18瞭。
3、給出以下代碼
public class TestObj{ public static void main(String args){ Object o=new Object(){ public boolean equals(Object obj){ return true; } }; System.out.println(o.equals(“Fred”)); } }
請給出結果:()
正確答案:B
A 運行時拋出異常
B true
C Fred
D 第三行編譯錯誤
題解:
1、 這是匿名類 格式是:new 父類/接口 () {定義成員或覆蓋方法} 使用場景:隻使用一次時。
4、當編譯並運行下面程序時會發生什麼結果()
public class Bground extends Thread{ public static void main(String argv){ Bground b = new Bground(); b.run(); } public void start(){ for(int i=0;i<10;i++){ System.out.println("Value of i = "+i); } } }
正確答案:D
A 編譯錯誤,指明run方法沒有定義
B 運行錯誤,隻鞥呢run方法沒有定義
C 編譯通過並輸出0到9
D 編譯通過,但無輸出
題解:
1、選D 對於線程而言,start是讓線程從new變成runnable。run方法才是執行體的入口。 但是在Thread中,run方法是個空方法,沒有具體實現。 Bground繼承瞭Thread,但是沒有重寫run方法,那麼調用run方法肯定是無輸出。
5、對於文件的描述正確的是( )
正確答案: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:當輸入過程中意外到達文件或流的末尾時,拋出此異常。
6、以下代碼執行的結果顯示是多少( )?
public class Demo { class Super { int flag = 1; Super() { test(); } void test() { System.out.println("Super.test() flag=" + flag); } } class Sub extends Super { Sub(int i) { flag = i; System.out.println("Sub.Sub()flag=" + flag); } void test() { System.out.println("Sub.test()flag=" + flag); } } public static void main(String args) { new Demo().new Sub(5); } }
正確答案:A
A Sub.test() flag=1
Sub.Sub() flag=5
B Sub.Sub() flag=5
Sub.test() flag=5
C Sub.test() flag=0
Sub.Sub() flag=5
D Super.test() flag=1
Sub.Sub() flag=5
題解:
1、在繼承中代碼的執行順序為:
1.父類靜態對象,父類靜態代碼塊
2.子類靜態對象,子類靜態代碼塊
3.父類非靜態對象,父類非靜態代碼塊
4.父類構造函數
5.子類非靜態對象,子類非靜態代碼塊
6.子類構造函數
對於本題來說:在隻想new Sub(5)的時候,父類先初始化瞭 int flag = 1,然後執行父類的構造函數Super(),父類構造函數中執行的test()方法,因子類是重寫瞭test()方法的,因此父類構造函數中的test()方法實際執行的是子類的test()方法,所以輸出為Sub.test() flag=1,接著執行子類構造函數Sub(5) 將flag賦值為5,因此輸出結果Sub.Sub() flag=5。最終選擇瞭A。
2、
1.首先調用父類構造方法,即super()
2.調用test()方法。
3.由於在子類sub()中重寫瞭test()方法,所以調用子類test()
4.輸出Sub.test() flag=1
5.調用sub的有參構造方法
6.輸出Sub.Sub() flag=5 重點在於要時刻記得子類重寫父類方法,調用時會調用子類重寫之後的方法 當然,這一切的前提都是 實例化子類對象
7、以下哪幾個是java中的集合類型?
正確答案:ABD
A Vector
B Set
C String
D List
題解:
1、 Java中的集合類型:Vector、Set、List
8、Java 多線程有幾種實現方法?( )
正確答案:AB
A 繼承Thread類
B 實現Runnable接口
C 實現Thread接口
D 以上都不正確
題解:
1、實現多線程的方法: 1.繼承Thread類 2.實現Runnable接口 3.實現Callable接口
2、 實現多線程的方法: 1.繼承Thread類 2.實現Runnable接口 3.實現Callable接口
3、然後使用 FutureTask包裝,因為Callable接口沒有實現Runnable接口不能做為Thread的target,而FutureTask是在Java程序中可以取消的異步運算,有可以開始,取消運算,查詢運算是否結束,獲得查詢結果的功能,特別註意的是,如果查詢結果時,運算還沒完成則會阻塞線程。 4.使用,java.util.current.ThreadPoolExecutor來獲取線程,執行多線程
4、 Java多線程實現方式主要有四種:繼承Thread類、實現Runnable接口、實現Callable接口通過FutureTask包裝器來創建Thread線程、使用ExecutorService、Callable、Future實現有返回結果的多線程。 其中前兩種方式線程執行完後都沒有返回值,後兩種是帶返回值的。
9、下面哪些具體實現類可以用於存儲鍵,值對,並且方法調用提供瞭基本的多線程安全支持:()
正確答案:AE
A java.util.ConcurrentHashMap
B java.util.Map
C java.util.TreeMap
D java.util.SortMap
E java.util.Hashtable
F java.util.HashMap
題解:
1、Hashtable的方法都是synchrnized修飾的線程安全,ConcurrentHashMap並發容器,JDK7采用分段鎖,JDK8采用CAS算法,線程安全,建議使用,Connections工具類提供瞭一個方法synchrnizedMap可以把Map同步,本質就是給每一個方法加上synchrnized關鍵字進行同步
2、 Hashtable是線程安全的哈希表,它是通過synchronized來保證線程安全的;即,多線程通過同一個“對象的同步鎖”來實現並發控制。Hashtable在線程競爭激烈時,效率比較低(此時建議使用ConcurrentHashMap)。當一個線程訪問Hashtable的同步方法時,其它線程如果也在訪問Hashtable的同步方法時,可能會進入阻塞狀態。 Collections.synchronizedMap()使用瞭synchronized同步關鍵字來保證對Map的操作是線程安全的。 ConcurrentHashMap是線程安全的哈希表。在JDK1.7中它是通過“鎖分段”來保證線程安全的,本質上也是一個“可重入的互斥鎖”(ReentrantLock)。多線程對同一個片段的訪問,是互斥的;但是,對於不同片段的訪問,卻是可以同步進行的。在JDK1.8中是通過使用CAS原子更新、volatile關鍵字、synchronized可重入鎖實現的。
3、 完美的避開瞭正確答案
10、以下關於對象序列化描述正確的是
正確答案:CD
A 使用FileOutputStream可以將對象進行傳輸
B 使用PrintWriter可以將對象進行傳輸
C 使用transient修飾的變量不會被序列化
D 對象序列化的所屬類需要實現Serializable接口
題解:
1、 1、答案應該是C、D。
2、能夠對對象進行傳輸的貌似隻有ObjectOutputStream和ObjectInputStream這些以Object開頭的流對象。 3、D項繼承Seriallizable接口是經常見到的,這毋庸置疑。
4、transient 修飾的變量在對象串化的時侯並不會將所賦值的值保存到傳中,串化的對象從磁盤讀取出來仍然是null。
5、這值得說下Volatile這個修飾符,它是針對多線程情況下出現的。當線程讀取它修飾的變量時,都會強迫從主存中重新讀取。
答案匯總:
1、正確答案:A
2、正確答案:D
3、正確答案:B
4、正確答案:D
5、正確答案:D
6、正確答案:A
7、正確答案:ABD
8、正確答案:AB
9、正確答案:AE
10、正確答案:CD
總結
本片文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!
推薦閱讀:
- Java中ConcurrentHashMap是如何實現線程安全
- Java基礎之多線程的三種實現方式
- Java使用Runnable和Callable實現多線程的區別詳解
- 新手初學Java網絡編程
- 一篇文章帶你入門java多線程