導(dǎo)語 ??Java 面試題集2021版
Java基礎(chǔ)部分三26、說說has a 與is a的區(qū)別??is-a表示的是屬于的關(guān)系,也就是說馬是屬于動(dòng)物的一種表示的是一種繼承的關(guān)系。 ??has-a 表示的是包含的關(guān)系,例如一匹馬有一個(gè)頭,四條腿,等,表示的是關(guān)聯(lián)聚合的一種關(guān)系。 27、一個(gè)房間里有一把椅子,椅子有四條腿,房子和椅子是什么關(guān)系,椅子和椅子腿是什么關(guān)系???如果房子里有多個(gè)椅子,就是聚集的關(guān)系,否則則是一種關(guān)聯(lián)關(guān)系也就是一一對(duì)應(yīng)的,椅子與椅子腿應(yīng)該是一種聚合關(guān)系。 28、什么是參數(shù)?參數(shù)化的意義是什么???參數(shù)就是用來代替一個(gè)數(shù)的未知數(shù),參數(shù)表示的就是一符號(hào),沒有實(shí)際意義,要讓它有實(shí)際的意義,就給對(duì)應(yīng)的參數(shù)賦值就可以。例如定義一個(gè)方法來計(jì)算兩個(gè)數(shù)字的和,那么該方法就必須要有兩個(gè)參數(shù)來標(biāo)識(shí)兩個(gè)加數(shù),但是只有當(dāng)調(diào)用該方法時(shí),給該方法的兩個(gè)參數(shù)賦值后才能執(zhí)行該方法,例如int add(int a,int b) 方法,只有調(diào)用的時(shí)候使用具體的數(shù)字代替ab兩個(gè)參數(shù)之后才能執(zhí)行并獲取到最終的結(jié)果。 ??參數(shù)化的意義:在數(shù)據(jù)庫(kù)調(diào)用的過程中,參數(shù)化能有效的防止注入式的攻擊,在程序方法中,參數(shù)化能避免泄漏程序的運(yùn)行機(jī)制與原理,同時(shí)也降低了方法的冗余度,提到代碼的可讀性。 29、構(gòu)造器Constructor(構(gòu)造方法)是否可被override重寫??在之前的問題中提到過override與overload的區(qū)別,對(duì)于override來說就是通過繼承的方式來修改某個(gè)類的某個(gè)方法,但是構(gòu)造器方法不能被繼承,所以不能被重寫,但是構(gòu)造器可以通過參數(shù)列表的不同實(shí)現(xiàn)重載。 30、接口是否可以繼承接口?抽象類是否可實(shí)現(xiàn)接口?抽象類是否已可以繼承具體的某個(gè)類?抽象類中是否可有靜態(tài)的Main方法???接口是可以繼承接口,抽象類可以實(shí)現(xiàn)接口,抽象類可以繼承具體的類。抽象類中可以有main方法。 ??只要明白了接口和抽象類的本質(zhì)和作用,這些問題都是可以分析的,當(dāng)然有一點(diǎn)需要記住,抽象類與普通類的唯一區(qū)別就是不能創(chuàng)建實(shí)例對(duì)象和允許有abstract方法。 31、面向?qū)ο蟮奶卣饔心男┓矫?/h2>??計(jì)算機(jī)軟件系統(tǒng)是現(xiàn)實(shí)生活的業(yè)務(wù)在計(jì)算機(jī)中的映射,而在現(xiàn)實(shí)生活中的業(yè)務(wù)其實(shí)就是一個(gè)個(gè)對(duì)象協(xié)作的過程,面向?qū)ο笞兂删褪前磳?shí)現(xiàn)的業(yè)務(wù)一樣的方式將程序代碼按一個(gè)個(gè)對(duì)象進(jìn)行組織和編寫,為了能上吉斯算計(jì)能夠識(shí)別和理解用對(duì)象的方式組織和編寫程序代碼,這樣就可以把現(xiàn)實(shí)生活中的業(yè)務(wù)對(duì)象映射到計(jì)算機(jī)系統(tǒng)中。 ??面向?qū)ο蟮木幊陶Z言有繼承、封裝、多態(tài)三個(gè)基本特征。 1、封裝 ??封裝是保證軟件部件具有優(yōu)良的模塊性基礎(chǔ),封裝的目標(biāo)就是要實(shí)現(xiàn)軟件部件的“高內(nèi)聚,低耦合”,防止程序相互依賴性帶來的變動(dòng)影響。在面向?qū)ο蟮木幊陶Z言中,對(duì)象是封裝的基本單位,面向?qū)ο蟮姆庋b比傳統(tǒng)語言的封裝更為清晰,更為有力。面向?qū)ο蟮姆庋b就是把描述一個(gè)對(duì)象的屬性和行為的代碼封裝在一個(gè)模塊中,也就是一個(gè)類中,屬性用變量的方式定義,行為用方法的方式進(jìn)行定義,方法可以直接訪問同一個(gè)對(duì)象中的屬性。 2、繼承 ??在定義和實(shí)現(xiàn)一個(gè)類的時(shí)候,可以在一個(gè)已經(jīng)存在的類的基礎(chǔ)上來進(jìn)行,把這個(gè)已經(jīng)存在的類所定義的內(nèi)容作為自己的內(nèi)容,并可以加入若干的新內(nèi)容,或者修改原來的方法使之更適合特殊的需要,這就是繼承。繼承是子類自動(dòng)共享父類數(shù)據(jù)和方法的機(jī)制,這是兩個(gè)類之間的一種關(guān)系,使用這種方式來實(shí)現(xiàn)的軟件的可重用性和可擴(kuò)展性。 3、多態(tài) ??多態(tài)是指程序中定義的引用變量所指向的具體類型和通過該引用變量發(fā)出的方法調(diào)用在編程的時(shí)候的不確定性,而在程序運(yùn)行的過程中才能進(jìn)行確定,即一個(gè)引用變量到底會(huì)指向那個(gè)實(shí)力對(duì)象,該引用變量發(fā)出的方法調(diào)用到底是那個(gè)類中實(shí)現(xiàn)的方法,必須在由程序運(yùn)行期間才能決定。因?yàn)樵诔绦蜻\(yùn)行的時(shí)候才能產(chǎn)生具體的類,這樣就可以不用修改源代碼,流可以讓引用變量綁定到各種不同的實(shí)現(xiàn)類上,這樣就可以引用到具體的方法上,即不修改程序代碼就可以改變程序運(yùn)行時(shí)所綁定的具體代碼,讓程序可以選擇多個(gè)運(yùn)行狀態(tài),這個(gè)就是多態(tài)性。多態(tài)性增強(qiáng)了軟件的靈活性和擴(kuò)展性。 32、說出常用的類,包,接口,請(qǐng)各舉五個(gè)類 包 1.java.lang 2.java.io 3.java.awt 4.java.util 5.java.sql
接口 33、寫出JDK中至少5個(gè)以上的包名。1、java.lang 包:Java的核心類庫(kù),包含了運(yùn)行Java程序必不可少的系統(tǒng)類,如基本數(shù)據(jù)類型,基本數(shù)學(xué)函數(shù),字符串處理、線程、異常處理類等等,系統(tǒng)缺省加載這個(gè)包。 2、java.io 包:Java 語言的標(biāo)準(zhǔn)輸入/輸出類庫(kù),如基本輸入/輸出流、文件輸入/輸出、過濾輸出入/輸出流等等 3、java.util包:包含處理時(shí)間date類,處理編程數(shù)組的Vector類,以及stack和HashTable類 4、java.lang.reflect包:提供用于反射對(duì)象的工具類包 5、java.net 包:實(shí)現(xiàn)網(wǎng)絡(luò)功能的類庫(kù)有Socket類。ServerSocket類 6、java.sql 包:提供使用Java編程語言訪問并處理存儲(chǔ)在數(shù)據(jù)源(通常是一個(gè)關(guān)系數(shù)據(jù)庫(kù))中的數(shù)據(jù)的API 7、java.awt 包:構(gòu)建圖形用戶界面GUI的類庫(kù),低級(jí)繪圖操作Graphics類,圖形界面組件和布局管理等,例如CheckBox類、等,以及界面用戶控制和事件響應(yīng)等等。
34、Java 中實(shí)現(xiàn)多態(tài)的機(jī)制是什么???Java中實(shí)現(xiàn)多態(tài)是靠父類或者接口定義的引用變量可以指向子類或者具體實(shí)現(xiàn)類的實(shí)例對(duì)象,而程序調(diào)用方法在運(yùn)行期才動(dòng)態(tài)綁定,就是引用變量所指向的具體實(shí)例對(duì)象的方法,也就是內(nèi)存里正在運(yùn)行的那個(gè)對(duì)象的方法,而不是引用變量的類型中定義的方法。 35、abstract class 和 interface 有什么區(qū)別??Java中含有abstract修飾符的class即為抽象類,abstract類不能創(chuàng)建實(shí)例對(duì)象。含有abstract方法的類必須定位為abstract class,abstract class 類中的方法不必是抽象的。 abstract class類中定義抽象方法必須在具體(Concrete)子類中實(shí)現(xiàn),所以不能有抽象方法或者抽象靜態(tài)方法。如果子類中沒有實(shí)現(xiàn)父類中的抽象方法,那么子類必須定義為abstract類型。 ??接口(interface) 可以說成是抽象類型的一種特例,接口中的所有方法都必須是抽象的。接口中的方法定義默認(rèn)為public abstract 類型,接口中的成員變量類型默認(rèn)為public static final 。 ??比較兩者的語法區(qū)別: 1、抽象類可以有構(gòu)造方法,接口中不能有構(gòu)造方法。 2、抽象類中可以有普通成員變量,接口中沒有普通成員變量 3、抽象類中可以包含非抽象的普通方法,接口中的所有方法必須都是抽象的,不能有非抽象的普通方法。 4、抽象類中的抽象方法的訪問類型可以是public ,protected和默認(rèn)作用域,但接口中的抽象方法只能是public類型,并且默認(rèn)即為public abstract類型。 5、抽象類中可以包含靜態(tài)方法,接口中不能包含靜態(tài)方法 6、抽象類和接口中都可以包含靜態(tài)成員變量,抽象類中的靜態(tài)成員變量的訪問類型可以任意,但接口中定義的變量只能是public static final 類型,并且默認(rèn)就是 public static final 類型。 7、一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,但只能繼承一個(gè)抽象類。
36、Java 的接口和C 虛類的相同和不同之處??C 虛類相當(dāng)于Java中的抽象類,與接口的不同之處如下 1、一個(gè)子類只能繼承一個(gè)抽象類,但能實(shí)現(xiàn)多個(gè)接口 2、一個(gè)抽象類可以有構(gòu)造方法,接口沒有構(gòu)造方法 3、一個(gè)抽象類中的方法不一定是抽象方法,即其中的方法可以有實(shí)現(xiàn),接口中的方法都是抽象方法,不能有方法體,只有方法聲明 4、一個(gè)抽象類可以是public、private、protected、default 接口只有public 5、一個(gè)抽象類中的方法可以是public、private、protected、default,接口中的方法只能是public和default修飾,實(shí)現(xiàn)上都是public 的abstract方法。
相同之處:都不能進(jìn)行實(shí)例化對(duì)象。 來源:https://www./content-1-891751.html
|