JAVA部分java
答:運行狀態中,對於任意一個類,均可以知道它的全部屬性和方法,對於任意一個對象均可以調用它的任意一個方法,這種動態獲取信息以及動態調用對象的方法的功能叫作JAVA的反射機制。程序員
答:通常簡單數據類型用「==」比較,複雜的數據類型能夠用「==」,也能夠用equals。web
「==」比較時會比較變量是否爲同一對象而且內存地址相同纔會返回true,用equals進行比較是要看方法是在哪一個類實現的。面試
11.運行時異常與通常異常有何異同?算法
答:異常表示程序運行過程當中可能出現的非正常狀態,運行時異常表示虛擬機的一般操做可能遇到的異常,是一種常見運行錯誤。JAVA編譯器要求方法必須聲明拋出可能發生的非運行時異常,可是並不要求必須聲明拋出未被捕獲的運行時異常。sql
13.sleep()wait()有什麼區別?數據庫
答:sleep是線程類(Thread)的方法,致使此線程暫停執行指定時間,給執行機會給其餘線程,可是監控狀態依然保持,到時後會自動恢復。調用sleep不會釋放對象鎖。編程
Wait是Object類的方法,對此對象調用wait方法致使本線程放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象發出notify方法(或notifyAll)後本線程才進入對象鎖定池準備得到對象鎖進入運行狀態。設計模式
16.同步和異步有何異同?在什麼狀況下分別使用它們?舉例說明。數組
答:若是數據將在線程間共享。例如正在寫的數據之後可能被另外一個線程讀到,或者正在讀的數據可能已經被另外一個線程寫過了,那麼這些數據就是共享數據,必須進行同步存取。
當應用程序在對象上調用了一個須要花費很長時間來執行的方法,而且不但願讓程序等待方法的返回時,就應該使用異步編程,在不少狀況下采用異步途徑每每更有效率。
JSP部分
答:一共有9個內置對象。
pageContext javax.servlet.PageContext
request javax.servlet.http.HttpServletRequest
response javax.servlet.http.HttpServletResponse
session javax.servlet.http.HttpSession
application javax.servlet.ServletContextathis.getServletContext()
config javax.servlet.ServletConfig
exception java.lang.Object
out javax.servlet.jsp.JspWriter
做用:
① pageContext:表示頁面容器,EL表達式、標籤、上傳。
② request:服務器端取得客戶端的信息:頭信息、Cookie、請求參數、最大用處在MVC設計模式上。
③ response:服務器端迴應客戶端信息:Cookie、重定向。
④ session:表示每個用戶,用於登陸驗證上。
⑤ application:表示整個服務器。
⑥ config:取得初始化參數,初始化參數在web.xml文件中配置
⑦ exception:表示的是錯誤頁的處理操做
⑧ page如同this同樣,表明整個JSP頁面自身
⑨ out:輸出。可是儘可能使用表達式輸出。
答:jsp共有六種基本動做。
① <jsp:include page=」」/>:在頁面請求時包含一個文件
② <jsp:userBean id=」」 class=」」 scope=」application page request session」/>:尋找或實例化一個javaBean。
③ <jsp:setProperty name=」」 property=」」 value=」」 />:設置javaBean的屬性,經過反射調用方法。
④ <jsp: getProperty name=」」 property=」」/>:取得某個javaBean的屬性。
⑤ <jsp:forward page=」」/>:把請求轉到一個新的頁面。
⑥ <jsp:plugin>:插入Applet程序的代碼。
⑦ <jsp: param name=」」 value=」」/>:用於傳參數,和forward一塊兒使用。
答:動態INCLUDE用<jsp:include>動做實現:
<jsp:include page=」include.jsp」 flush=」true」/>若是包含的是動頁,則先編譯以後再進行處理,它老是會檢查所包含文件中的變化,而且能夠帶參數。
靜態INCLUDE用<%@include%>僞代碼實現:
<%@include file=」include.jsp」%>直接將內容先包含後處理,它不會檢查所包含的文件的變化,適用於包含靜態頁面。
答:客戶端跳轉:<jsp:forward>跳轉以後地址欄不改變,執行完頁面後不會專項還會回來,至關於函數調用,而且能夠傳遞request屬性,其實是對RequestDispatcher接口的封裝。
服務器端跳轉:response.sendRedirect(),跳轉以後地址欄改變,徹底轉向新的頁面,不會再回來,至關於go to語句。
答:分頁有兩種狀況:
真分頁:性能高,是基於數據庫的操做,只是從數據庫中取出部分的數據進行顯示,因此性能高,可是可移植性低。
假分頁:性能低,是將所有的結果查詢出來,以後依靠算法分頁,只顯示部分數據,由於使用了通用的語法,因此可移植性高。
真分頁實現原理:
① 定義一系列的變量:currentPage(當前頁)、showResultNumber(每頁顯示記錄數),並經過查詢求出countResultNumber(總記錄數)求出counutPage(總頁數)。
countPage=(countResultNumber-1)/ showResultNumber+1
② 而後根據currentPage和showResultNumber到數據庫中查詢數據
Oracle中用rownumber,mySql中用limit()
③ 而後在表單中不斷地修改currentPage和showResultNumber就能夠實現分頁
① javaBean的格式要求:必須有包、public class聲明、屬性封裝、無參的構造函數、setter()和getter()方法。
② jsp中導入javaBean:
使用import 導入,如:
<%@page import=」com.model.User」%>
使用<jsp:useBean>導入,如:
<jsp:useBean id=」User」 class=」com.model.User」></jsp:userBean>
答:什麼是Servlet:
Servlet是用java編寫的服務端程序,它與協議和平臺無關。Servlet運行於java-enabled Web Server中。Servlet能夠動態地擴展Server的能力,並採用請求-響應模式提供Web服務。
Servlet的主要功能在於交互式地瀏覽和修改數據,生成動態Web內容。這個過程爲:
① 戶端發送請求至服務器端。
② 服務器將請求信息發送至Servlet
③ Servlet生成響應內容並將其傳給Server。響應內容動態生成,一般取決於客戶端的請求。
④ 服務器將響應返回給客戶端。
Servlet的聲明週期:
七種狀態:建立、初始化、服務可用、服務不可用、處理請求、終止服務、銷燬。
四個階段:加載和實例化、初始化、處理請求、銷燬。
JAVA面試題
答:不寫時默認爲friendly
做用域 |
當前類 |
同一package |
子孫類 |
其餘package |
public |
√ |
√ |
√ |
√ |
protectd |
√ |
√ |
√ |
× |
friendly |
√ |
√ |
× |
× |
private |
√ |
× |
× |
× |
答:匿名內部類是沒有名字的內部類。不能extends(繼承)其餘類,但一個內部類能夠做爲一個接口,由另外一個內部類實現。
答:Nested Class(通常是C++的說法),Inner Class(通常是JAVA的說法)。Java內部類與C++嵌套類最大的不一樣就在因而否有指向外部的引用上。
注:靜態內部類(Inner Class)意味着①建立一個static內部類的對象,不須要一個外部類對象②不能從一個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?
答:兩個,一個字符對象,一個字符對象引用對象。
答:Math.round(11.5)=12;Math.round(-11.5)=-11;
round方法返回與參數最接近的長證書,參數加1/2後求其floor
答:short s1=1;s1=s1+1;(s1=s1+1運算結果是int類型,須要強制轉換類型)
short s1=1;s1+=1;能夠正確編譯。
答:沒有,java中的保留字,如今沒有在java中使用。
答:數組沒有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.列舉常見的運行時異常(RuntimeException)
ArithmeticException、ArrayStoreException、BufferOverflowException、CannotUndoException、ClassCastException、CMMException、ConcurrentModificationException、SystemException、IndexOutOfBoundsException
15.error和exception有什麼區別?
答:error表示恢復不是不可能但很困難的狀況下的一種嚴重問題。好比說內存溢出。不可能期望程序能處理這樣的狀況。
Exception 表示一種設計或實現問題。也就是說,它表示若是程序運行正常,從不會發生的狀況。
16.List、Set、Map是否繼承自Collection接口?
答:List、Set是,Map不是。
17.abstract class 和 interface有什麼區別?
答:聲明方法的存在而不去實現它的類被叫作抽象類(abstract class),它用於要建立一個體現某些基本行爲的類,併爲該類聲明方法,但不能再該類中實現該類的狀況。不能建立abstarct類的實例。然而能夠建立一個變量,其類型是一個抽象類,並讓它指向具體子類的一個實例。不能有抽象構造函數或抽象靜態方法。Abstract類的子類爲它們父類中的全部抽象方法的提供實現,不然它們也是抽象類。在子類中實現該方法,取而代之父類的抽象方法。知道其行爲的其它的其它類能夠在類中實現這些方法。
接口(interface)是抽象類的變體。在接口中,全部方法都是抽象的。多繼承性可經過實現這樣的接口而得到。接口中的全部方法都是抽象,沒有一個有程序體。接口只能夠定義static final 成員變量。接口的實現與子類類似,除了該實現類不能從接口定義中繼承行爲。當類實現特殊接口時,它定義(即將程序體給予)全部這種接口的方法。而後,它能夠在實現了該接口的類的任何對象上調用接口的方法。因爲有抽象類,它容許使用接口名做爲引用變量的類型。一般的動態聯編將生效。引用能夠轉換到接口類型或從接口類型轉換,instanceof運算符能夠用來決定某對象的類是否實現了接口。
18.abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized?
答:都不能。
19.接口是否能夠繼承接口?抽象類是否能夠實現(implements)接口?抽象類是否可繼承實體類(concrete class)?
答:接口能夠繼承接口。抽象類能夠實現(implements)接口,抽象類能夠繼承實體類,但前提是實體類必須有明確的構造函數。
20.構造器Constructor是否能夠被override?
答:構造器Constructor不能被繼承,所以不能重寫Overriding,但能夠被重載Overloading。
21.是否能夠繼承String類?
答:String類final類,故不能夠被繼承。
22.try{}裏有一個return語句,那麼緊跟在這個try後的finally{}裏的code會不會被執行?何時被執行?在return前仍是return後?
答:會執行,在return前執行。
23.用最有效率的方法算出2乘以8等於幾。
答:2<<3
24.兩個對象值相同(x.equals(y)==true),但卻能夠有不一樣的hashcode,這句話對不對?
答:不對,有相同的hashcode。
25.當一個對象被當作參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這裏究竟是值傳遞仍是引用傳遞?
答:是值傳遞。JAVA編程語言只有值傳遞參數。當一個對象實例做爲一個參數被傳遞到方法中時,參數的值就是對該對象的引用。對象的內容能夠在被調用的方法中改變,但對象的引用是永遠不會改變的。
26.switch是否能做用在byte上?是否能做用在long上?是否能做用在Sting上?
答:switch(exprl)中,exprl是一個整數表達式。所以傳遞給switch和case語句的參數應該是int、short、char或者byte。long、String都不能用做switch。
27.ArrayList和Vector的區別?HashMap和Hashtable的區別?
答:就ArrayList和Vector主要從兩方面來講:①同步性:Vector是線程安全的,也就是說是同步的,而ArrayList是線程不安全的,不一樣步的;②數據增加:當須要增加時,Vector默認增加爲原來的一倍,而ArrayList確是原來的一半。
HashMap是Hashtable的輕量級實現(非線程安全的實現),他們都實現了Map接口,主要HashMap和Hashtable的區別在於HashMap容許空(null)鍵值(key),因爲非線程安全,效率上可能高於Hashtable。
HashMap容許將null做爲一個entry的key或value,而Hashtable不容許。
HasMap把Hashtable的contains方法去掉了,改爲containsvalue和containsKey。由於contains方法容易讓人引發誤解。
Hashtable繼承自Dictionary類,而HashMap是JAVA1.2引進的Map interface的一個實現。
最大的不一樣是,Hashtable的方法是Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,不須要本身爲它的方法實現同步,而HashMap就必須爲之提供外同步(若是是ArryList:List list=Collection.synchronizedList(new ArrayList());若是是HashMap:Map map=Collection.synchronizedMap(new HashMap());)。
Hashtable 和 HashMap 採用的 hash/rehash算法都大概同樣,因此性能不會有很大的差別。
28.char型變量中能不能存儲一箇中文漢字?爲何?
答:可以定義成爲一箇中文。由於JAVA中一Unicode編碼,一個char佔兩個字節,因此能夠放入一箇中文漢字。
29.GC是什麼?爲何要有GC?
答:GC是垃圾收集的意思(Gabage Collection),內存處理是編程人員容易出現問題的地方,忘記或者錯誤的內存回收會致使程序或系統的不穩定甚至崩潰,JAVA提供的GC功能能夠自動監測對象是否超過做用域從而達到自動回收內存的目的JAVA語言沒有提供釋放已分配內存的顯示操做方法。
30.float型float f=3.4是否正確?
答:不正確。精度不許確,應該用強制類型轉換,如float f=(float)3.4;
31.介紹JAVA中的Collection FrameWork(包括如何寫本身的數據結構)?
答:
Collection FrameWork以下:
Collection→List→LinkedList
ArrayList
Vector →Stack
Set
Map→Hashtable、HashMap、WeakHashMapCollection(最基本的集合接口,一個Collection表明一組Object,即Collection的元素(Elements))
Map提供key到value的映射。
32.抽象類與接口
答:抽象類與接口都用於抽象,可是抽象類(JAVA中)能夠有本身的部分實現,而接口則徹底是一個標識(同時有多重繼承的功能)JAVA類實現序列化的方法是實現java.io.Serializable接口,Collection框架中Comparable接口和Comparator接口。
33.String與StringBuffer的區別是什麼?
答:String的長度是不可變的,StringBuffer的長度是可變的。若是須要對字符串的內容常常進行操做,特別是內容要修改時,那麼使用StringBuffer,StringBuffer能夠經過toString()方法轉換爲String類型。
34.final、finally、finalize的區別。
答:final用於聲明屬性、方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。
finally是異常處理語句結構的一部分,表示老是執行。
finalize時Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,能夠覆蓋此方法提供垃圾收集時的其餘資源回收,列入關閉文件等。
35.面向對象的特徵有哪些方面,具體談一談。
答:
① 抽象:忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。
② 繼承:繼承一種聯結類的層次模型,而且容許和鼓勵類的重用,它提供了一種明確表述共性的方法。
③ 封裝:是把過程和數據包圍起來,對數據的訪問只能經過已定義的界面。
④ 多態性:是指容許不一樣類的對象對同一消息做出響應。
36.String是基本數據類型麼?
答:不是。基本數據類型八種:int、double、float、long、short、boolean、char、byte。
Java.lang.String類是final類型,所以不能夠繼承這個類,不能修改這個類。爲了提升效率節省空間,咱們一般使用StringBuffer類。
37.JAVA中int與Integer有什麼區別?
答:int是JAVA的原始數據類型,Integer是JAVA爲int提供的封裝類。
JAVA中提供兩種不一樣數據類型:引用類型和原始數據類型(內置類型)。兩種數據類型具有不一樣的特徵和用法,包括:大小和速度問題、以哪一種類型的數據結構存儲,當引用類型和原始類型用做某個類的實例數據時所指定的缺省值。對象引用實例變量的缺省值爲null,而原始類型實例變量的缺省值與它們的類型有關。
38.運行時異常與通常異常有何異同?
答:異常表示程序運行過程當中可能出現的非正常狀態,運行時異常表示虛擬機的一般操做中可能遇到的異常,是一種常見的運行錯誤。Java編譯器要求方法必須聲明拋出可能發生的非運行時異常,可是並不要求必須聲明拋出未被捕獲的運行時異常。
39.說出ArrayList,Vector,LinkedList的存儲性能和特性。
答:ArrayList和Vector都是使用數組方式存儲數據,此數組元素數大於實際存儲的數據以便增長和插入元素,它們都容許直接按序號索引元素,可是插入元素要涉及數組元素移動等內存操做,因此索引數據快而插入數據慢,Vector因爲使用了synchronized方法(線程安全),一般性能上較ArrayList差,而LinkedList使用雙向鏈表實現存儲,按序號索引數據須要進行前向或後向遍歷,可是插入數據時只須要記錄本想的先後項便可,因此插入速度較快。
40.HashMap和Hashtable的區別
HashMap是Hashtable的輕量級實現(非線程安全的實現),他們都實現了Map接口,主要區別在於HashMap容許空(null)鍵值(key),因爲非線程安全,效率上可能高於Hashtable。
HashMap容許將null做爲一個entry的key或value,而Hashtable不容許。
HasMap把Hashtable的contains方法去掉了,改爲containsvalue和containsKey。由於contains方法容易讓人引發誤解。
Hashtable繼承自Dictionary類,而HashMap是JAVA1.2引進的Map interface的一個實現。
最大的不一樣是,Hashtable的方法是Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,不須要本身爲它的方法實現同步,而HashMap就必須爲之提供外同步(若是是ArryList:List list=Collection.synchronizedList(new ArrayList());若是是HashMap:Map map=Collection.synchronizedMap(new HashMap());)。
Hashtable 和 HashMap 採用的 hash/rehash算法都大概同樣,因此性能不會有很大的差別。
41.你所知道的集合類都有哪些?主要方法?
答:最經常使用的集合類是List和Map。List的具體實現包括ArrayList和Vector,它們是可變大小的列表,比較適合構建、存儲和操做任何類型對象的元素列表。List適用於按數值索引訪問元素的情形。Map提供了一個更通用的元素存儲方法。Map集合類用於存儲元素對(「鍵」和「值」),其中每一個鍵映射到一個值。
42.描述一下JVM加載class文件的原理機制。
答:JVM中類的裝載是由ClassLoader和它的子類來實現的,Java ClassLoader 是一個重要的Java運行時系統組件。它負責在運行時查找和裝入類文件的類。
43.排序有哪幾種方法?請舉例。
答:排序的方法有:插入排序(直接插入排序、希爾排序),交換排序(冒泡排序、快速排序),選擇排序(直接選擇排序、堆排序),歸併排序,分配排序(箱排序、基數排序)快速排序的僞代碼。
44.JAVA語言如何進行一場處理?關鍵字:throws、throw、try、catch、finally分別表明什麼意義?在try塊中能夠拋出異常麼?
答:Java經過面向對象的方法進行異常處理,把各類不一樣的異常進行分類,並提供了良好的接口。在Java中,每一個異常都是一個對象,該對象中包含有異常信息,調用這個對象的方法能夠捕獲到這個異常並進行處理。Java的異常處理是經過5個關鍵詞來實現的:throws、throw、try、catch、finally。通常狀況下用try來執行一段程序,若是出異常,系統會拋出(throws)一個異常。這時候,你能夠經過它的類型來捕捉(catch)它,或最後(finally)由缺省處理器來處理。用try
來指定一塊預防全部「異常」的程序。緊跟在try程序後面,應包含一個catch子句來指定你想要捕捉的「異常」類型。Throw語句用來明確地拋出一個「異常」。Throws用來標明一個成員函數可能拋出的各類「異常」。Finally爲確保一段代碼無論發生什麼「異常」都被執行的一段代碼。能夠在一個成員函數調用的外面寫一個try語句,在這個成員函數內部寫另外一個try語句保護其餘代碼。每當遇到一個try語句,「異常」的框架就放到堆棧上面,直到全部的try語句都完成。若是下一級的try語句沒有對某種「異常」進行處理,堆棧就會展開,直到遇到有處理這種「異常」的try語句。
45.Java中有幾種類型的流?JDK爲每種類型的流提供了一些抽象類以供繼承,請說出他們分別是哪些類?
答:字節流。字符流。字節流繼承與InputStream OutStream,字符流繼承於InputStreamReader OutputStreamWriter。在java.io包中還有許多其餘的流,主要是爲了提升性能和使用方便。
46.JAVA中會存在內存泄露麼?請簡單描述。
答:會。本身實現堆載的數據結構時有可能會出現內存泄露,可參看effective java。
47.JAVA中實現多態的機制是什麼?
答:方法的重寫Overriding和重載Overloading是JAVA多態性的不一樣表現。重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。
48.垃圾回收器的基本原理是什麼?垃圾回收器能夠立刻回收內存麼?有什麼方法主導通知虛擬機進行垃圾回收?
答:對於GC來講,當程序員建立對象時,GC就開始監控這個對象的地址、大小以及使用狀況。一般,GC採用有向圖的方式記錄和管理堆(heap)中的全部對象。經過這種方式肯定哪些對象是「可達的」,哪些對象是「不可達的」。當GC肯定一些對象爲「不可達」時,GC就有責任回收這些內存空間。程序員能夠收到執行System.gc(),通知GC運行,可是JAVA語言規範並不保證GC必定會執行。
49.靜態變量和實例變量的區別?
答:
50.什麼是JAVA序列化?如何實現JAVA序列化?
答:序列化就是一種用來處理對象流的機制,所謂對象流也就是將對象的內容進行流化。能夠對流化後的對象進行讀寫操做,也能夠將流化後的對象傳輸於網絡之間。序列化是爲了解決在對對象流進行讀寫操做時所引起的問題。序列化的實現:將須要被序列化的類實現Serializable接口,該接口沒有須要實現的方法implements Serializable只是爲了標註該對象是可被序列化的,而後使用一個輸出流(如:FileOutputStream)來構造一個ObjectOutputStream(對象流)對象,接着使用ObjectOutputStream對象的writeObject(Object obj)方法就能夠將參數obj的對象寫出(即保存其狀態),要恢復的話則用輸入流。
51.是否能夠從一個static方法內部發出對非static方法的調用?
答:不能夠。若是其中包含對象的method(),不能保證對象初始化。
①靜態內部類能夠有靜態成員,而非靜態內部類則不能有靜態成員。
② 態內部類的非靜態內部成員能夠訪問外部類的靜態變量,而不可訪問外部類的非靜態變量。
③ 非靜態內部類的非靜態成員能夠訪問外部類的非靜態變量。
52.寫clone()方法時,一般都有一行代碼,是什麼?
答:clone()有缺省行爲,super.clone();它負責產生正確大小的空間,並逐位複製。
53.在JAVA中如何跳出當前的多重循環嵌套?
答:用break; return方法。
54.List、Map、Set三個接口,存取元素時,各有什麼特色?
答:
List:以特定次序來持有元素,可持有重複元素。
Set:沒法擁有重複元素,內部排序。
Map:保存key-value值,value可多值。
55.說出一些經常使用的類、包、接口,各舉例五個。
經常使用類:BufferedReader、BufferedWriter、FileReader、FileWriter、String、Integer等。
經常使用包:java.lang、java.awt、java.util、java.io、java.sql等。
經常使用接口:Remote、List、Map、Document、NodeList等。
56.JAVA中有幾種方法能夠實現一個線程?用什麼關鍵字修飾同步方法?stop()和suspend()方法爲什麼不推薦使用?
答:有兩種實現方法,分別是繼承Thread類與實現Runnable接口用synchronized關鍵字修飾同步方法。反對使用stop()是由於它不安全。它會解除由線程獲取的全部鎖定,並且若是對象處於一種不連貫狀態,那麼其餘線程能在那種狀態下檢查和修改它們。結果很難檢查出真正的問題所在。Suspend()方法容易發生死鎖。調用suspend()的時候,目標線程會停下來,但卻仍然持有在這以前得到的鎖定。此時,其餘任何線程都不能訪問鎖定的資源,除非被「掛起」的線程恢復運行。對任何線程來講,若是它們想恢復目標線程,同時又試圖使用任何一個鎖定的資源,就會形成死鎖。因此不該該使用suspend(),而應在本身的Thread類中配入一個標識,指出線程應該活動仍是掛起。若標識指出線程應該掛起,便用wait()命其進入等待狀態。若標識指出線程應當恢復,則用一個notify()從新啓動線程。
57.