java面試寶典2015版1、一個(gè).源文件中是否可以包括多個(gè)不是類有什么限制_第1頁(yè)
java面試寶典2015版1、一個(gè).源文件中是否可以包括多個(gè)不是類有什么限制_第2頁(yè)
java面試寶典2015版1、一個(gè).源文件中是否可以包括多個(gè)不是類有什么限制_第3頁(yè)
java面試寶典2015版1、一個(gè).源文件中是否可以包括多個(gè)不是類有什么限制_第4頁(yè)
java面試寶典2015版1、一個(gè).源文件中是否可以包括多個(gè)不是類有什么限制_第5頁(yè)
已閱讀5頁(yè),還剩162頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

一.Java基礎(chǔ)部 2、Java有沒(méi)有 5、switchbytelongString上?.6、shorts1=1;s1=s1+1;有什么錯(cuò)?shorts1=1;s1+=1;有什么錯(cuò) 7、char型變量中能不能存貯一個(gè)中文漢字?為什么 10、使用final關(guān)鍵字修飾一個(gè)變量時(shí),是不能變,還是的對(duì)象不能變 13、是否可以從一個(gè)static方法內(nèi)部發(fā)出對(duì)非static方法的調(diào)用 14、Integer與int的區(qū) 18、Overload和Override的區(qū)別。Overloaded的方法是否可以改變返回值的類型?219、構(gòu)造器Constructor是否可被override?. (concreteclass)?main方法 23、java中實(shí)現(xiàn)多態(tài)的機(jī)制是什么 class和interface有什么區(qū)別 的method是否可同時(shí)是static,是否可同時(shí)是native,是否可同時(shí)是 estedClass和InnerClass的不同 28、AnonymousInnerClass(內(nèi)部類)是否可以extends(繼承)其它類,是否可以口 30、String是最基本的數(shù)據(jù)類型嗎 31、Strings="o";s=s+"world!";這兩行代碼執(zhí)行后,原始的String對(duì)象中的內(nèi)容到 32、是否可以繼承String類 33、Strings=newString("xyz");創(chuàng)建了幾個(gè)StringObject?二者之間有什么區(qū)別?234、String和StringBuffer的區(qū)別 38、tryreturntryfinally{}code會(huì)不會(huì)被執(zhí)return前還是后 42、error和exception有什么區(qū)別 43、Java中的異常處理機(jī)制的簡(jiǎn)單原理和應(yīng)用 try塊中可以拋出異常嗎 46、java中有幾種方法可以實(shí)現(xiàn)一個(gè)線程?用什么關(guān)鍵字修飾同步方法stop()和用 47、sleep()和wait()有什么區(qū)別 52、當(dāng)一個(gè)線程進(jìn)入一個(gè)對(duì)象的一個(gè)synchronized方法后,其它線程是否可進(jìn)入此對(duì)象的 55、設(shè)計(jì)4個(gè)線程,其中兩個(gè)線程每次對(duì)j增加1,另外兩個(gè)線程對(duì)j每次減少1。寫(xiě)出程 序 60、HashMap和Hashtable的區(qū) 61、List和Map區(qū)別 62、List,Set,Map是否繼承自Collection接口 63、List、Map、Set三個(gè)接口,存取元素時(shí),各有什么特點(diǎn) 66、Collection和Collections的區(qū)別 67、Set里的元素是不能重復(fù)的,那么用什么方法來(lái)區(qū)分重復(fù)與否呢?是用== 69、兩個(gè)對(duì)象值相同(x.equals(y)==true)hashcode,這句話對(duì)不對(duì)?compareTocompareTo方法,還是拋異常 72、java中有幾種類型的流?JDK為每種類型的流提供了一些抽象類以供繼承,請(qǐng)說(shuō)出他 74javajavaSerializable275、描述一下JVM加載class文件的原理機(jī)制 76、heap和stack有什么區(qū)別 77、GC是什么?為什么要有 收 81、java中會(huì)存在內(nèi)存泄漏嗎,請(qǐng)簡(jiǎn)單描述 83.Java代碼查 二.算法與編 1a.txtb.txtc.txta.txt文件中的單詞用回車符分隔,b.txt文件中用回車或空格進(jìn)行分 2、編寫(xiě)一個(gè)程序,將d:\java 下的所有.java文件到d:\jad 的擴(kuò)展名從.java改 串,但要保證漢字不被截取半個(gè),如“ABC”,4,應(yīng)該截取“AB”,輸入“ABC漢DEF”,6,應(yīng)該輸出“ABC”,而不是“ABC+漢的半個(gè)” 5、說(shuō)明生活中遇到的二叉樹(shù),用java實(shí)現(xiàn)二叉 7、寫(xiě)一個(gè)Singleton出來(lái) (¥101)->( 三.html&JavaScript&ajax部 判斷第二個(gè)日期比第一個(gè)日期 tablen條記錄,每3行換一次顏色,即1,2,3用紅色字體,4,5,6用綠色字體 3、HTML的form提交之前如何驗(yàn)證數(shù)值文本框的內(nèi)容全部為數(shù)字?否則的話提示用戶并 4、請(qǐng)寫(xiě)出用于校驗(yàn)HTML文本框中輸入的內(nèi)容全部為數(shù)字的javascript代 5、說(shuō)說(shuō)你用過(guò)那些ajax技術(shù)和框架,說(shuō)說(shuō)它們的區(qū) 四.Javaweb部 2、HTTP請(qǐng)求的GET與POST方式的區(qū) 4、說(shuō)一說(shuō)Servlet的生命周期 5、Servlet的基本架 8、Request對(duì)象的主要方法 9、forward和redirect的區(qū) 10、request.getAttribute()和request.getParameter()有何區(qū)別 jsp有哪些內(nèi)置對(duì)象?作用分別是什么?分別有什么方法 jsp有哪些動(dòng)作?作用分別是什么 13、JSP的常用指 14.JSP中動(dòng)態(tài)INCLUDE與靜態(tài)INCLUDE的區(qū)別 17、JSP和Servlet有哪些相同點(diǎn)和不同點(diǎn),他們之間的聯(lián)系是什么 18、MVC的各個(gè)部分都有那些技術(shù)來(lái)實(shí)現(xiàn)?如何實(shí)現(xiàn) 19webiso8859-1等,如何輸串 20.現(xiàn)在輸入n個(gè)數(shù)字,以逗號(hào),分開(kāi);然后可選擇升或者降序排序;按提交鍵就在另一 五.數(shù)據(jù)庫(kù)部 6、union和unionall有什么不同 分頁(yè)語(yǔ) 用一條SQL語(yǔ)句查詢出每門(mén)課都大于80分的學(xué)生所有部門(mén)之間的比賽組 統(tǒng)計(jì)每年每月的信 顯示文章標(biāo)題,發(fā)帖人、最后回復(fù)時(shí) 刪除除了id號(hào)不同,其他都相同的學(xué)生冗余信 航空網(wǎng)的幾個(gè)航班查詢題 查出比經(jīng)理薪水還高的員工信息 決 220.xxx公司的sql面 21、Jdbc驅(qū)動(dòng)程序的三種方 22、用JDBC如何調(diào)用過(guò) 23、JDBC中的PreparedStatement相比Statement的好 24.寫(xiě)一個(gè)用jdbc連接并oracle數(shù)據(jù)的程序代 27、用JDBC查詢學(xué)生成績(jī)單,把主要代碼寫(xiě)出來(lái)(考試概率極大 30、為什么要用ORM?和JDBC有何不一樣 六.XML部 1、xml有哪些解析技術(shù)?區(qū)別是什么 2、你在項(xiàng)目中用到了xml技術(shù)的哪些方面?如何實(shí)現(xiàn)的 3、用jdom解析xml文件時(shí)如何解決中文問(wèn)題?如何解析 4、編程用JAVA解析XML的方 5、XMLXML2七.流行的框架與新技 1、談?wù)勀銓?duì)Struts的理解 2、談?wù)勀銓?duì)Hibernate的理解 3、AOP的作用 4、你對(duì)Spring的理解 5、談?wù)凷truts中的Actionservlet 6、Struts1.MVC模式,結(jié)構(gòu)清晰,使開(kāi)發(fā)者只關(guān)注業(yè)務(wù)邏輯的實(shí)現(xiàn).7、STRUTS的應(yīng)用(如STRUTS架構(gòu) 9、hibernateupdate()saveOrUpdate()的區(qū)別,sessionload()get()的區(qū)別。10HibernateJDBC的優(yōu)缺點(diǎn)?onetomany配置文件 12、寫(xiě)Hibernate的一對(duì)多和多對(duì)一雙向關(guān)聯(lián)的orm配置 9、hibernate的inverse屬性的作用 13、在DAO中如何體現(xiàn)DAO設(shè)計(jì)模式 14、spring+Hibernate中委托方案怎么配置 15、spring+Hibernate中委托方案怎么配置 hibernate進(jìn)行多表查詢每個(gè)表中各取幾個(gè)字段,也就是說(shuō)查詢出來(lái)的結(jié)果集沒(méi)有一個(gè)決 介紹一下Hibernate的二級(jí)緩 18、Spring的依賴注入是什么意思?Beanmessage屬性,字符串類型,"o"的XML配置文件該怎寫(xiě) 19、Jdo是什么 20、什么是spring的IOC 21、STRUTS的工作流程 22、spring與EJB的區(qū)別 八.軟件工程與設(shè)計(jì)模 1、UML方 2、j2ee常用的設(shè)計(jì)模式?說(shuō)明工廠模式 九.j2ee部 1、BS與CS的聯(lián)系與區(qū)別 2、應(yīng)用服務(wù)器與WEBSERVER的區(qū)別 4、J2EE是什么 5、J2EE是技術(shù)還是是框架?什么是 6、請(qǐng)對(duì)以下在J2EE中常用的名詞進(jìn)行解釋(或簡(jiǎn)單描述 7、如何給weblogic指定大小的內(nèi)存 8、如何設(shè)定的weblogic的熱啟動(dòng)模式(開(kāi)發(fā)模式)與產(chǎn)品發(fā)布模式 ,10weblogic管理制臺(tái)中對(duì)一個(gè)應(yīng)用域(或者說(shuō)是一個(gè),中

)jmsejb11、說(shuō)說(shuō)weblogic中一個(gè)的缺省 結(jié)構(gòu)?比如要將一個(gè)簡(jiǎn)單的oWorld.jsp 下,然的在瀏覽器上就可打入http://主機(jī):端//oword.jsp就可以看到運(yùn)行結(jié)果了?又比如這其中用到了一個(gè)自己寫(xiě)的javaBean該如何辦 12、在weblogic中發(fā)布ejb需涉及到哪些配置文 13、如何在weblogic中進(jìn)行ssl配置與客戶端的認(rèn)證配置或說(shuō)說(shuō)j2ee(標(biāo)準(zhǔn))進(jìn)行ssl的配 14、如何查看在weblogic中已經(jīng)發(fā)布的 十.EBJ部 1、EJBSessionBeanEntityBeanStatefulBean和StaessBean的別 2、簡(jiǎn)要講一下EJB的7個(gè)Transaction 3、EJB與JAVABEAN的區(qū)別 25、EJB容器提供的服 6、EJB的激活機(jī) 7、EJB的幾種類 8、端調(diào)用EJB對(duì)象的幾個(gè)基本步 十一.webservice部 1、WEBSERVICE。JSWDL開(kāi)發(fā)包的介紹。JAXP、JAXM的解釋。SOAPUDDI,WSDL解釋 2、CORBA是什么?用途是什么 4、LINUX下線程,GDI類的解釋 十二.其 面試題 javajava答題時(shí),先答是什么,再答有什么作用和要注意什么(這部分最重要,展現(xiàn)自己的心得1Java基礎(chǔ)法,線程的語(yǔ)法,集合的語(yǔ)法,io的語(yǔ)法,虛擬機(jī)方面的語(yǔ)法。1、一個(gè)".java"源文件中是否可以包括多個(gè)類(不是內(nèi)部類)?有什么限制publicpublic2、Java有沒(méi)有javajava3、說(shuō)說(shuō)&和&&的區(qū)別(andtruetruefalsefalse。&&false,則不再計(jì)算第二個(gè)表達(dá)式,例如,if(strnull&&!str.equals(“”))strnullNullPointerException如果將&&改為&NullPointerException異常。If(x==33&++y>0)y會(huì)增長(zhǎng),If(x==33&&++y>0)不會(huì)增長(zhǎng)&還可以用作位運(yùn)算符,當(dāng)&boolean類型時(shí),&表示按位與操作,我們通常使用0x0f來(lái)與一個(gè)整數(shù)進(jìn)行&運(yùn)算,來(lái)獲取該整數(shù)的最低4bit位,例如,0x31&0x0f的結(jié)果為0x01。明自己理解透徹深入、實(shí)際經(jīng)驗(yàn)豐富。f4、在JAVA中如何跳出當(dāng)前的多重嵌套循環(huán)Java中,要想跳出多重循環(huán),可以在外面的循環(huán)語(yǔ)句前定義一個(gè)標(biāo)號(hào),然后在里層循break語(yǔ)句,即可跳出外層循環(huán)。例如,for(int for(intj=0;j<10;j++) System.out.println(“i=”+i+“,j=”+j);if(j==5)breakok;}}intarr[][]booleanfound=for(inti=0;i<arr.length&&!found;i++) for(intj=0;j<arr[i].length;j++){System.out.println(“i=”+i+“,j=”+j); ==5){found=true;}}}5、switch語(yǔ)句能否作用在byte上,能否作用在long上,能否作用在上intInteger包裝類型,由于,byte,short,charint,所以,這些類型以及這些類型的包裝類型也是可以的。顯然,longString類型都不符合switch的語(yǔ)定,并且不能被隱式轉(zhuǎn)換成int類型,所以,它們不能作用于swtich語(yǔ)句6、shorts11s1s11;有什么錯(cuò)shorts11s11;有什么錯(cuò)shorts11s1s11;s1+1shorts1shorts11s11;+=java語(yǔ)言規(guī)定的運(yùn)算符,java編譯器會(huì)對(duì)它進(jìn)行特7、char型變量中能不能存貯一個(gè)中文漢字?為什么char型變量是用來(lái)Unicode編碼的字符的,unicode編碼字符集中包含了漢字,所以,char型變量中當(dāng)然可以漢字啦。不過(guò),如果某個(gè)特殊的漢字沒(méi)有被包含在unicode編碼字符集中,那么,這個(gè)char型變量中就不能這個(gè)特殊漢字。補(bǔ)充說(shuō)明:unicode編碼占用兩個(gè)字節(jié),所以,char類型的變量也是占用兩個(gè)字節(jié)。8、用最有效率的方法算出2乘以8等於幾2<<n位,就相當(dāng)于乘以了2n次方,那么,一個(gè)數(shù)乘以8只要將其左移3cpu直接支持的,效率最高,所以,2乘以8等於幾的最效率的方法是39、請(qǐng)?jiān)O(shè)計(jì)一個(gè)一百億的計(jì)算byte類型的整數(shù)為例,它用1,表示的最大數(shù)值范圍為-128到。在內(nèi)存中對(duì)應(yīng)的二進(jìn)制數(shù)據(jù)為,如果兩個(gè)-1Java運(yùn)算時(shí)的類型提升,運(yùn)算后會(huì)產(chǎn)生進(jìn)位,二進(jìn)制結(jié)果為 ,由于進(jìn)位后超過(guò)了byte類型的空間,所以進(jìn)位部分被舍棄,即最終的結(jié) 的二進(jìn)制數(shù)據(jù) ,如果兩個(gè)-128相加,不考慮Java運(yùn)算時(shí)的類型提升,運(yùn)算會(huì)產(chǎn)生進(jìn)位,二進(jìn)制結(jié)果為, ,由于進(jìn)位后超過(guò)了te類型的空間,所以進(jìn)位部分被舍棄,即最終的結(jié)果為 ,也就是,這樣的結(jié)果顯然不是我們期望的,這說(shuō)明計(jì)算機(jī)中的算術(shù)運(yùn)算是會(huì)發(fā)生越界情況的,兩個(gè)數(shù)值的運(yùn)算結(jié)果過(guò)計(jì)算機(jī)中的該類型的數(shù)值范圍。由于Jva中涉及表達(dá)式運(yùn)算時(shí)的類型自動(dòng)提升,我們無(wú)法用te類型做演示這種問(wèn)題和現(xiàn)象的實(shí)驗(yàn),大家可以用下面一個(gè)使用整數(shù)做實(shí)驗(yàn)的例子序體驗(yàn)一下:inta=Integer.MAX_VALUE;intb=Integer.MAX_VALUE;intsum=a+b;longint的正數(shù)范圍為2的31次方,表示的最大數(shù)值約等于()()()publicclassintsign;byte[]val;publicBiginteger(Stringval){sign=;val=}publicBigIntegeradd(BigInteger }publicBigIntegersubtract(BigIntegerother)}publicBigIntegermultiply(BigInteger}publicBigIntegerdivide(BigInteger}}備注:要想寫(xiě)出這個(gè)類的完整代碼,是非常復(fù)雜的,如果有的話,可以參看jdk中自java.math.BigInteger類的源碼。面試的人也知道誰(shuí)都不可能在短時(shí)間內(nèi)寫(xiě)出這個(gè)類10、使用final關(guān)鍵字修飾一個(gè)變量時(shí),是不能變,還是的對(duì)象不能使用final關(guān)鍵字修飾一個(gè)變量時(shí),是指變量不能變,變量所指向的對(duì)象中的內(nèi)容finalStringBuffera=newa=newa.append("有人在定義方法的參數(shù)時(shí),可能想采用如下形式來(lái)方法內(nèi)部修改傳進(jìn)來(lái)的參數(shù)對(duì)象publicvoid StringBuffer}11、"=="和equals方法究竟有什么區(qū)別塊內(nèi)存(堆內(nèi)存ObjetobjnewObject();obj是一個(gè)內(nèi)存,newObject()是另一個(gè)內(nèi)存,此時(shí),變量obj所對(duì)應(yīng)的內(nèi)存中的數(shù)值就是對(duì)象占用equals方法是用于比較兩個(gè)獨(dú)立對(duì)象的內(nèi)容是否相同,就好比去比較兩個(gè)人的長(zhǎng)相是否相Stringa=newString("foo");Stringb=newnewa/b個(gè)不同的對(duì)象,它們的首地址是不同的,即a和b中的數(shù)值是不相同的,所以,表達(dá)式a==b將返回false,而這兩個(gè)對(duì)象中的內(nèi)容是相同的,所以,表達(dá)式a.equals(b)將返回在實(shí)際開(kāi)發(fā)中,我們經(jīng)常要比較傳遞進(jìn)行來(lái)的字符串內(nèi)容是否等,例如,String…;input.equals(“quit”),許多人稍不注意就使用==進(jìn)行比較了,這是錯(cuò)誤的,隨便從網(wǎng)equals方法。如果一個(gè)類沒(méi)有自己定義equals方法,那么它將繼承Object類的equals方法,Object類equals方法的實(shí)現(xiàn)代碼如下:booleanequals(Objecto){returnthis==o;}equalsequals方法(Object類繼承equals和使用==false。如果equals方法,由你自己寫(xiě)代碼來(lái)決定在什么情況即可認(rèn)為兩個(gè)對(duì)象的內(nèi)容是相同的。staticstaticVar就會(huì)加1;但是,每創(chuàng)建一個(gè)實(shí)例對(duì)象,就會(huì)分instanceVarinstanceVarinstanceVar的值都只自加publicclasspublicstaticintstaticVar=0;publicintinstanceVar=0;publicVariantTest(){System.out.println(“staticVar=”+staticVar+}}13、是否可以從一個(gè)static方法內(nèi)部發(fā)出對(duì)非static方法的調(diào)用staticstatic方法的調(diào)用。14、Integerint的區(qū)intjava提供的8種原始數(shù)據(jù)類型之一。Java為每個(gè)原始類型提供了封裝類,Integer是javaint提供的封裝類。int的默認(rèn)值為0IntegernullInteger可以區(qū)分出未賦值和值為0的區(qū)別,int則無(wú)法表達(dá)出未賦值的情況,例如,要想表達(dá)出沒(méi)有參加考試和考試成績(jī)?yōu)?IntegerJSP開(kāi)發(fā)中,Integernull,elint默認(rèn)的默認(rèn)值為0el表達(dá)式在文本框中顯示時(shí),結(jié)果為0,所以,intweb層的表單數(shù)據(jù)的類型。HibernateOIDIntegerHibernate就可以根據(jù)其值是否nullOIDinthbm映射unsaved-value屬性為0。另外,IntegerInteger15、Math.round(11.5)等於多少?Math.round(-11.5)等於多少M(fèi)ath類中提供了三個(gè)與取整有關(guān)的方法:ceil、floor、round,這些方法的作用與它們的英文名稱的含義相對(duì)應(yīng),例如,ceil的英文意義是天花板,該方法就表示向上取整,round方法,它表示“四舍五入”Math.floor(x+0.5),即將原來(lái)的數(shù)字加上0.5后再16、下面的代碼有什么不妥之處 x=return returnx==1;就可以17、請(qǐng)說(shuō)出作用域public,private,protected,以及不寫(xiě)時(shí)的區(qū) 當(dāng)前類同一package子孫類其他package √√××√×××18、OverloadOverride的區(qū)別。Overloaded的方法是否可以改變返回值Overload是重載的意思,OverrideOverload表示同一個(gè)類中可以有多個(gè)名稱相同的方法,但這些方法的參數(shù)列表各不Override表示子類中的方法可以與父類中的某個(gè)方法的名稱和參數(shù)完全相同,通過(guò)子private類型,那么,子類則不存在覆蓋的限制,相當(dāng)Overloaded的方法是否可以改變返回值的類型這個(gè)問(wèn)題,要看你倒底想問(wèn)什么呢?Overloaded的方法的參數(shù)列表不一樣,它們的返回者類型當(dāng)map.remove(key)remove方法有返回值,但是我們通方法,僅僅是返回類型不同,java就無(wú)法確定編程者倒底是想調(diào)用哪個(gè)方法了,因?yàn)樗鼰o(wú)override可以翻譯為覆蓋,從字面就可以知道,它是覆蓋了一個(gè)方法并且對(duì)其重寫(xiě),以求、被覆蓋的方法不能為overload對(duì)我們來(lái)說(shuō)可能比較熟悉,可以翻譯為重載,它是指我們可以定義一些名稱相同的方法,通過(guò)定義不同的輸入?yún)?shù)來(lái)區(qū)分這些方法,然后再調(diào)用時(shí),VM就會(huì)根據(jù)不同的fun(int,int)19、構(gòu)造Constructor是否可被ConstructorOverrideOverload、接口是否可繼承接口抽象類是否可實(shí)現(xiàn)(ile)接口抽象類是否可繼承具體類(concrete?抽象類中是否可以有靜態(tài)的n方法?main方法。java語(yǔ)言的設(shè)計(jì)者,你是否會(huì)提供這樣的支持,如果不提供的話,有什么理由嗎?如果你只有記住抽象類與普通類的唯一區(qū)別就是不能創(chuàng)建實(shí)例對(duì)象和允許有21、寫(xiě)clone()方法時(shí),通常都有一行代碼,是什么clone有缺省行為,super.clone();因?yàn)槭紫纫迅割愔械某蓡T到位,然后才是自22、面向?qū)ο蟮奶卣饔心男┓矫嫦驅(qū)ο蟮木幊陶Z(yǔ)言有,嗎等4個(gè)主要的特征封裝的最基本單位,面向?qū)ο蟮姆庋b比傳統(tǒng)語(yǔ)言的封裝更為清晰、更為有力。面向?qū)ο蟮姆庋b就是把描述一個(gè)對(duì)象的屬性和行為的代碼封裝在一個(gè)“模塊”中,也就是一個(gè)類中,屬性用變量定義,行為用方法進(jìn)行定義,方法可以直接同一個(gè)對(duì)象中的屬性。通常情況下,只要記住讓變量和這個(gè)變量的方法放在一起,將一個(gè)類中的成員變量全部定義私有的,只有這個(gè)類自己的方法才可以到這些成員變量,這就基本上實(shí)現(xiàn)對(duì)象的封的數(shù)據(jù)放在同一個(gè)類中。例如,人要在黑板上畫(huà)圓,這一共涉及三個(gè)對(duì)象:人、黑板、圓,畫(huà)圓的方法要分配給哪個(gè)對(duì)象呢?由于畫(huà)圓需要使用到圓心和半徑,圓心和半徑顯然是圓的屬性,如果將它們?cè)陬愔卸x成了私有的成員變量,那么,畫(huà)圓的方法必須分配給圓,它才能到圓心和半徑這兩個(gè)屬性,人以后只是調(diào)用圓的畫(huà)圓方法、表示給圓發(fā)給消息而已,畫(huà)圓這個(gè)方法不應(yīng)該分配在人這個(gè)對(duì)象上,這就是面向?qū)ο蟮姆庋b性,即將對(duì)象封裝成一個(gè)高度自治和相對(duì)封閉的,對(duì)象狀態(tài)(屬性)由這個(gè)對(duì)象自己的行為(方法)來(lái)和改變。一個(gè)便于理解的例子就是,將火車剎住了,剎車的動(dòng)作是分配給,還是分配給火車,顯然,應(yīng)該分配給火車,因?yàn)樽陨硎遣豢赡苡心敲创蟮牧鈱⒁粋€(gè)火車給停下來(lái)的,只有火車自己才能完成這一動(dòng)作,火車需要調(diào)用內(nèi)部的離合器和剎車片等多個(gè)器件協(xié)作才能完成剎車這個(gè)動(dòng)作,剎車的過(guò)程只是給火車發(fā)了一個(gè)消息,通知火車要執(zhí)行剎車動(dòng)作而已。那就是抽象。抽象包括行為抽象和狀態(tài)抽象兩個(gè)方面。例如,定義一個(gè)類,如Stringname;intage;}UserDao是一個(gè)接口,它定義變量userDao指向的實(shí)例對(duì)象由daofactory.getDao()在執(zhí)行的時(shí)候返回,有時(shí)UserJdbcDaoUserHibernateDao這個(gè)實(shí)現(xiàn),這userDao指向的具體類實(shí)現(xiàn),從而導(dǎo)致userDao.insertUser()UserJdbcDaoinsertUserUserHibernateDaoinsertUser方法:UserDaouserDao=daofactory.getDao();23、java中實(shí)現(xiàn)多態(tài)的機(jī)制是什么 class和interface有什么區(qū)別 修飾符的class即為抽象類, class類中的方法不必是抽象的。class類中定義抽象方法必須在具體(Concrete)口中的方法定義默認(rèn)為public 類型,接口中的成員變量類型默認(rèn)為publicstaticeclipse下不報(bào)錯(cuò),但應(yīng)該也不行但接口中的抽象方法只能是public類型的,并且默認(rèn)即為public publicstaticfinalpublicstaticfinalServlet類都要用相同的方式進(jìn)行權(quán)限判斷、記錄訪Servlet都繼承這個(gè)抽象基類,在抽象基類的service方法中完成權(quán)限判斷、記錄日志和處理異常的代碼,在 classBaseServletextendspublicfinalvoidservice(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOExcetion,ServletException 記 日}catch(Excetpion }}} voiddoService(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOExcetion,ServletException;}publicclassMyServlet1{protectedvoiddoService(HttpServletRequestrequest,HttpServletResponseresponse){本Servlet}} 的method是否可同時(shí)是static,是否可同時(shí)是native,是否可同時(shí)是synchronized?methodstaticstatic與子native 混用。例如,F(xiàn)ileOutput類要硬件打交道,底層的實(shí)現(xiàn)用的是操作系統(tǒng)相關(guān)的api實(shí)現(xiàn),例如,在windows用c語(yǔ)言實(shí)現(xiàn)的,所以,查看jdk的源代碼,可以發(fā)現(xiàn)FileOutputStream的open方法的定義如下:privatenativevoidopen(Stringname)throwsjavacjavaccc語(yǔ)言函數(shù)。由于我cjavacjava對(duì)接上,javac函數(shù)相對(duì)應(yīng)的方法,java中對(duì)應(yīng)的方法不需要寫(xiě)具體的代碼,但需要面native。關(guān)于synchronized與 中,從來(lái)沒(méi)見(jiàn)到過(guò)這種情況,并且我覺(jué)得synchronized應(yīng)該是作用在一個(gè)具體的方法上才有意義。而且,方法上的synchronized同步所使用的同步鎖對(duì)象是this,而抽象方法上無(wú)法確定this是什么。26、什么是內(nèi)部類?StaticNestedClassInnerClass的不同,publicclass{intout_x =0;publicvoidmethod(){Inner1inner1=newpublicclass //{public{out_x=}}Inner2inner2=new}publicclass {}}在方法體外面定義的內(nèi)部類的類型可以是public,protecte,默認(rèn)的,private等4種類Outerouter=newOuter.Inner1inner1=outer.new樣,但這種內(nèi)部類的前面可以使用final或 局部變量,但是,該局部變量前必須加final修飾符。eclipse寫(xiě)代碼試試,根據(jù)開(kāi)發(fā)工具提示的各類錯(cuò)誤信息就可以馬publicclass{publicvoid{new}

new

publicvoid}}staticStaticNestedClass,它不再具有內(nèi)部類的特性,所有,從狹義上講,它不是內(nèi)部類。StaticNestedClass與普通類在運(yùn)行時(shí)的行為和功能上沒(méi)有什么區(qū)別,只是在編程時(shí)的語(yǔ)法上有一public、protected、默認(rèn)的、private等多種類型,而普通類只能定義成public和默認(rèn)的這兩種類型。在外面StaticNestedClass類的名稱為“外部類名.內(nèi)部類名”StaticNestedClass,InnerOuterStaticNestedClass,那么可以使用如下語(yǔ)句創(chuàng)Inner類:Outer.Innerinner=staticNestedClass不依賴于外部類的實(shí)例對(duì)象,所以,staticNestedClass能外部類的非static成員變量(不能直接,需要?jiǎng)?chuàng)建外部類實(shí)例才能非靜態(tài)變量)。當(dāng)在外部類中StaticNestedClass時(shí),可以直接使用StaticNestedClass的名字,而不需要加上外部類的名字了,在StaticNestedClass中也可以直接外部類的static的StaticNestedClassstatic關(guān)鍵StaticNestedClass與普通方法中的內(nèi)部類的應(yīng)用方式很相似,它除了可以直接外部類中的static的成員變量,還可以靜態(tài)方法中的局部變量,但是,final修飾符。27、內(nèi)部類可以它的包含類的成員嗎?有沒(méi)有什么限制如果你把靜態(tài)嵌套類當(dāng)作內(nèi)部類的一種特例,那在這種情況下不可以外部類的普通員變量,而只能外部類中的靜態(tài)成員,例如,下面的代碼class{staticintstaticclass{void{}}}28、AnonymousInnerClass(內(nèi)部類)是否可以extends(繼承)其它類,是否可implements(實(shí)現(xiàn))interface(接口)?可以繼承其他類或?qū)崿F(xiàn)其他接口。不僅是可以,而是必須publicstaticvoidmain(String[]args)new}publicvoidtest(){}}qq群有個(gè)網(wǎng)友正好問(wèn)過(guò)這個(gè)問(wèn)題,我覺(jué)得挺有趣,就getClass()ObjectfinaltestgetClass().getName()getClass()方Test。30、String是最基本的數(shù)據(jù)類型嗎java.lang.Stringfinal類型的,因此不可以繼承這個(gè)類、不能修改這個(gè)類。為了提高效StringBuffer類31、Strings="o";s=s+"world!";這兩行代碼執(zhí)行后,原始的對(duì)象中的內(nèi)容到底變了沒(méi)有String被設(shè)計(jì)成不可變(immutable)類,所以它的所有對(duì)象都是不可變對(duì)象。在這段代碼中,s原先指向一個(gè)String對(duì)象,內(nèi)容是"o",然后我們對(duì)s進(jìn)行了+操作,s所指向的那個(gè)對(duì)象是否發(fā)生了改變呢?答案是沒(méi)有。這時(shí),s不指向原來(lái)那個(gè)對(duì)象了,而指向了另一個(gè)String對(duì)象,內(nèi)容為"oworld!",原來(lái)那個(gè)對(duì)象還存在于內(nèi)存之中,只是s這個(gè)變量不再指向它了。String來(lái)代表字符串的話會(huì)引起很大的內(nèi)存開(kāi)銷。因StringString對(duì)StringBuffer類,它允許修改,而不是每個(gè)不同的字符串同時(shí),我們還可以知道,如果要使用內(nèi)容相同的字符串,不必每次都new一個(gè)String。例如我們要在構(gòu)造器中對(duì)一個(gè)名叫s的String變量進(jìn)行初始化,把它設(shè)置為初始值,應(yīng)publicclassDemo{privateStrings;publicDemos="Initial}}s=newString("InitialStringString對(duì)象來(lái)表示就可以Strings都指向同一上面的結(jié)論還基于這樣一個(gè)事實(shí):對(duì)于字符串常量,如果內(nèi)容相同,Java認(rèn)為它們代表同一個(gè)String對(duì)象。而用關(guān)鍵字new調(diào)用構(gòu)造器,總是會(huì)創(chuàng)建一個(gè)新的對(duì)象,無(wú)論內(nèi)容是否StringString,很多Java標(biāo)準(zhǔn)類庫(kù)中的類都是不可變的。在開(kāi)發(fā)一個(gè)系統(tǒng)的時(shí)候,我們有時(shí)候也需要設(shè)計(jì)不可每個(gè)不同的狀態(tài)都要一個(gè)對(duì)象來(lái)代表,可能會(huì)造能上的問(wèn)題。所以Java標(biāo)準(zhǔn)類庫(kù)還提供了一個(gè)可變版本,即StringBuffer。32、是否可以繼承String類Stringfinal33、StringsnewString("xyz");創(chuàng)建了幾個(gè)StringObject?二者之間有什多少遍,都是緩沖區(qū)中的那一個(gè)。NewString每寫(xiě)一遍,就創(chuàng)建一個(gè)新的對(duì)象,它一句那個(gè)常量”xyz”String對(duì)象。如果以前就用過(guò)’xyz’,這句代表就34、StringStringBuffer的區(qū)StringStringBuffer類StringBuffers來(lái)動(dòng)態(tài)構(gòu)造字符數(shù)據(jù)。另外,Stringequals方法,newString(“abc”).equals(newString(“abc”)true,StringBufferequals方法,所以,newStringBuffer(“abc”).equals(newStringBuffer(“abc”)false。StringBuffersbf=newStringBuffer();for(inti=0;i<100;i++){}StringBuffer對(duì)象,而下面的代碼效率很低,因Stringstr=newString();for(inti=0;i<100;i++){str=str+}StringBuilderStringBuffer的區(qū)別。StringequalshashCodeStringBufferequals方法和hashCode方法,所以,將StringBuffer對(duì)象進(jìn)Java集合類中時(shí)會(huì)出現(xiàn)問(wèn)題。jdkapi 用正則表達(dá)式,代碼大概為:Stringresult= 用StingTokenizer,代碼為:StringTokenizer tokener=String[]result=newString[tokener.countTokens()];Inti=0;36、數(shù)組有沒(méi)有l(wèi)ength()這個(gè)方法?String有沒(méi)有l(wèi)ength()這個(gè)方法length()length的屬性。Stringlength()37、下面這條語(yǔ)句一共創(chuàng)建了多少個(gè)對(duì)象:StringStrings1="a";Strings2=s1+"b";Strings3aSystem.out.println(s2=="ab");System.out.println(s3==第一條語(yǔ)句打印的結(jié)果為false,第二條語(yǔ)句打印的結(jié)果為true,這說(shuō)明javac編譯可以對(duì)String對(duì)象。寫(xiě)如下兩行代碼,Strings="a"+"b"+"c"+"d";System.out.println(s=="abcd");{}會(huì)不會(huì)被執(zhí)行,什么時(shí)候被執(zhí)行,在return前還是后也許你的答案是在return之前,但往更細(xì)地說(shuō),我的答案是在return中間執(zhí)行,請(qǐng)看下面*@paramargsaddbyzxx,Dec9,publicstaticvoidmain(String[]args)//TODOAuto-generatedmethodstub}staticint{intx={}{}}}139、下面的程序代碼輸出的結(jié)果是多少public {public main(String{smallTt =newsmallT(); b= }public {{}{}}}

return1return2現(xiàn),tryreturnfinallyreturn語(yǔ)句先執(zhí)行,finally語(yǔ)句后執(zhí)行,所以,返回的結(jié)果是2。Return并不是讓函數(shù)馬上返回,而return語(yǔ)句執(zhí)行后,將把返回結(jié)果放置進(jìn)函數(shù)棧中,此時(shí)函數(shù)并不是馬上返回,它要執(zhí)finally語(yǔ)句后才真正開(kāi)始返回。*@paramargsaddbyzxx,Dec9,publicstaticvoidmain(String[]args)//TODOAuto-generatedmethodstub}int{{}

return{return}}int{return}int{return}}結(jié)論:finallyreturnbreak40、final,finallyfinalize的區(qū)別final用于屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。內(nèi)部類要局部變量,局部變量必須定義成final類型,例如,一段代碼……finallyfinalize是Object類的一個(gè)方法,在收集器執(zhí)行的時(shí)候會(huì)調(diào)用被回收對(duì)象的此方法,可以覆蓋此方法提供收集時(shí)的其他資源回收,例如關(guān)閉文件等。JVM不保證此方法總41、運(yùn)行時(shí)異常與一般異常有何異同能遇到的異常,是一種常見(jiàn)運(yùn)行錯(cuò)誤。java編譯器要求方法必須拋出可能發(fā)生的非運(yùn)error表示恢復(fù)不是不可能但很的情況下的一種嚴(yán)重問(wèn)題。比如說(shuō)內(nèi)存溢出。不可能exception表示一種設(shè)計(jì)或?qū)崿F(xiàn)問(wèn)題。也就是說(shuō),它表示如43、Java中的異常處理機(jī)制的簡(jiǎn)單原理和應(yīng)用異常是指java程序運(yùn)行時(shí)(非編譯)所發(fā)生的情況或錯(cuò)誤,與現(xiàn)實(shí)生活中的很個(gè)對(duì)象來(lái)表示,Java使用面向?qū)ο蟮姆绞絹?lái)處理異常,它把程序中發(fā)生的每個(gè)異常也都分JavaJava類表示,所有異常的根類為java.lang.Throwable,Throwable下面又派生了兩個(gè)子類:ErrorException,Error表示線程死鎖等系統(tǒng)問(wèn)題。Exception表示程序還能夠克服和恢復(fù)的問(wèn)題,其中又分為系統(tǒng)異ception,(NullPointerExcption(ClassCastExceptionjavatry..catch處理或用throws繼續(xù)拋給上層調(diào)用方法處理,所以普通異常也稱為checked異常,unchecked異常。44、請(qǐng)寫(xiě)出你最常見(jiàn)到的5個(gè)runtimeexception所謂系統(tǒng)異常,就是…..RuntimeExceptionjdkdoc中查RuntimeException類,就可以看到其所有的子類列表,也就是看到了所有的系統(tǒng)異常。我分別代表什么意義?在try塊中可以拋出異常嗎?46、java中有幾種方法可以實(shí)現(xiàn)一個(gè)線程?用什么關(guān)鍵字修飾同步方法?stop()suspend()方法為何不推薦使用?newThread(){}.start();Threadrun方法,newThread(){}表示一個(gè)Thread的子類的實(shí)例對(duì)象,子類加上run方法后的代碼如下:newThread(){publicvoidrun(){}newThread(newRunnable(){}).start();ThreadRunnable對(duì)象的run方法,newRunnable(){}表示一個(gè)Runnable的子類的實(shí)例對(duì)象,runnable的子類run方法后的代碼如下:newThread(newpublic}}java5開(kāi)始,還有如下一些線程池創(chuàng)建多線程的方式:ExecutorServicepoolExecutors.newFixedThreadPool(3)for(inti=0;i<10;i++){pool.execute(newRunable(){publicvoid}Executors.newCachedThreadPool().execute(newRunable(){publicvoidrun(){}});Executors.newSingleThreadExecutor().execute(newRunable(){publicvoidrun(){}});newThread()newThread(runnable)形式,第一種直接調(diào)用threadrunThreadnewSubThread()。第二種調(diào)runnablerun方法。有兩種實(shí)現(xiàn)方法,分別是繼承Thread類與實(shí)現(xiàn)Runnable接口synchronized關(guān)鍵字修飾同步方法使用stop(),是因?yàn)樗话踩?。它?huì)解除由線程獲取的所有鎖定,而且如果對(duì)象處于問(wèn)題所在。suspend()suspend()的時(shí)候,目標(biāo)線程會(huì)停下來(lái),但suspend()Thread類中置入一個(gè)標(biāo)志,線程應(yīng)該活動(dòng)還是掛起。若標(biāo)志線程應(yīng)該掛起,便用wait()命其進(jìn)入等待狀態(tài)。若標(biāo)志線程應(yīng)當(dāng)恢復(fù),則用一個(gè)notify()重新啟動(dòng)線程。47、sleep()wait()有什么區(qū)別(網(wǎng)上的答案:sleep是線程類(Thread)的方法,導(dǎo)致此線程暫停執(zhí)行指定時(shí)間,給執(zhí)行機(jī)會(huì)給其他線程,但是狀態(tài)依然保持,到時(shí)后會(huì)自動(dòng)恢復(fù)。調(diào)用sleep不會(huì)釋waitObjectwait方法導(dǎo)致本線程放棄對(duì)象鎖,進(jìn)notify方法(notifyAll)后本線程才sleepcpu,cpusleep指定的時(shí)間過(guò)后,cpu才會(huì)回到這個(gè)線程上繼續(xù)往下執(zhí)行,如果當(dāng)前線程進(jìn)入了同步鎖,sleep方法并不sleepcpu,但其他被同步鎖擋住了的線程也無(wú)法得到執(zhí)行。wait是指在一個(gè)已經(jīng)進(jìn)入了同步鎖的線程內(nèi),讓自己暫時(shí)讓出同步鎖,以便notify方法(notifywait方法的線程可以去參與獲得鎖的競(jìng)爭(zhēng)了,但不是馬上得notify方法后面的代碼還有很多,需要notfiy方法后增加一個(gè)等待和一些代碼,看看效果waitwait狀態(tài)和程序可以再次得到鎖后繼續(xù)向下運(yùn)行。對(duì)wait的講解一定要配合例子代碼來(lái)說(shuō)明,才顯得自己真明白。packagecom.publicclassMultiThread*publicstaticvoidmain(String[]args)//TODOAuto-generatedmethodstubnewThread(newThread1()).start();try{}catch(InterruptedExceptione)//TODOAuto-generatedcatchblock}new}privatestaticclassThread1implements{publicvoidrun()//TODOAuto-generated//由于這里的Thread1Thread2run方法要用同一對(duì)象作為監(jiān)視器,我們這里thisThread2thisThread1this不是同一個(gè)對(duì)象。我們用MultiThread.class這個(gè)字節(jié)碼對(duì)象,當(dāng)前虛擬機(jī)里這個(gè)變量時(shí),指向的都是同一個(gè)對(duì)synchronizedSystem.out.println("thread1istry了synchronized關(guān)鍵字管轄的代碼范圍,另式就是在synchronized關(guān)鍵字管轄的waitwait方法釋放鎖。}catch(InterruptedExceptione)//TODOAuto-generatedcatchblock}System.out.println("thread1isgoingon...");System.out.println("thread1isbeingover!");}}}privatestaticclassThread2implements{publicvoidrun()//TODOAuto-generatedsynchronizedSystem.out.println("thread2notifyotherthreadcanreleasewait//notifythread2sleep方法休息了10System.out.println("thread2issleetentry}catch(InterruptedExceptione)//TODOAuto-generatedcatchblock}System.out.println("thread2isgoingon...");System.out.println("thread2isbeingover!");}}}}48、同步和異步有何異同,在什么情況下分別使用他們?舉例說(shuō)明下面兩個(gè)方法同步嗎?(自己發(fā)明class{synchronizedstaticvoidsay{}synchronizedvoid}50、多線程有幾種實(shí)現(xiàn)方法?同步有幾種實(shí)現(xiàn)方法ThreadRunnablesynchronized,waitnotifyInterruptedException異常。JVM確定喚醒哪個(gè)線程,而且不是按優(yōu)先級(jí)。51、啟動(dòng)一個(gè)線程是用run()還是start()?52、當(dāng)一個(gè)線程進(jìn)入一個(gè)對(duì)象synchronized方法后,其它線程是否可this。53、線程的基本概念、線程的基本狀態(tài)以及狀態(tài)之間的關(guān)maincpu,它怎么能夠同時(shí)執(zhí)行多段程序呢?這是從宏觀上來(lái)看的,cpuab線索,切換時(shí)間很快,給人的感覺(jué)是a,b在同時(shí)執(zhí)行,好比大家在同一個(gè)上網(wǎng),只有一條到外部網(wǎng)線,其實(shí),ab傳數(shù)據(jù),由于切換時(shí)間很短暫,所以,大家感覺(jué)都在狀態(tài):就緒,運(yùn)行,synchronize阻塞,waitsleep掛起,結(jié)束。waitsynchronizedstart方法后線程進(jìn)入就緒狀態(tài),線程調(diào)度系統(tǒng)將就緒狀態(tài)的線程轉(zhuǎn)為運(yùn)行狀synchronizedsynchronized獲得鎖后,由阻wait方法轉(zhuǎn)為掛起狀態(tài),當(dāng)線程關(guān)聯(lián)的代碼執(zhí)行完后,主要相同點(diǎn):Locksynchronized主要不同點(diǎn):Lock有比synchronized更精確的線程語(yǔ)義和更好的性能。synchronized會(huì)自動(dòng)釋放鎖,而Lock一定要求程序員手工釋放,并且必須在finally從句中釋放。Lock還tryLock方法可以非阻塞方式去拿鎖。舉例說(shuō)明(lock進(jìn)行了改寫(xiě)packagecom.importimport*privateintprivateLocklockpublicstaticvoidmain(String[]args)//TODOAuto-generatedmethodstubThreadTesttt=newThreadTest();for(inti=0;i<2;i++){newThread(tt.newnewThread(tt.new}}privateclass{publicvoidrun()//TODOAuto-generated{/*synchronized(ThreadTest.this){{System.out.println("j--="+j--{}}}}privateclass{publicvoidrun()//TODOAuto-generated{/*synchronized(ThreadTest.this){System.out.println("j++="+j++);{System.out.println("j++="+{}}}}}55、設(shè)計(jì)4個(gè)線程,其中兩個(gè)線程每次對(duì)j增加1,另外兩個(gè)線程對(duì)j每次減1。寫(xiě)出程序jpublicclass{privateintpublicstaticvoidmain(Stringargs[]){Incinc=tt.newInc();Decdec=tt.newDec();Threadt=newThread(inc);t=newThread(dec);}}privatesynchronizedvoidinc(){}privatesynchronizedvoiddec(){}classIncimplementsRunnable{publicvoidrun(){}}}classDecimplementsRunnable{publicvoidrun(){}}}}{JMangerj=newJManager();{new}void{for(int{newnewRunnable(){publicvoidnewThread(newRunnable(){publicvoid}}}class{privatej=publicsynchronized{}publicsynchronized{}}、子線程循環(huán)次,接著主線程循環(huán),接著又回到子線程循環(huán)次,接著再回到主線程又循環(huán),如此循環(huán)次,請(qǐng)寫(xiě)出程序。*publicstaticvoidmain(String[]args)//TODOAuto-generatedmethodnew}publicvoid{finalBusinessbusinessnewnew{publicvoidrun(){}}}for(int{}}privateclass{booleanbShouldSubtrue;//publicsynchronizedvoidMainThread(int{try{}catch(InterruptedExceptione)//TODOAuto-generatedcatchblock}for(int{System.out.println(Thread.currentThread().getName()+":i="+i+",j="+}bShouldSub}publicsynchronizedvoidSubThread(int{try{}catch(InterruptedExceptione)//TODOAuto-generatedcatchblock}{System.out.println(Thread.currentThread().getName()+":i="+i+",j="+}bShouldSub}}}packagecom.privatestaticpublicstaticvoidmain(String[]args)//TODOAuto-generatedmethod/*newThread(){publicvoid{for(int{for(int{System.out.println("i="+i+",j="+}}}//finalStringstr=newnew{public{{{trycatch(InterruptedExceptione){}}{"i="+i+",j="+j);}bShouldMain=}

}}}for(int{synchronized{trycatch(InterruptedExceptione){}}{"i="+i+",j="+j);}bShouldMain=false;}}}}jdk5中的并發(fā)庫(kù)來(lái)實(shí)現(xiàn)的:importjava.util.concurrent.Executors;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.locks.Lock;importjava.util.concurrent.locks.ReentrantLock;importjava.util.concurrent.locks.Condition;publicclass{privatestaticLocklock=newprivatestaticConditionsubThreadCondition=lock.newCondition();privatestaticbooleanbBhouldSubThread=false;publicstaticvoidmain(String[]{ExecutorServicethreadPool=Executors.newFixedThreadPool(3);publicvoid{{{{System.out.println(Thread.currentThread().getName()+",j="+}bBhouldSubThread=false;{}{}}}{{{System.out.println(Thread.currentThread().getName()+",j="+}bBhouldSubThread=true;{}{}}}}57、介紹Collection框架的結(jié)答:隨意發(fā)揮題,天北誰(shuí)便談,只要讓別覺(jué)得你知識(shí)淵博,理解透徹即可58、Collection框架中實(shí)現(xiàn)比較要實(shí)現(xiàn)什么接List接口(ListCollection接口,他們都是有序集合,即存HashSet之類的集合的最大不同處,HashSet之類的集合不可以按索引號(hào)去檢索其中的元素,也不允許有重復(fù)的元素(hashsetArrayListVector的功ArrayListVectorrArryList是線程序不安全的,它的方法之間是線程不同步的。如果只有一個(gè)線程會(huì)到集合,那最好是使用ArryList,因?yàn)椴豢紤]線程安全,效率會(huì)高些;如果有多個(gè)線程會(huì)到集合t,因?yàn)椴恍枰覀冏约涸偃タ紤]和編寫(xiě)線程安全的代碼。Vector&ArrayList、Hashtable&HashMap,要記住線程安全的問(wèn)題,記住VectorHashtablejava一誕生就提供了的,它們是線程安全的,ArrayList與HashMap是java2時(shí)才提供的,它們是線程不安全的。所以,我們講先講老的ArrayList與Vector都有一個(gè)初始的容量大小,當(dāng)進(jìn)它們里面的元素的個(gè)數(shù)超過(guò)了容量時(shí),就需要增加ArrayList與Vector的空間,每次要增加空間時(shí),不是用與程序效率之間要取得一定的平衡。VectorArrayList的增長(zhǎng)策略在文檔中沒(méi)有明確規(guī)定(從源代碼看到的是增長(zhǎng)為原來(lái)的1.5倍。ArrayListVector都可以設(shè)置初始的空間大小,VectorArrayList沒(méi)有提供設(shè)置60、HashMapHashtable的區(qū)(條理上還需要整理,也是先說(shuō)相同點(diǎn),再說(shuō)不同點(diǎn)HashMapHashtable的輕量級(jí)實(shí)現(xiàn)(非線程安全的實(shí)現(xiàn)Map接口,主HashMap允許空(null)鍵值(key),由于非線程安全,在只有一個(gè)線程HashMapnullentrykey或者valueHashtableHashMapHashtablecontainscontainsvaluecontainsKeycontainsHashtableDictionaryHashMapJava1.2Mapinterface的一個(gè)實(shí)最大的不同是,HashtableSynchronizeHashMapHashtableHashMapHashtableHashMaphash/rehash算法都大概一樣,所以性能不會(huì)有很大的差一.歷史原因:HashtableDictionary類的,HashMapJava1.2二.同步性:HashtableHashMap是線程序不安全三.HashMapkey61、ListMap區(qū)別一個(gè)是單列數(shù)據(jù)的集合,另一個(gè)是鍵和值這樣的雙列數(shù)據(jù)的集合,List中的數(shù)據(jù)是有順序,并且允許重復(fù);Map中的數(shù)據(jù)是沒(méi)有順序的,其鍵是不能重復(fù)的,它62、List,SetMap是否繼承自Collection接口List,Set是,Map63、List、Map、Set三個(gè)接口,存取元素時(shí),各有什么特點(diǎn)首先,ListSet具有相似性,它們都是單列元素的集合,所以,它們有一個(gè)功共同的父Collection。Set里面不允許有重復(fù)的元素,所謂重復(fù),即不能有兩個(gè)相等(注意,不是僅僅是相同)SetASet集合再存入一個(gè)B對(duì)象,但B對(duì)象與A對(duì)象equals相等,則B對(duì)象不進(jìn)去,所以,Setaddbooleanadd方法可成功trueequalsadd方法無(wú)法加入該元素,返回結(jié)果為false。Set取元素時(shí),沒(méi)法說(shuō)取第幾個(gè),只能以ItorList表示有先后順序的集合,注意,不是那種按、按大小、按價(jià)格之類的排add(Obje)方法時(shí),每次加入的對(duì)象就像火車站買(mǎi)票有排隊(duì)順序一add(intindex,Obje)方法,就可以指定當(dāng)前對(duì)象在集合中的存放位置。一個(gè)對(duì)象可以被反復(fù)進(jìn)List中,每調(diào)用一次add方法,這個(gè)對(duì)象就入進(jìn)集合中一次,其實(shí),并不是把這個(gè)對(duì)象本身進(jìn)了集合add合中有多個(gè)索引指向了這個(gè)對(duì)象,如圖x所示。List除了可以以Itor接口取得所有的元素,再逐一遍歷各個(gè)元外,還可以調(diào)用get(indexi)來(lái)明確說(shuō)明取第幾個(gè)。MapList和Setput方法,定義如下:put(objkey,objvalue),每次時(shí),要一對(duì)key/value,不能重復(fù)的key,這個(gè)重復(fù)的規(guī)equalskeyvalueget(Objectkey)返回keyvaluekeyvaluekey和valueMap.Entry對(duì)象的集合。List以特定次序來(lái)持有元素,可有重復(fù)元素。Set無(wú)法擁有重復(fù)元素,內(nèi)部排序。Mapkey-value值,valueHashSet按照hashcode值的某種運(yùn)算方式進(jìn)行,而不是直接按hashCode值的大小進(jìn)行。例如,"abc">78,"def">62,"xyz">65在hashSet中的順序不是楚,看本次培訓(xùn)學(xué)員當(dāng)中有多少能看懂源碼。LinkedHashSet按插入的順序,那被存hashcode方法還有什么作用呢?學(xué)員想想!hashset集合比較兩個(gè)對(duì)象是否相hashcodeequals方法是否相等。newStudent插HashSetHashSetsizehashcodeequalssize。HashSet中卻加不了多次的。ArrayList和Vector都是使用數(shù)組方式數(shù)據(jù),此數(shù)組元素?cái)?shù)大于實(shí)際的數(shù)據(jù)以便增存操作,所以索引數(shù)據(jù)快而插入數(shù)據(jù)慢,Vectorsynchronized方法(線程安全,通常性能上較ArrayList差,而LinkedList使向鏈表實(shí)現(xiàn),按序號(hào)索引數(shù)據(jù)LinkedList也是線程不安全的,LinkedListLinkedList可以被當(dāng)作65、去掉一個(gè)Vector集合中重復(fù)的元VectornewVector=newVector();For(inti=0;i<vector.size();i++){Objectobj=}還有一種簡(jiǎn)單的方式,HashSetsetnew66、CollectionCollections的區(qū)別CollectionSetCollections是針對(duì)集合類的一個(gè)幫助類,他提供一系列靜態(tài)方法實(shí)現(xiàn)對(duì)各種集合的搜索、67、Set里的元素是不能重復(fù)的,那么用什么方法來(lái)區(qū)分重復(fù)與否呢?是用==equals()?它們有何區(qū)別?Setequals()68、你所知道的集合類都有哪些?主要方法ListMapListArrayListVector,它們是可變大小的列表,比較適合構(gòu)建、和操作任何類型對(duì)象的元素列表。List適用于按數(shù)值索Map提供了一個(gè)更通用的元素方法。Map集合類用于元素對(duì)(稱作"鍵"和""

setadd,remove,containsmap,大put,remove,containseclispe下按點(diǎn)操作符,很自然Listget(intindex)這樣的方法,因?yàn)閟etget(intindex)這樣的方法。List和set都可以迭代出所有元素,迭代時(shí)先要得到一個(gè)itor對(duì)象,所以,set和list類都有一個(gè)itor方法,用于返回那個(gè)itor對(duì)象。map可以返回三個(gè)集合,一個(gè)是返回所有的key的集合,另valuekey和valueEntrySet對(duì)象的集合,mapgetkeykeyvalue。69、兩個(gè)對(duì)象值相同(x.equals(y)true),但卻可有不同的hashcode,這HashSetHashMapequalshashcodeHashSetHashMaphashcode沒(méi)有什么關(guān)系了,這時(shí)候hashcode不等是可以的,例如arrayList的對(duì)象就不用實(shí)現(xiàn)hashcode,當(dāng)然,我們沒(méi)使用的是父類的compareTo方法,還是使用的子類的compareTo方法,還(addpublicclass parableprivateintage=publicParent(intthis.age=}publicintcompareTo(Object//TODOAuto-generatedmethodstubSystem.out.println("methodofparent");Parento1=(Parent)o;}}publicclassChildextendsParentpublic}publicintcompareTo(Object//TODOAuto-generatedmethods

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論