㈠ 解答java筆試題
第一,談談final, finally, finalize的區別。 final?修飾符(關鍵字)如果一個類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個類不能既被聲明為 abstract的,又被聲明為final的。將變數或方法聲明為final,可以保證它們在使用中不被改變。被聲明為final的變數必須在聲明時給定初值,而在以後的引用中只能讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載finally?再異常處理時提供 finally 塊來執行任何清除操作。如果拋出一個異常,那麼相匹配的 catch 子句就會執行,然後控制就會進入 finally 塊(如果有的話)。 finalize?方法名。Java 技術允許使用 finalize() 方法在垃圾收集器將對象從內存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執行其他清理工作。finalize() 方法是在垃圾收集器刪除對象之前對這個對象調用的。 第二,Anonymous Inner Class (匿名內部類) 是否可以extends(繼承)其它類,是否可以implements(實現)interface(介面)? 匿名的內部類是沒有名字的內部類。不能extends(繼承) 其它類,但一個內部類可以作為一個介面,由另一個內部類實現。 第三,Static Nested Class 和 Inner Class的不同,說得越多越好(面試題有的很籠統)。 Nested Class (一般是C++的說法),Inner Class (一般是JAVA的說法)。Java內部類與C++嵌套類最大的不同就在於是否有指向外部的引用上。具體可見http: //www.frontfree.net/articles/services/view.asp?id=704&page=1 註: 靜態內部類(Inner Class)意味著1創建一個static內部類的對象,不需要一個外部類對象,2不能從一個static內部類的一個對象訪問一個外部類對象 第四,&和&&的區別。 &是位運算符。&&是布爾邏輯運算符。 第五,HashMap和Hashtable的區別。 都屬於Map介面的類,實現了將惟一鍵映射到特定的值上。 HashMap 類沒有分類或者排序。它允許一個 null 鍵和多個 null 值。 Hashtable 類似於 HashMap,但是不允許 null 鍵和 null 值。它也比 HashMap 慢,因為它是同步的。 第六,Collection 和 Collections的區別。 Collections是個java.util下的類,它包含有各種有關集合操作的靜態方法。 Collection是個java.util下的介面,它是各種集合結構的父介面。 第七,什麼時候用assert。 斷言是一個包含布爾表達式的語句,在執行這個語句時假定該表達式為 true。如果表達式計算為 false,那麼系統會報告一個 AssertionError。它用於調試目的: assert(a > 0); // throws an AssertionError if a <= 0 斷言可以有兩種形式: assert Expression1 ; assert Expression1 : Expression2 ; Expression1 應該總是產生一個布爾值。 Expression2 可以是得出一個值的任意表達式。這個值用於生成顯示更多調試信息的 String 消息。 斷言在默認情況下是禁用的。要在編譯時啟用斷言,需要使用 source 1.4 標記: javac -source 1.4 Test.java 要在運行時啟用斷言,可使用 -enableassertions 或者 -ea 標記。 要在運行時選擇禁用斷言,可使用 -da 或者 -disableassertions 標記。 要系統類中啟用斷言,可使用 -esa 或者 -dsa 標記。還可以在包的基礎上啟用或者禁用斷言。 可以在預計正常情況下不會到達的任何位置上放置斷言。斷言可以用於驗證傳遞給私有方法的參數。不過,斷言不應該用於驗證傳遞給公有方法的參數,因為不管是否啟用了斷言,公有方法都必須檢查其參數。不過,既可以在公有方法中,也可以在非公有方法中利用斷言測試後置條件。另外,斷言不應該以任何方式改變程序的狀態。 第八,GC是什麼? 為什麼要有GC? (基礎)。 GC是垃圾收集器。Java 程序員不用擔心內存管理,因為垃圾收集器會自動進行管理。要請求垃圾收集,可以調用下面的方法之一: System.gc() Runtime.getRuntime().gc() 第九,String s = new String( "xyz ");創建了幾個String Object? 兩個對象,一個是「xyx」,一個是指向「xyx」的引用對象s。 第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少? Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11; 第十一,short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯? short s1 = 1; s1 = s1 + 1;有錯,s1是short型,s1+1是int型,不能顯式轉化為short型。可修改為s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正確。 第十二,sleep() 和 wait() 有什麼區別? 搞線程的最愛 sleep()方法是使線程停止一段時間的方法。在sleep 時間間隔期滿後,線程不一定立即恢復執行。這是因為在那個時刻,其它線程可能正在運行而且沒有被調度為放棄執行,除非(a)「醒來」的線程具有更高的優先順序,(b)正在運行的線程因為其它原因而阻塞。 wait()是線程交互時,如果線程對一個同步對象x 發出一個wait()調用,該線程會暫停執行,被調對象進入等待狀態,直到被喚醒或等待時間到。 第十三,Java有沒有goto? Goto?java中的保留字,現在沒有在java中使用。 第十四,數組有沒有length()這個方法? String有沒有length()這個方法? 數組沒有length()這個方法,有length的屬性。 String有有length()這個方法。 第十五,Overload和Override的區別。Overloaded的方法是否可以改變返回值的類型? 方法的重寫Overriding和重載Overloading是Java多態性的不同表現。重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被「屏蔽」了。如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型。 第十六,Set里的元素是不能重復的,那麼用什麼方法來區分重復與否呢? 是用==還是equals()? 它們有何區別? Set里的元素是不能重復的,那麼用iterator()方法來區分重復與否。equals()是判讀兩個Set是否相等。 equals()和==方法決定引用值是否指向同一對象equals()在類中被覆蓋,為的是當兩個分離的對象的內容和類型相配的話,返回真值。 第十七,給我一個你最常見到的runtime exception。 ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, , DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException 第十八,error和exception有什麼區別? error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說內存溢出。不可能指望程序能處理這樣的情況。 exception 表示一種設計或實現問題。也就是說,它表示如果程序運行正常,從不會發生的情況。 第十九,List, Set, Map是否繼承自Collection介面? List,Set是 Map不是 第二十,abstract class和interface有什麼區別? 聲明方法的存在而不去實現它的類被叫做抽象類(abstract class),它用於要創建一個體現某些基本行為的類,並為該類聲明方法,但不能在該類中實現該類的情況。不能創建abstract 類的實例。然而可以創建一個變數,其類型是一個抽象類,並讓它指向具體子類的一個實例。不能有抽象構造函數或抽象靜態方法。Abstract 類的子類為它們父類中的所有抽象方法提供實現,否則它們也是抽象類為。取而代之,在子類中實現該方法。知道其行為的其它類可以在類中實現這些方法。 介面(interface)是抽象類的變體。在介面中,所有方法都是抽象的。多繼承性可通過實現這樣的介面而獲得。介面中的所有方法都是抽象的,沒有一個有程序體。介面只可以定義static final成員變數。介面的實現與子類相似,除了該實現類不能從介面定義中繼承行為。當類實現特殊介面時,它定義(即將程序體給予)所有這種介面的方法。然後,它可以在實現了該介面的類的任何對象上調用介面的方法。由於有抽象類,它允許使用介面名作為引用變數的類型。通常的動態聯編將生效。引用可以轉換到介面類型或從介面類型轉換,instanceof 運算符可以用來決定某對象的類是否實現了介面。 第二十一,abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized? 都不能 第二十二,介面是否可繼承介面? 抽象類是否可實現(implements)介面? 抽象類是否可繼承實體類(concrete class)? 介面可以繼承介面。抽象類可以實現(implements)介面,抽象類是否可繼承實體類,但前提是實體類必須有明確的構造函數。 第二十三,啟動一個線程是用run()還是start()? 啟動一個線程是調用start()方法,使線程所代表的虛擬處理機處於可運行狀態,這意味著它可以由JVM調度並執行。這並不意味著線程就會立即運行。run()方法可以產生必須退出的標志來停止一個線程。 第二十四,構造器Constructor是否可被override? 構造器Constructor不能被繼承,因此不能重寫Overriding,但可以被重載Overloading。 第二十五,是否可以繼承String類? String類是final類故不可以繼承。 第二十六,當一個線程進入一個對象的一個synchronized方法後,其它線程是否可進入此對象的其它方法? 不能,一個對象的一個synchronized方法只能由一個線程訪問。 第二十七,try {}里有一個return語句,那麼緊跟在這個try後的finally {}里的code會不會被執行,什麼時候被執行,在return前還是後? 會執行,在return前執行。 第二十八,編程題: 用最有效率的方法算出2乘以8等於幾? 有C背景的程序員特別喜歡問這種問題。 2 < < 3 第二十九,兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對? 不對,有相同的hash code。 第三十,當一個對象被當作參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這里到底是值傳遞還是引用傳遞? 是值傳遞。Java 編程語言只由值傳遞參數。當一個對象實例作為一個參數被傳遞到方法中時,參數的值就是對該對象的引用。對象的內容可以在被調用的方法中改變,但對象的引用是永遠不會改變的。 第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上? switch(expr1)中,expr1是一個整數表達式。因此傳遞給 switch 和 case 語句的參數應該是 int、 short、 char 或者 byte。long,string 都不能作用於swtich。 第三十二,編程題: 寫一個Singleton出來。 Singleton模式主要作用是保證在Java應用程序中,一個類Class只有一個實例存在。 一般Singleton模式通常有幾種種形式: 第一種形式: 定義一個類,它的構造函數為private的,它有一個static的private的該類變數,在類初始化時實例話,通過一個public的getInstance方法獲取對它的引用,繼而調用其中的方法。 public class Singleton { private Singleton(){} //在自己內部定義自己一個實例,是不是很奇怪? //注意這是private 只供內部調用 private static Singleton instance = new Singleton(); //這里提供了一個供外部訪問本class的靜態方法,可以直接訪問 public static Singleton getInstance() { return instance; } } 第二種形式: public class Singleton { private static Singleton instance = null; public static synchronized Singleton getInstance() { //這個方法比上面有所改進,不用每次都進行生成對象,只是第一次 //使用時生成實例,提高了效率! if (instance==null) instance=new Singleton(); return instance; } } 其他形式: 定義一個類,它的構造函數為private的,所有方法為static的。 一般認為第一種形式要更加安全些 第三十三 Hashtable和HashMap Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現 HashMap允許將null作為一個entry的key或者value,而Hashtable不允許 還有就是,HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因為contains方法容易讓人引起誤解。 最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,不需要自己為它的方法實現同步,而HashMap就必須為之提供外同步。 Hashtable和HashMap採用的hash/rehash演算法都大概一樣,所以性能不會有很大的差異。
㈡ java筆試題
首先答案是bde,Vector myVect是一個聲明,就是告訴java虛擬機,你聽好了,我要在棧上面分配一個Vector類型的變數,僅此而已,同時他占據四個位元組的空間,也就是java所謂的引用,他不同於c++的指針,
myVect = new Vector(); 就是在堆中創建了Vector對象,同時讓剛才聲明的引用指向他
在java中所有的對象都是在堆中創建的,函數中的局部變數在棧中分配空間,比如Vector myVect
㈢ 怎麼通過java筆試
1、聯系基礎
2、找本面試書
3、網上下筆試題做。。
good luck with you...
㈣ java面試和筆試
1、作用域public,private,protected,以及不寫時的區別
答:區別如下:
作用域當前類同一package 子孫類其他package
public √√√√
protected √√√×
friendly √√××
private√×××
不寫時默認為friendly
2、Anonymous Inner Class (匿名內部類) 是否可以extends(繼承)其它類,是否可以implements(實現)interface(介面)
答:匿名的內部類是沒有名字的內部類。不能extends(繼承) 其它類,但一個內部類可以作為一個介面,由另一個內部類實現
3、Static Nested Class 和 Inner Class的不同
答:Nested Class (一般是C++的說法),Inner Class (一般是JAVA的說法)。Java內部類與C++嵌套類最大的不同就在於是否有指向外部的引用上。註:靜態內部類(Inner Class)意味著1創建一個static內部類的對象,不需要一個外部類對象,2不能從一個static內部類的一個對象訪問一個外部類對象
4、&和&&的區別
答:&是位運算符,表示按位與運算,&&是邏輯運算符,表示邏輯與(and)
5、Collection 和 Collections的區別
答:Collection是集合類的上級介面,繼承與他的介面主要有Set 和List.
Collections是針對集合類的一個幫助類,他提供一系列靜態方法實現對各種集合的搜索、排序、線程安全化等操作
6、什麼時候用assert
答:assertion(斷言)在軟體開發中是一種常用的調試方式,很多開發語言中都支持這種機制。在實現中,assertion就是在程序中的一條語句,它對一個boolean表達式進行檢查,一個正確程序必須保證這個boolean表達式的值為true;如果該值為false,說明程序已經處於不正確的狀態下,系統將給出警告或退出。一般來說,assertion用於保證程序最基本、關鍵的正確性。assertion檢查通常在開發和測試時開啟。為了提高性能,在軟體發布後,assertion檢查通常是關閉的
7、String s = new String("xyz");創建了幾個String Object
答:兩個,一個字元對象,一個字元對象引用對象
8、Math.round(11.5)等於多少? Math.round(-11.5)等於多少
答: Math.round(11.5)==12;Math.round(-11.5)==-11;round方法返回與參數最接近的長整數,參數加1/2後求其floor
9、short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯
答:short s1 = 1; s1 = s1 + 1; (s1+1運算結果是int型,需要強制轉換類型)short s1 = 1; s1 += 1;(可以正確編譯)
10、Java有沒有goto
答:java中的保留字,現在沒有在java中使用
11、數組有沒有length()這個方法? String有沒有length()這個方法
答:數組沒有length()這個方法,有length的屬性。String有有length()這個方法
12、Overload和Override的區別。Overloaded的方法是否可以改變返回值的類型
答:方法的重寫Overriding和重載Overloading是Java多態性的不同表現。重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被"屏蔽"了。如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型
13、Set里的元素是不能重復的,那麼用什麼方法來區分重復與否呢? 是用==還是equals()? 它們有何區別
答:Set里的元素是不能重復的,那麼用iterator()方法來區分重復與否。equals()是判讀兩個Set是否相等
equals()和==方法決定引用值是否指向同一對象equals()在類中被覆蓋,為的是當兩個分離的對象的內容和類型相配的話,返回真值
14、給我一個你最常見到的runtime exception
答:常見的運行時異常有如下這些ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, , DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException
15、error和exception有什麼區別
答:error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說內存溢出。不可能指望程序能處理這樣的情況
exception 表示一種設計或實現問題。也就是說,它表示如果程序運行正常,從不會發生的情況
16、List, Set, Map是否繼承自Collection介面
答: List,Set是,Map不是
17、abstract class和interface有什麼區別
答:聲明方法的存在而不去實現它的類被叫做抽象類(abstract class),它用於要創建一個體現某些基本行為的類,並為該類聲明方法,但不能在該類中實現該類的情況。不能創建abstract 類的實例。然而可以創建一個變數,其類型是一個抽象類,並讓它指向具體子類的一個實例。不能有抽象構造函數或抽象靜態方法。Abstract 類的子類為它們父類中的所有抽象方法提供實現,否則它們也是抽象類為。取而代之,在子類中實現該方法。知道其行為的其它類可以在類中實現這些方法
介面(interface)是抽象類的變體。在介面中,所有方法都是抽象的。多繼承性可通過實現這樣的介面而獲得。介面中的所有方法都是抽象的,沒有一個有程序體。介面只可以定義static final成員變數。介面的實現與子類相似,除了該實現類不能從介面定義中繼承行為。當類實現特殊介面時,它定義(即將程序體給予)所有這種介面的方法。然後,它可以在實現了該介面的類的任何對象上調用介面的方法。由於有抽象類,它允許使用介面名作為引用變數的類型。通常的動態聯編將生效。引用可以轉換到介面類型或從介面類型轉換,instanceof運算符可以用來決定某對象的類是否實現了介面
㈤ java面試題有哪些
現在好多應屆畢生都想干java,其實面試題真的只是次要的,就拿我剛剛畢業那時候說吧,除了需要掌握好面試題的難點,自己本身基本技術還是要過硬的,因為現在的面試題並不是千篇一律的,你必須得有過硬的知識才能在關鍵時候站得住腳!這樣也能夠提高java面試成功率。有這樣的感想是因為之前在蘭賽普互聯網實訓基地學習java的原因吧,專業老師除了會教授每一位學員扎實的java知識以外,還會培養應聘才能,學到了很多東西~所以說參加Java面試需提前做好准備,畢竟機會只給有準備的人啊!順祝好運!
㈥ java考試
復習題
1、多線程有幾種實現方法,都是什麼?同步有幾種實現方法,都是什麼?
答:多線程有兩種實現方法,分別是繼承Thread類與實現Runnable介面
同步的實現方面有兩種,分別是synchronized,wait與notify
2、線程的基本概念、線程的基本狀態以及狀態之間的關系
答:線程指在程序執行過程中,能夠執行程序代碼的一個執行單位,每個程序至少都有一個線程,也就是程序本身。
Java中的線程有四種狀態分別是:運行、就緒、掛起、結束
3、sleep() 和 wait() 有什麼區別?
答:sleep是線程類(Thread)的方法,導致此線程暫停執行指定時間,給執行機會給其他線程,但是監控狀態依然保持,到時後會自動恢復。調用sleep不會釋放對象鎖。
wait是Object類的方法,對此對象調用wait方法導致本線程放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象發出notify方法(或notifyAll)後本線程才進入對象鎖定池准備獲得對象鎖進入運行狀態。
4、當一個線程進入一個對象的一個synchronized方法後,其它線程是否可進入此對象的其它方法?
答:不能,一個對象的一個synchronized方法只能由一個線程訪問。
5、Thread和Runnable有什麼不同?
JAVA線程式控制制著程序執行的主路徑。當你用java命令調用JVM時,JVM創建了一個隱式線程來執行main方法。Thread類提供了主線程調用其它線程並行運行的機制。
Runnable介面定義了一個能被Thread運行的類。實現Runnable的類只需要實行run方法。可以很靈活的擴展現在的已經繼承自其它父類的類。而thread則不可以,因為java只允許繼承一個父類。
6、啟動一個線程是用run()還是start()?
答:啟動一個線程是調用start()方法,使線程所代表的虛擬處理機處於可運行狀態,這意味著它可以由JVM調度並執行。這並不意味著線程就會立即運行。run()方法可以產生必須退出的標志來停止一個線程。
7、請說出你所知道的線程同步的方法。
答:wait():使一個線程處於等待狀態,並且釋放所持有的對象的lock。
sleep():使一個正在運行的線程處於睡眠狀態,是一個靜態方法,調用此方法要捕捉InterruptedException異常。
notify():喚醒一個處於等待狀態的線程,注意的是在調用此方法的時候,並不能確切的喚醒某一個等待狀態的線程,而是由JVM確定喚醒哪個線程,而且不是按優先順序。
Allnotity():喚醒所有處入等待狀態的線程,注意並不是給所有喚醒線程一個對象的鎖,而是讓它們競爭。
8、在Java中允許創建多線程應用程序的介面是()。
【A】Threadable 【B】Runnable
【C】Clonable 【D】以上均不是
【解析】A
9、在JAVA編程中,實現Runnable介面時必須實現的方法是()。
【A】wait() 【B】run()
【C】stop() 【D】start()
【解析】B
10、JAVA線程編程中,如果讓線程睡眠,可以用()方法實現。
【A】start() 【B】close();
【C】setDaemon(); 【D】sleep();
【解析】D
11、編譯運行下面的代碼會發生什麼
public class Test extends Thread {
private String sThreadName;
public static void main(String args[]) {
Test h = new Test();
h.go();
}
Test() {
}
Test(String s) {
sThreadName = s;
}
public String getThreadName() {
return sThreadName;
}
public void go() {
Test first = new Test("first");
first.start();
Test second = new Test("second");
second.start();
}
public void start() {
for (int i = 0; i < 2; i++) {
System.out.println(getThreadName() + i);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
System.out.println(e.getMessage());
}
}
}
}
【A】編譯錯誤
【B】輸出first0, second0, first1, second1
【C】輸出first0, first1, second0, second1
【D】運行時錯誤
答案:C。
12、編譯運行下面的代碼會發生什麼
public class Test {
public static void main(String argv[]) {
Pmcraven pm1 = new Pmcraven("one");
pm1.run();
Pmcraven pm2 = new Pmcraven("two");
pm2.run();
}
}
class Pmcraven extends Thread {
private String sTname = "";
Pmcraven(String s) {
sTname = s;
}
public void run() {
for (int i = 0; i < 2; i++) {
try {
sleep(1000);
} catch (InterruptedException e) {
}
yield();
System.out.println(sTname);
}
}
}
【A】編譯錯誤 【B】輸出One One Two Two
【C】輸出One Two One Two 【D】輸出One Two One Two
答案B
13、一個完整的URL地址由哪幾部分組成?
答:一個完整的URL由4部分組成:資源類型、存放資源的主機域名、資源文件名和埠。
其中:資源類型:指服務協議類型,如Web伺服器的http協議。
主機域名:一般給出伺服器主機的名稱或IP號。
資源文件名:給出要查詢的文件的相對路徑以及名稱。
埠:伺服器的整型埠號,通常只有使用非標准埠時才指定。
例如:http://192.168.1.220:80/index.html
其中:http是伺服器採用http協議、「192.168.1.220」是伺服器的IP號、「index.html」伺服器的根位置文件index.html、80為埠號。
14、建立Socket對象和ServerSocket對象的工作步驟分別是那些。
書籍P38-39
15、套接字包括( )
【A】埠號 【B】IP地址
【C】埠號和IP地址 【D】都不是
答案C
16、等待客戶端請求連接,伺服器可以使用的類是( )
【A】Socket 【B】ServerSocket
【C】Server 【D】URL
答案B
17、ServerSocket的accept()方法返回的對象類型是( )
【A】Socket 【B】ServerSocket
【C】Server 【D】URL
答案A
18、用來封裝計算機IP地址和域名的類是( )
【A】Socket 【B】InetAddress
【C】URLConnection 【D】URL
答案A
19、Java中的事件處理機制?
答:事件從事件源到監聽者的傳遞是通過對目標監聽者對象的Java 方法調用進行的。對每個明確的事件的發生,都相應地定義一個明確的Java 方法。這些方法都集中定義在事件監聽者介面(EventListener Interface)中,這個介面要繼承java.util.EventListener。實現了事件監聽者介面中一些或全部方法的類就是事件監聽者。伴隨著事件的發生,相應的狀態通常都封裝在事件狀態對象(Event State Object)中,該對象必須繼承自java.util.EventObject。事件狀態對象作為單參傳遞給應響應該事件的監聽者方法中。發出某種特定事件的事件源的標識是:遵從規定的設計格式為事件監聽者定義注冊方法,並接受對指定事件監聽者介面實例的引用。有時,事件監聽者不能直接實現事件監聽者介面,或者還有其它的額外動作時,就要在一個源與其它一個或多個監聽者之間插入一個事件適配器類的實例,來建立它們之間的聯系。
20、簡述適配器和監聽介面的區別。
21、下面( )方法用於獲得事件源。
【A】getEvent() 【B】getCommand()
【C】getText() 【D】getSource()
答案D
22、下述代碼中,如果單擊「TEST」按鈕,標准輸出的消息是( )
public class Exercise extends JFrame{
public Exercise(){
super("事件測試");
Button b=new Button("TEST ");
b.addMouseListener(new Tester());
this.add(b);
this.setSize(200,150);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
class Tester implements MouseListener{
public void actionPerformed(ActionEvent e){
System.out.println("按鈕發生動作");
}
public void mouseClicked(MouseEvent e){
System.out.println("按鈕被單擊");
}
public void mousePressed(MouseEvent e) { }
public void mouseReleased(MouseEvent e) { }
public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { }
}
【A】"按鈕發生動作" 【B】"按鈕被單擊"
【C】"按鈕發生動作"和"按鈕被單擊" 【D】以上都不對
答案B
23、試描述創建一個菜單的步驟。
書籍P95
24、簡述實現一個JDialog對話框的步驟。
書籍P104
25、在正則表達式中,( )符號用於匹配單個字元。
【A】. 【B】?
【C】* 【D】+
答案B
26、下面( )符號用於匹配一次或多次。
【A】. 【B】?
【C】* 【D】+
答案D
27、下述正則表達式為:
(\d{1,3}\.){3}\d{1,3}
給出正則表達式描述的匹配字元( )。
註:\d 匹配數字字元(0~9);{n}匹配確定的n次,n是一個非負整數
{n,m}最少匹配n次且最多匹配m次,m和n均為非負整數,其中n≤m
㈦ 請java高手說下如何通過java筆試!在線等!
額 根據經驗,出筆試題公司都是在裝B。。。進來馬上就能做,這樣的人老闆最喜歡了
㈧ 一道Java筆試題
首先,Comparable是一個介面(由interface就知道)。題目中說的是java提供了這個介面供程序員自定義兩個對象的比較規則,所以第一步解釋要自己寫一個類來實現這個介面,我寫的實現類如下:
class Ac implements Comparable
{
int ac;
int compareTo(Ac a)
{
if(this.ac>a.ac)
{
return 1;
}
else
{
if(this.ac<a.ac)
{
return -1;
}
else
{
return 0;
}
}
}
}
如上代碼就完成了一個Comparable介面的實現類,其實現了Coparable的抽象方法copareTo()方法,這是可以用這個類生成題目中要求的Comparable對象數組了,如生成一個數組:
Ac[] acc=new Ac[8];
為Acc數組進行賦值:
for(int i=0;i<8;i++)
{
acc[i].ac=i;
}
然後就是寫一個方法調用acc數組的compareTo方法對acc數組進行比較排序就可以了。compareTo方法已經給你重寫好了,接下來你自己寫一個方法吧。手打太累,話說好久不看編程,連冒泡排序都快忘記光了
㈨ java面試題及答案
JAVA 面試32問
第一, 談談final, finally, finalize的區別。 (最常被問到)
final修飾符(關鍵字)
如果一個類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個類不能既被聲明為abstract,又被聲明為final。將變數或方法聲明為final,可以保證它們在使用中不被改變。其初始化可以在兩個地方:一是其定義處,也就是說在final變數定義時直接給其賦值;二是在構造函數中。這兩個地方只能選其一,要麼在定義時給值,要麼在構造函數中給值,不能同時既在定義時給了值,又在構造函數中給另外的值,而在以後的引用中只能讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重寫(override)。
finally
在異常處理時提供finally塊來執行任何清除操作。如果拋出一個異常,那麼相匹配的catch子句就會執行,然後控制就會進入finally塊(如果有的話)。
finalize
方法名。Java 技術允許使用finalize()方法在垃圾收集器將對象從內存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。它是在Object類中定義的,因此所有的類都繼承了它。子類覆蓋finalize()方法以整理系統資源或者執行其他清理工作。finalize()方法是在垃圾收集器刪除對象之前對這個對象調用的。
第二,Anonymous Inner Class(匿名內部類) 是否可以extends(繼承)其它類,是否可以implements(實現)interface(介面)?
匿名的內部類是沒有名字的內部類。不能extends(繼承) 其它類,但一個內部類可以作為一個介面,由另一個內部類實現。
第三,Static Nested Class 和 Inner Class的不同,說得越多越好。(面試題有的很籠統)
Nested(嵌套)Class(一般是C++的說法)
nested class 是合成型聚集關系(Composite Aggregation) 的另一種表達方式,也就是說nested class也可以用Aggregation表達出來,但是,nested class更加精確地表達了一種專用的、緊耦合的關系,尤其在代碼生成時,nested class在Java中映射成inline class。比如,計算機專用開關電源類可以作為計算機類的nested class,但是,電池組類就不一定適合作為計算機類的nested class,因為,電池組類表述的是一個過於通用的對象,可能還被包含(Aggregation)於模型中的其他設備對象。class A nested in class B,則說明A是一個nested class,一般A是用來完成B中的某種重要功能。
Inner Class (一般是JAVA的說法)
Java內部類與C++嵌套類最大的不同就在於是否有指向外部的引用上。
靜態內部類(Inner Class)意味著a創建一個static內部類的對象,不需要一個外部類對象,b不能從一個static內部類的一個對象訪問一個外部類對象
第四,&和&&的區別。(這個問得很少)
&是位運算符。&可為位運算,也可為邏輯運算,看情況而定。&&是布爾邏輯運算符。
第五,HashMap和Hashtable的區別。(常問)
都屬於Map介面的類,實現了將惟一鍵映射到特定的值上。
HashMap 類沒有分類或者排序。它允許一個 null 鍵和多個 null 值。
Hashtable 類似於 HashMap,但是不允許 null 鍵和 null 值。它也比 HashMap 慢,因為它是同步的。
Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現。
HashMap允許將null作為一個entry的key或者value,而Hashtable不允許,還有就是,HashMap把Hashtable的contains方法去掉了,改成containsvalue(Returns true if this map maps one or more keys to the specified value)和containsKey(Returns true if this map contains a mapping for the specified key)。因為contains(Tests if some key maps into the specified value in this hashtable)方法容易讓人引起誤解。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,不需要自己為它的方法實現同步,而HashMap 就必須為之提供外同步。
Hashtable和HashMap採用的hash/rehash演算法都大概一樣,所以性能不會有很大的差異。
第六,Collection 和 Collections的區別。(你千萬別說一個是單數一個是復數)
Collections是個java.util下的類,它包含有各種有關集合操作的靜態方法。
Collection是個java.util下的介面,它是各種集合結構的父介面。
第七,什麼時候用assert。(API級的技術人員有可能會問這個)
斷言是一個包含布爾表達式的語句,在執行這個語句時假定該表達式為 true。如果表達式計算為 false,那麼系統會報告一個 Assertionerror。它用於調試目的:
assert(a > 0); // throws an Assertionerror if a <= 0
斷言可以有兩種形式:
assert Expression1 ;
assert Expression1 : Expression2 ;
Expression1 應該總是產生一個布爾值。
Expression2 可以是得出一個值的任意表達式。這個值用於生成顯示更多調試信息的 String 消息。
斷言在默認情況下是禁用的。要在編譯時啟用斷言,需要使用 source 1.4 標記:
javac -source 1.4 Test.java
要在運行時啟用斷言,可使用 -enableassertions 或者 -ea 標記。
要在運行時選擇禁用斷言,可使用 -da 或者 -disableassertions 標記。
要系統類中啟用斷言,可使用 -esa 或者 -dsa 標記。還可以在包的基礎上啟用或者禁用斷言。
可以在預計正常情況下不會到達的任何位置上放置斷言。斷言可以用於驗證傳遞給私有方法的參數。不過,斷言不應該用於驗證傳遞給公有方法的參數,因為不管是否啟用了斷言,公有方法都必須檢查其參數。不過,既可以在公有方法中,也可以在非公有方法中利用斷言測試後置條件。另外,斷言不應該以任何方式改變程序的狀態。
第八,GC是什麼?為什麼要有GC?(基礎)
GC是垃圾收集器。Java 程序員不用擔心內存管理,因為垃圾收集器會自動進行管理。要請求垃圾收集,可以調用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()
gc 雖可清理,但非立刻清理
第九,String s = new String("xyz");創建了幾個String Object?
兩個對象,一個是"xyx",一個是指向"xyx"的引用對象s。一個對象,一個對象引用。
第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;
第十一,short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯? ( 面試題都是很變態的,要做好受虐的准備)
short s1 = 1; s1 = s1 + 1;有錯,s1是short型,s1+1是int型,不能顯式轉化為short型。可修改為s1 =(short)(s1 + 1) 。
short s1 = 1; s1 += 1正確。
Byte a=1,b=1,bye c=a+b;錯誤,byte與byte,short與short運算返回值為int
第十二,sleep() 和 wait() 有什麼區別? (搞線程的最愛)
sleep()
是使線程停止一段時間的方法。在sleep 時間間隔期滿後,線程不一定立即恢復執行。這是因為在那個時刻,其它線程可能正在運行而且沒有被調度為放棄執行,除非(a)"醒來"的線程具有更高的優先順序 (b)正在運行的線程因為其它原因而阻塞。
wait()
是線程交互時,如果線程對一個同步對象x 發出一個wait()調用,該線程會暫停執行,被調對象進入等待狀態,直到被喚醒或等待時間到
第十三,Java有沒有goto?(很十三的問題,如果哪個面試的問到這個問題,我勸你還是別進這家公司)
Goto java中的保留字,現在沒有在java中使用。
第十四,數組有沒有length()這個方法? String有沒有length()這個方法?
數組沒有length()這個方法,有length的屬性。
String有有length()這個方法。
第十五,Overload和Override的區別。Overloaded的方法是否可以改變返回值的類型? (常問)
方法的重寫Overriding和重載Overloading是Java多態性的不同表現。
重寫Overriding是父類與子類之間多態性的一種表現,
重載Overloading是一個類中多態性的一種表現。
如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被"屏蔽"了。
如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型。但是不能通過返回值進行overload。
第十六,Set里的元素是不能重復的,那麼用什麼方法來區分重復與否呢? 是用==還是equals()? 它們有何區別?
Set里的元素是不能重復的,那麼用iterator()方法來區分重復與否。equals()是判讀兩個Set是否相等。
equals()和==方法決定引用值是否指向同一對象equals()在類中被覆蓋,為的是當兩個分離的對象的內容和類型相配的話,返回真值。
第十七,給我一個你最常見到的runtime exception。(如果你這個答不出來,面試的人會認為你沒有實際編程經驗)
ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, , DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException,
ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFORMatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException
第十八,error和exception有什麼區別?
error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說內存溢出。不可能指望程序能處理這樣的情況。
exception 表示一種設計或實現問題。也就是說,它表示如果程序運行正常,從不會發生的情況。
error--unchecked exception--checked
第十九,List, Set, Map是否繼承自Collection介面?
List,Set是Map不是(與Collection同級)
第二十,abstract class和interface有什麼區別? (常問)
聲明方法的存在而不去實現它的類被叫做抽象類(abstract class),它用於要創建一個體現某些基本行為的類,並為該類聲明方法,但不能在該類中實現該類的情況。不能創建abstract 類的實例。然而可以創建一個變數,其類型是一個抽象類,並讓它指向具體子類的一個實例。不能有抽象構造函數或抽象靜態方法。Abstract 類的子類為它們父類中的所有抽象方法提供實現,否則它們也是抽象類為。取而代之,在子類中實現該方法。知道其行為的其它類可以在類中實現這些方法。
介面(interface)是抽象類的變體。在介面中,所有方法都是抽象的。多繼承性可通過實現這樣的介面而獲得。介面中的所有方法都是抽象的,沒有一個有程序體。介面只可以定義static final成員變數。介面的實現與子類相似,除了該實現類不能從介面定義中繼承行為。當類實現特殊介面時,它定義(即將程序體給予)所有這種介面的方法。然後,它可以在實現了該介面的類的任何對象上調用介面的方法。由於有抽象類,它允許使用介面名作為引用變數的類型。通常的動態聯編將生效。引用可以轉換到介面類型或從介面類型轉換,instanceof 運算符可以用來決定某對象的類是否實現了介面。
第二十一,abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized?
都不能
第二十二,介面是否可繼承介面? 抽象類是否可實現(implements)介面? 抽象類是否可繼承實體類(concrete class)?
介面可以繼承介面。抽象類可以實現(implements)介面,抽象類是否可繼承實體類,但前提是實體類必須有明確的構造函數。
第二十三,啟動一個線程是用run()還是start()?
啟動一個線程是調用start()方法,使線程所代表的虛擬處理機處於可運行狀態,這意味著它可以由JVM調度並執行。這並不意味著線程就會立即運行。run()方法可以產生必須退出的標志來停止一個線程。
第二十四,構造器Constructor是否可被override?
構造器Constructor不能被繼承,因此不能重寫Overriding,但可以被重載Overloading。
第二十五,是否可以繼承String類?
String類是final類故不可以繼承
第二十六,當一個線程進入一個對象的一個synchronized方法後,其它線程是否可進入此對象的其它方法?
不能,一個對象的一個synchronized方法只能由一個線程訪問。
第二十七,try {}里有一個return語句,那麼緊跟在這個try後的finally {}里的code會不會被執行,什麼時候被執行,在return前還是後?
會執行,在return前執行。
第二十八,編程題: 用最有效率的方法算出2乘以8等於幾?(有C背景的程序員特別喜歡問這種問題)
2 << 3
第二十九,兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對?
不對,有相同的hash code。看你的對象類型了。
第三十,當一個對象被當作參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這里到底是值傳遞還是引用傳遞?
是值傳遞。Java 編程語言只由值傳遞參數。當一個對象實例作為一個參數被傳遞到方法中時,參數的值就是對該對象的引用。對象的內容可以在被調用的方法中改變,但對象的引用是永遠不會改變的。
第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
switch(expr1)中,expr1是一個整數表達式。因此傳遞給 switch 和 case 語句的參數應該是 int、 short、 char 或者 byte。long,string 都不能作用於swtich。
Ps:在Java7中String可以用在switch中
第三十二,編程題: 寫一個Singleton出來。
Singleton模式主要作用是保證在Java應用程序中,一個類Class只有一個實例存在。
一般Singleton模式通常有幾種種形式:
第一種形式: 定義一個類,它的構造函數為private的,它有一個static的private的該類變數,在類初始化時實例話,通過一個public的getInstance方法獲取對它的引用,繼而調用其中的方法。
public class Singleton {
private Singleton(){}
//在自己內部定義自己一個實例,是不是很奇怪?
//注意這是private 只供內部調用
private static Singleton instance = new Singleton();
//這里提供了一個供外部訪問本class的靜態方法,可以直接訪問
public static Singleton getInstance() {
return instance;
}
}
第二種形式:
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//這個方法比上面有所改進,不用每次都進行生成對象,只是第一次
//使用時生成實例,提高了效率!
if (instance==null)
instance=new Singleton();
return instance; }
}
其他形式:
定義一個類,它的構造函數為private的,所有方法為static的。
一般認為第一種形式要更加安全些
㈩ 哪裡有java筆試題
https://www.nowcoder.com/contestRoom?mutiTagIds=639
牛客網-Java專題
很適合程序猿刷筆試面試題
望採納 謝謝。