freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

java工程師面試題(編輯修改稿)

2024-10-14 03:48 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 ic,private,protected,以及不寫(xiě)時(shí)的區(qū)別這四個(gè)作用域的可見(jiàn)范圍如下表所示。說(shuō)明:如果在修飾的元素上面沒(méi)有寫(xiě)任何訪問(wèn)修飾符,則表示friendly。作用域當(dāng)前類(lèi) 同一package 子孫類(lèi) 其他package public√√√√protected √√√friendly√√private√備注:只要記住了有4種訪問(wèn)權(quán)限,4個(gè)訪問(wèn)范圍,然后將全選和范圍在水平和垂直方向上分別按排從小到大或從大到小的順序排列,就很容易畫(huà)出上面的圖了。1Overload和Override的區(qū)別。Overloaded的方法是否可以改變返回值的類(lèi)型?Overload是重載的意思,Override是覆蓋的意思,也就是重寫(xiě)。重載Overload表示同一個(gè)類(lèi)中可以有多個(gè)名稱(chēng)相同的方法,但這些方法的參數(shù)列表各不相同(即參數(shù)個(gè)數(shù)或類(lèi)型不同)。重寫(xiě)Override表示子類(lèi)中的方法可以與父類(lèi)中的某個(gè)方法的名稱(chēng)和參數(shù)完全相同,通過(guò)子類(lèi)創(chuàng)建的實(shí)例對(duì)象調(diào)用這個(gè)方法時(shí),將調(diào)用子類(lèi)中的定義方法,這相當(dāng)于把父類(lèi)中定義的那個(gè)完全相同的方法給覆蓋了,這也是面向?qū)ο缶幊痰亩鄳B(tài)性的一種表現(xiàn)。子類(lèi)覆蓋父類(lèi)的方法時(shí),只能比父類(lèi)拋出更少的異常,或者是拋出父類(lèi)拋出的異常的子異常,因?yàn)樽宇?lèi)可以解決父類(lèi)的一些問(wèn)題,不能比父類(lèi)有更多的問(wèn)題。子類(lèi)方法的訪問(wèn)權(quán)限只能比父類(lèi)的更大,不能更小。如果父類(lèi)的方法是private類(lèi)型,那么,子類(lèi)則不存在覆蓋的限制,相當(dāng)于子類(lèi)中增加了一個(gè)全新的方法。至于Overloaded的方法是否可以改變返回值的類(lèi)型這個(gè)問(wèn)題,要看你倒底想問(wèn)什么呢?這個(gè)題目很模糊。如果幾個(gè)Overloaded的方法的參數(shù)列表不一樣,它們的返回者類(lèi)型當(dāng)然也可以不一樣。但我估計(jì)你想問(wèn)的問(wèn)題是:如果兩個(gè)方法的參數(shù)列表完全一樣,是否可以讓它們的返回值不同來(lái)實(shí)現(xiàn)重載Overload。這是不行的,我們可以用反證法來(lái)說(shuō)明這個(gè)問(wèn)題,因?yàn)槲覀冇袝r(shí)候調(diào)用一個(gè)方法時(shí)也可以不定義返回結(jié)果變量,即不要關(guān)心其返回結(jié)果,例如,(key)方法時(shí),雖然remove方法有返回值,但是我們通常都不會(huì)定義接收返回結(jié)果的變量,這時(shí)候假設(shè)該類(lèi)中有兩個(gè)名稱(chēng)和參數(shù)列表完全相同的方法,僅僅是返回類(lèi)型不同,java就無(wú)法確定編程者倒底是想調(diào)用哪個(gè)方法了,因?yàn)樗鼰o(wú)法通過(guò)返回結(jié)果類(lèi)型來(lái)判斷。override可以翻譯為覆蓋,從字面就可以知道,它是覆蓋了一個(gè)方法并且對(duì)其重寫(xiě),以求達(dá)到不同的作用。對(duì)我們來(lái)說(shuō)最熟悉的覆蓋就是對(duì)接口方法的實(shí)現(xiàn),在接口中一般只是對(duì)方法進(jìn)行了聲明,而我們?cè)趯?shí)現(xiàn)時(shí),就需要實(shí)現(xiàn)接口聲明的所有方法。除了這個(gè)典型的用法以外,我們?cè)诶^承中也可能會(huì)在子類(lèi)覆蓋父類(lèi)中的方法。在覆蓋要注意以下的幾點(diǎn):覆蓋的方法的標(biāo)志必須要和被覆蓋的方法的標(biāo)志完全匹配,才能達(dá)到覆蓋的效果;覆蓋的方法的返回值必須和被覆蓋的方法的返回一致;覆蓋的方法所拋出的異常必須和被覆蓋方法的所拋出的異常一致,或者是其子類(lèi);被覆蓋的方法不能為private,否則在其子類(lèi)中只是新定義了一個(gè)方法,并沒(méi)有對(duì)其進(jìn)行覆蓋。overload對(duì)我們來(lái)說(shuō)可能比較熟悉,可以翻譯為重載,它是指我們可以定義一些名稱(chēng)相同的方法,通過(guò)定義不同的輸入?yún)?shù)來(lái)區(qū)分這些方法,然后再調(diào)用時(shí),VM就會(huì)根據(jù)不同的參數(shù)樣式,來(lái)選擇合適的方法執(zhí)行。在使用重載要注意以下的幾點(diǎn):在使用重載時(shí)只能通過(guò)不同的參數(shù)樣式。例如,不同的參數(shù)類(lèi)型,不同的參數(shù)個(gè)數(shù),不同的參數(shù)順序(當(dāng)然,同一方法內(nèi)的幾個(gè)參數(shù)類(lèi)型必須不一樣,例如可以是fun(int,float),但是不能為fun(int,int));不能通過(guò)訪問(wèn)權(quán)限、返回類(lèi)型、拋出的異常進(jìn)行重載;方法的異常類(lèi)型和數(shù)目不會(huì)對(duì)重載造成影響;對(duì)于繼承來(lái)說(shuō),如果某一方法在父類(lèi)中是訪問(wèn)權(quán)限是priavte,那么就不能在子類(lèi)對(duì)其進(jìn)行重載,如果定義的話,也只是定義了一個(gè)新方法,而不會(huì)達(dá)到重載的效果。1構(gòu)造器Constructor是否可被override?構(gòu)造器Constructor不能被繼承,因此不能重寫(xiě)Override,但可以被重載Overload。接口是否可繼承接口? 抽象類(lèi)是否可實(shí)現(xiàn)(implements)接口? 抽象類(lèi)是否可繼承具體類(lèi)(concrete class)? 抽象類(lèi)中是否可以有靜態(tài)的main方法?接口可以繼承接口。抽象類(lèi)可以實(shí)現(xiàn)(implements)接口,抽象類(lèi)是否可繼承具體類(lèi)。抽象類(lèi)中可以有靜態(tài)的main方法。備注:只要明白了接口和抽象類(lèi)的本質(zhì)和作用,這些問(wèn)題都很好回答,你想想,如果你是java語(yǔ)言的設(shè)計(jì)者,你是否會(huì)提供這樣的支持,如果不提供的話,有什么理由嗎?如果你沒(méi)有道理不提供,那答案就是肯定的了。只有記住抽象類(lèi)與普通類(lèi)的唯一區(qū)別就是不能創(chuàng)建實(shí)例對(duì)象和允許有abstract方法。2寫(xiě)clone()方法時(shí),通常都有一行代碼,是什么?clone 有缺省行為,()。因?yàn)槭紫纫迅割?lèi)中的成員復(fù)制到位,然后才是復(fù)制自己的成員。2面向?qū)ο蟮奶卣饔心男┓矫嬗?jì)算機(jī)軟件系統(tǒng)是現(xiàn)實(shí)生活中的業(yè)務(wù)在計(jì)算機(jī)中的映射,而現(xiàn)實(shí)生活中的業(yè)務(wù)其實(shí)就是一個(gè)個(gè)對(duì)象協(xié)作的過(guò)程。面向?qū)ο缶幊叹褪前船F(xiàn)實(shí)業(yè)務(wù)一樣的方式將程序代碼按一個(gè)個(gè)對(duì)象進(jìn)行組織和編寫(xiě),讓計(jì)算機(jī)系統(tǒng)能夠識(shí)別和理解用對(duì)象方式組織和編寫(xiě)的程序代碼,這樣就可以把現(xiàn)實(shí)生活中的業(yè)務(wù)對(duì)象映射到計(jì)算機(jī)系統(tǒng)中。面向?qū)ο蟮木幊陶Z(yǔ)言有封裝、繼承、抽象、多態(tài)等4個(gè)主要的特征。1封裝:封裝是保證軟件部件具有優(yōu)良的模塊性的基礎(chǔ),封裝的目標(biāo)就是要實(shí)現(xiàn)軟件部件的“高內(nèi)聚、低耦合”,防止程序相互依賴(lài)性而帶來(lái)的變動(dòng)影響。在面向?qū)ο蟮木幊陶Z(yǔ)言中,對(duì)象是封裝的最基本單位,面向?qū)ο蟮姆庋b比傳統(tǒng)語(yǔ)言的封裝更為清晰、更為有力。面向?qū)ο蟮姆庋b就是把描述一個(gè)對(duì)象的屬性和行為的代碼封裝在一個(gè)“模塊”中,也就是一個(gè)類(lèi)中,屬性用變量定義,行為用方法進(jìn)行定義,方法可以直接訪問(wèn)同一個(gè)對(duì)象中的屬性。通常情況下,只要記住讓變量和訪問(wèn)這個(gè)變量的方法放在一起,將一個(gè)類(lèi)中的成員變量全部定義成私有的,只有這個(gè)類(lèi)自己的方法才可以訪問(wèn)到這些成員變量,這就基本上實(shí)現(xiàn)對(duì)象的封裝,就很容易找出要分配到這個(gè)類(lèi)上的方法了,就基本上算是會(huì)面向?qū)ο蟮木幊塘?。把握一個(gè)原則:把對(duì)同一事物進(jìn)行操作的方法和相關(guān)的方法放在同一個(gè)類(lèi)中,把方法和它操作的數(shù)據(jù)放在同一個(gè)類(lèi)中。例如,人要在黑板上畫(huà)圓,這一共涉及三個(gè)對(duì)象:人、黑板、圓,畫(huà)圓的方法要分配給哪個(gè)對(duì)象呢?由于畫(huà)圓需要使用到圓心和半徑,圓心和半徑顯然是圓的屬性,如果將它們?cè)陬?lèi)中定義成了私有的成員變量,那么,畫(huà)圓的方法必須分配給圓,它才能訪問(wèn)到圓心和半徑這兩個(gè)屬性,人以后只是調(diào)用圓的畫(huà)圓方法、表示給圓發(fā)給消息而已,畫(huà)圓這個(gè)方法不應(yīng)該分配在人這個(gè)對(duì)象上,這就是面向?qū)ο蟮姆庋b性,即將對(duì)象封裝成一個(gè)高度自治和相對(duì)封閉的個(gè)體,對(duì)象狀態(tài)(屬性)由這個(gè)對(duì)象自己的行為(方法)來(lái)讀取和改變。一個(gè)更便于理解的例子就是,司機(jī)將火車(chē)剎住了,剎車(chē)的動(dòng)作是分配給司機(jī),還是分配給火車(chē),顯然,應(yīng)該分配給火車(chē),因?yàn)樗緳C(jī)自身是不可能有那么大的力氣將一個(gè)火車(chē)給停下來(lái)的,只有火車(chē)自己才能完成這一動(dòng)作,火車(chē)需要調(diào)用內(nèi)部的離合器和剎車(chē)片等多個(gè)器件協(xié)作才能完成剎車(chē)這個(gè)動(dòng)作,司機(jī)剎車(chē)的過(guò)程只是給火車(chē)發(fā)了一個(gè)消息,通知火車(chē)要執(zhí)行剎車(chē)動(dòng)作而已。抽象:抽象就是找出一些事物的相似和共性之處,然后將這些事物歸為一個(gè)類(lèi),這個(gè)類(lèi)只考慮這些事物的相似和共性之處,并且會(huì)忽略與當(dāng)前主題和目標(biāo)無(wú)關(guān)的那些方面,將注意力集中在與當(dāng)前目標(biāo)有關(guān)的方面。例如,看到一只螞蟻和大象,你能夠想象出它們的相同之處,那就是抽象。抽象包括行為抽象和狀態(tài)抽象兩個(gè)方面。例如,定義一個(gè)Person類(lèi),如下:class Person{} 人本來(lái)是很復(fù)雜的事物,有很多方面,但因?yàn)楫?dāng)前系統(tǒng)只需要了解人的姓名和年齡,所以上面定義的類(lèi)中只包含姓名和年齡這兩個(gè)屬性,這就是一種抽像,使用抽象可以避免考慮一些與目標(biāo)無(wú)關(guān)的細(xì)節(jié)。我對(duì)抽象的理解就是不要用顯微鏡去看一個(gè)事物的所有方面,這樣涉及的內(nèi)容就太多了,而是要善于劃分問(wèn)題的邊界,當(dāng)前系統(tǒng)需要什么,就只考慮什么。String name。int age。繼承:在定義和實(shí)現(xiàn)一個(gè)類(lèi)的時(shí)候,可以在一個(gè)已經(jīng)存在的類(lèi)的基礎(chǔ)之上來(lái)進(jìn)行,把這個(gè)已經(jīng)存在的類(lèi)所定義的內(nèi)容作為自己的內(nèi)容,并可以加入若干新的內(nèi)容,或修改原來(lái)的方法使之更適合特殊的需要,這就是繼承。繼承是子類(lèi)自動(dòng)共享父類(lèi)數(shù)據(jù)和方法的機(jī)制,這是類(lèi)之間的一種關(guān)系,提高了軟件的可重用性和可擴(kuò)展性。多態(tài):多態(tài)是指程序中定義的引用變量所指向的具體類(lèi)型和通過(guò)該引用變量發(fā)出的方法調(diào)用在編程時(shí)并不確定,而是在程序運(yùn)行期間才確定,即一個(gè)引用變量倒底會(huì)指向哪個(gè)類(lèi)的實(shí)例對(duì)象,該引用變量發(fā)出的方法調(diào)用到底是哪個(gè)類(lèi)中實(shí)現(xiàn)的方法,必須在由程序運(yùn)行期間才能決定。因?yàn)樵诔绦蜻\(yùn)行時(shí)才確定具體的類(lèi),這樣,不用修改源程序代碼,就可以讓引用變量綁定到各種不同的類(lèi)實(shí)現(xiàn)上,從而導(dǎo)致該引用調(diào)用的具體方法隨之改變,即不修改程序代碼就可以改變程序運(yùn)行時(shí)所綁定的具體代碼,讓程序可以選擇多個(gè)運(yùn)行狀態(tài),這就是多態(tài)性。多態(tài)性增強(qiáng)了軟件的靈活性和擴(kuò)展性。例如,下面代碼中的UserDao是一個(gè)接口,()在執(zhí)行的時(shí)候返回,有時(shí)候指向的是UserJdbcDao這個(gè)實(shí)現(xiàn),有時(shí)候指向的是UserHibernateDao這個(gè)實(shí)現(xiàn),這樣,不用修改源代碼,就可以改變userDao指向的具體類(lèi)實(shí)現(xiàn),()方法調(diào)用的具體代碼也隨之改變,即有時(shí)候調(diào)用的是UserJdbcDao的insertUser方法,有時(shí)候調(diào)用的是UserHibernateDao的insertUser方法:UserDao userDao = ()。(user)。比喻:人吃飯,你看到的是左手,還是右手?2java中實(shí)現(xiàn)多態(tài)的機(jī)制是什么?靠的是父類(lèi)或接口定義的引用變量可以指向子類(lèi)或具體實(shí)現(xiàn)類(lèi)的實(shí)例對(duì)象,而程序調(diào)用的方法在運(yùn)行期才動(dòng)態(tài)綁定,就是引用變量所指向的具體實(shí)例對(duì)象的方法,也就是內(nèi)存里正在運(yùn)行的那個(gè)對(duì)象的方法,而不是引用變量的類(lèi)型中定義的方法。2abstract class和interface有什么區(qū)別?含有abstract修飾符的class即為抽象類(lèi),abstract 類(lèi)不能創(chuàng)建的實(shí)例對(duì)象。含有abstract方法的類(lèi)必須定義為abstract class,abstract class類(lèi)中的方法不必是抽象的。abstract class類(lèi)中定義抽象方法必須在具體(Concrete)子類(lèi)中實(shí)現(xiàn),所以,不能有抽象構(gòu)造方法或抽象靜態(tài)方法。如果的子類(lèi)沒(méi)有實(shí)現(xiàn)抽象父類(lèi)中的所有抽象方法,那么子類(lèi)也必須定義為abstract類(lèi)型。接口(interface)可以說(shuō)成是抽象類(lèi)的一種特例,接口中的所有方法都必須是抽象的。接口中的方法定義默認(rèn)為public abstract類(lèi)型,接口中的成員變量類(lèi)型默認(rèn)為public static final。下面比較一下兩者的語(yǔ)法區(qū)別:,接口中不能有構(gòu)造方法。,接口中沒(méi)有普通成員變量,接口中的所有方法必須都是抽象的,不能有非抽象的普通方法。,protected和(默認(rèn)類(lèi)型,雖然eclipse下不報(bào)錯(cuò),但應(yīng)該也不行),但接口中的抽象方法只能是public類(lèi)型的,并且默認(rèn)即為public abstract類(lèi)型。,接口中不能包含靜態(tài)方法,抽象類(lèi)中的靜態(tài)成員變量的訪問(wèn)類(lèi)型可以任意,但接口中定義的變量只能是public static final類(lèi)型,并且默認(rèn)即為public static final類(lèi)型。,但只能繼承一個(gè)抽象類(lèi)。下面接著再說(shuō)說(shuō)兩者在應(yīng)用上的區(qū)別:接口更多的是在系統(tǒng)架構(gòu)設(shè)計(jì)方法發(fā)揮作用,主要用于定義模塊之間的通信契約。而抽象類(lèi)在代碼實(shí)現(xiàn)方面發(fā)揮作用,可以實(shí)現(xiàn)代碼的重用,例如,模板方法設(shè)計(jì)模式是抽象類(lèi)的一個(gè)典型應(yīng)用,假設(shè)某個(gè)項(xiàng)目的所有Servlet類(lèi)都要用相同的方式進(jìn)行權(quán)限判斷、記錄訪問(wèn)日志和處理異常,那么就可以定義一個(gè)抽象的基類(lèi),讓所有的Servlet都繼承這個(gè)抽象基類(lèi),在抽象基類(lèi)的service方法中完成權(quán)限判斷、記錄訪問(wèn)日志和處理異常的代碼,在各個(gè)子類(lèi)中只是完成各自的業(yè)務(wù)邏輯代碼,偽代碼如下:public abstract class BaseServlet extends HttpServlet{public final void service(HttpServletRequest request, HttpServletResponse response)throws{ 記錄訪問(wèn)日志 進(jìn)行權(quán)限判斷 if(具有權(quán)限){try{ } catch(Excetpion e){記錄異常信息 doService(request,response)。IOExcetion,ServletException } } } protected abstract void doService(HttpServletRequest request, HttpServletResponse response)throws IOExcetion,ServletException。//注意訪問(wèn)權(quán)限定義成protected,顯得既專(zhuān)業(yè),又嚴(yán)謹(jǐn),因?yàn)樗菍?zhuān)門(mén)給子類(lèi)用的 }public class MyServlet1 extends BaseServlet { protected void doService(HttpServletRequest request, HttpServletResponse response)throws IOExcetion,ServletException} 父類(lèi)方法中間的某段代碼不確定,留給子類(lèi)干,就用模板方法設(shè)計(jì)模式。備注:這道題的思路是先從總體解釋抽象類(lèi)和接口的基本概念,然后再比較兩者的語(yǔ)法細(xì)節(jié),最后再說(shuō)兩者的應(yīng)用區(qū)別。比較兩者語(yǔ)法細(xì)節(jié)區(qū)別的條理是:先從一個(gè)類(lèi)中的構(gòu)造方法、普通成員變量和方法(包括抽象方法),靜態(tài)變量和方法,繼承性等6個(gè)方面逐一去比較回答,接著從第三者繼承的角度的回答,特別是最后用了一個(gè)典型的例子來(lái)展現(xiàn)自己深厚的技術(shù)功底。{ } 本Servlet只處理的具體業(yè)務(wù)邏輯代碼2abstract的method是否可同時(shí)是static,是否可同時(shí)是native,是
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)教案相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1