黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

面試題首頁 > Java基礎(chǔ)面試題

Java面向?qū)ο竺嬖囶}

001java面向?qū)ο蟮睦斫猓棵嫦驅(qū)ο蟮奶卣鳎?/h2>

整體上是封裝、繼承、多態(tài)、抽象。
首先面向?qū)ο笫且环N思想。在java中萬事萬物皆對(duì)象。類是對(duì)相同事物的一種抽象、是不可見的,對(duì)象具體的、可見的。由對(duì)象到類的過程是抽象的過程,由類到對(duì)象的過程是實(shí)例化的過程。面向?qū)ο蟮娜筇卣鞣謩e是封裝、繼承和多態(tài)。
 封裝隱藏了類的內(nèi)部實(shí)現(xiàn)機(jī)制,對(duì)外界而言它的內(nèi)部細(xì)節(jié)是隱藏的,暴露給外界的只是它的訪問方法。例如在屬性的修飾符上我們往往用的private私有的,這樣其它類要想訪問就通過get和set方法。因此封裝可以程序員按照既定的方式調(diào)用方法,不必關(guān)心方法的內(nèi)部實(shí)現(xiàn),便于使用; 便于修改,增強(qiáng) 代碼的可維護(hù)性。
 繼承在本質(zhì)上是特殊~一般的關(guān)系,即常說的is-a關(guān)系。子類繼承父類,表明子類是一種特殊的父類,并且具有父類所不具有的一些屬性或方法。比如從貓類、狗類中可以抽象出一個(gè)動(dòng)物類,具有和貓、狗、虎類的共同特性(吃、跑、叫等)。通過extends關(guān)鍵字來實(shí)現(xiàn)繼承。Java中的繼承是單繼承,即一個(gè)子類只允許有一個(gè)父類。 
Java多態(tài)是指的是首先兩個(gè)類有繼承關(guān)系,其次子類重寫了父類的方法,最后父類引用指向子類對(duì)象。如Animal a=new Dog();這行代碼就體現(xiàn)了多態(tài)。

002Java中實(shí)現(xiàn)多態(tài)的機(jī)制是什么?

Java中的多態(tài)靠的是父類或接口定義的引用變量可以指向子類或具體實(shí)現(xiàn)類的實(shí)例對(duì)象,而程 序調(diào)用的方法在運(yùn)行期才動(dòng)態(tài)綁定,就是引用變量所指向的具體實(shí)例對(duì)象的方法,也就是內(nèi)存 里正在運(yùn)行的那個(gè)對(duì)象的方法,而不是引用變量的類型中定義的方法。

003構(gòu)造方法有哪些特性?

名字與類名相同;
沒有返回值,但不能用void聲明構(gòu)造函數(shù);
生成類的對(duì)象時(shí)自動(dòng)執(zhí)行,無需調(diào)用。

004構(gòu)造器(constructor)是否可被重寫(override)?

構(gòu)造器不能被繼承,因此不能被重寫,但可以被重載。

005super關(guān)鍵字的用法

super可以理解為是指向自己超(父)類對(duì)象的一個(gè)指針,而這個(gè)超類指的是離自己最近的一 個(gè)父類。
super也有三種用法:
1.普通的直接引用
與this類似,super相當(dāng)于是指向當(dāng)前對(duì)象的父類的引用,這樣就可以用super.xxx來引用父類的成員。
2.子類中的成員變量或方法與父類中的成員變量或方法同名時(shí),用super進(jìn)行區(qū)分

class Person{?
? ? protected String name;?
? ? public Person(String name){?
? ? ? ? this.name = name;?
? ? }?
}?
class StudentextendsPerson{?
? ? private String name;?
? ? publicStudent(String name, String name1){?
? ? ? ? super(name);?
? ? ? ? this.name = name1;?
? ? }?
? ? public void getInfo(){?
? ? ? ? System.out.println(this.name);?
? ? ? ? System.out.println(super.name);?
? ? }?
}?
public class Test{?
? ? public static void main(String[] args){?
? ? ? ? Student s1 = new Student("Father", "Child");?
? ? ? ? s1.getInfo();?
? ? }?
}

3.引用父類構(gòu)造函數(shù)
super(參數(shù)):調(diào)用父類中的某一個(gè)構(gòu)造函數(shù)(應(yīng)該為構(gòu)造函數(shù)中的第一條語句)。
this(參數(shù)):調(diào)用本類中另一種形式的構(gòu)造函數(shù)(應(yīng)該為構(gòu)造函數(shù)中的第一條語句)。

006this與super的區(qū)別?

super:它引用當(dāng)前對(duì)象的直接父類中的成員(用來訪問直接父類中被隱藏的父類中成員
數(shù)據(jù)或函數(shù),基類與派生類中有相同成員定義時(shí)如:super.變量名 super.成員函數(shù)據(jù)名 (實(shí)參)
this:它代表當(dāng)前對(duì)象名(在程序中易產(chǎn)生二義性之處,應(yīng)使用this來指明當(dāng)前對(duì)象;如果函數(shù)的形參與類中的成員數(shù)據(jù)同名,這時(shí)需用this來指明成員變量名)
super()和this()區(qū)別是
[1]super()在子類中調(diào)用父類的構(gòu)造方法,this()在本類內(nèi)調(diào)用本類的其它構(gòu)造方法。
[2]super()和this()均需放在構(gòu)造方法內(nèi)第一行。盡管可以用this調(diào)用一個(gè)構(gòu)造器,但卻不能調(diào)用兩個(gè)。
[3]this和super不能同時(shí)出現(xiàn)在一個(gè)構(gòu)造函數(shù)里面,因?yàn)閠his必然會(huì)調(diào)用其它的構(gòu)造函數(shù),其它的構(gòu)造函數(shù)必然也會(huì)有super語句的存在,所以在同一個(gè)構(gòu)造函數(shù)里面有相同的語 句,就失去了語句的意義,編譯器也不會(huì)通過。
[4]this()和super()都指的是對(duì)象,所以,均不可以在static環(huán)境中使用。包括:static變
量,static方法,static語句塊。從本質(zhì)上講,this是一個(gè)指向本對(duì)象的指針, 然而super是一個(gè)Java關(guān)鍵字。

007Java中重寫和重載有哪些區(qū)別?

方法的重載和重寫本質(zhì)都是實(shí)現(xiàn)多態(tài)的方式,區(qū)別在于前者實(shí)現(xiàn)的是編譯時(shí)的多態(tài)性,而后者實(shí)現(xiàn)的是運(yùn)行時(shí)的多態(tài)。
方法重載的規(guī)則:
1)方法名一致,
2)參數(shù)列表不同(參數(shù)順序不同或者參數(shù)類型不同或者參數(shù)個(gè)數(shù)不同)。
3)重載與方法的返回值無關(guān),這個(gè)很關(guān)鍵。
方法重寫的規(guī)則:
1)參數(shù)列表和返回值類型必須完全與父類的方法一致
2)構(gòu)造方法不能被重寫,聲明為 final 的方法不能被重寫,聲明為 static 的方法不能被重寫,但是能夠被再次聲明。
3)訪問權(quán)限不能比父類中被重寫的方法的訪問權(quán)限更低。
4)重寫的方法能夠拋出任何檢查異常(編譯時(shí)異常),但是重寫的方法不能拋出比被重寫方法聲明的更廣泛的運(yùn)行時(shí)異常。

008接口和抽象類有哪些區(qū)別?

1)接口中的所有方法都是抽象的,而抽象類可以有抽象方法,也可以有實(shí)例方法。
2)類需要繼承,接口需要實(shí)現(xiàn)。一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,但只能繼承一個(gè)父類但接口卻可以繼承多接口。
3)接口與實(shí)現(xiàn)它的類不構(gòu)成繼承體系,即接口不是類體系的一部分。因此,不相關(guān)的類也可以實(shí)現(xiàn)相同的接口,而抽象類是屬于類的繼承體系,并且一般位于類體系的頂層。

009接口是否可繼承(extends)接口? 抽象類是否可實(shí)現(xiàn)(implements) 接口? 抽象類是否可繼承具體類(concrete class)?

接口可以繼承接口。抽象類可以實(shí)現(xiàn)(implements)接口,抽象類可繼承具體類,但前提是具體類必須有明確的構(gòu)造函數(shù)。

010描述一下值傳遞和引用傳遞的區(qū)別?

值傳遞是指在調(diào)用函數(shù)時(shí)將實(shí)際參數(shù)復(fù)制一份到函數(shù)中,這樣的話如果函數(shù)對(duì)其傳遞過來的形式參數(shù)進(jìn)行修改,將不會(huì)影響到實(shí)際參數(shù)。
引用傳遞是指在調(diào)用函數(shù)時(shí)將對(duì)象的地址直接傳遞到函數(shù)中,如果在對(duì)形式參數(shù)進(jìn)行修改,將影響到實(shí)際參數(shù)的值。

011Java中==和equals有哪些區(qū)別?

equals 和== 最大的區(qū)別是一個(gè)是方法一個(gè)是運(yùn)算符。
1)基本類型中,==比較的是數(shù)值是否相等。equals方法是不能用于基本數(shù)據(jù)類型數(shù)據(jù)比較的,因?yàn)榛緮?shù)據(jù)類型壓根就沒有方法。
2)引用類型中,==比較的是對(duì)象的地址值是否相等。equals方法比較的是引用類型的變量所指向的對(duì)象的地址是否相等。應(yīng)為String這個(gè)類重寫了equals方法,比較的是字符串的內(nèi)容。

012hashCode()方法的作用?

hashCode() 的作用是獲取哈希碼,也稱為散列碼;它實(shí)際上是返回一個(gè)int整數(shù)。這個(gè)哈希碼 的作用是確定該對(duì)象在哈希表中的索引位置。hashCode() 定義在JDK的Object.java中,這就 意味著Java中的任何類都包含有hashCode()函數(shù)。

013hashcode方法和equals方法區(qū)別?

在Java中,每個(gè)對(duì)象都可以調(diào)用自己的hashCode方法得到自己的哈希值(hashCode),相當(dāng)于對(duì)象的指紋信息,通常說世界上沒有完全一樣的指紋,但是在Java中沒有這么絕對(duì),我們依然可以用hashCode值來做一些提前的判斷。
1)如果兩個(gè)對(duì)象的hashCode值不一樣,那么他們肯定是不同的兩個(gè)對(duì)象;
2)如果兩個(gè)對(duì)象的hashCode值一樣,也不代表就是同一個(gè)對(duì)象;
3)如果兩個(gè)對(duì)象的equals方法相等,那么他們的hashCode值一定相等。
在Java的一些集合類的實(shí)現(xiàn)中,在比較兩個(gè)對(duì)象的值是否相等的時(shí)候,會(huì)根據(jù)上面的基本原則,先調(diào)用對(duì)象的hashCode值來進(jìn)行比較,如果hashCode值不一樣,就可以認(rèn)定這是兩個(gè)不一樣的數(shù)據(jù),如果hashCode值相同,我們會(huì)進(jìn)一步調(diào)用equals()方法進(jìn)行內(nèi)容的比較。

014為什么重寫 equals 方法必須重寫 hashcode 方法?

equals 方法是用來比較對(duì)象大小是否相等的方法,hashcode 方法是用來判斷每個(gè)對(duì)象 hash 值的一種方法。如果只重寫 equals 方法而不重寫 hashcode 方法,很可能會(huì)造成兩個(gè)不同的對(duì)象,它們的 hashcode 也相等,造成沖突。
例如:String str1 = "通話"; String str2 = "重地";
它們兩個(gè)的 hashcode 相等,但是 equals 可不相等。

015兩個(gè)對(duì)象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對(duì)不對(duì)?

不對(duì),如果兩個(gè)對(duì)象x和y滿足x.equals(y) == true,它們的哈希碼(hash code)應(yīng)當(dāng)相同。
Java對(duì)于eqauls方法和hashCode方法是這樣規(guī)定的:
(1)如果兩個(gè)對(duì)象相同(equals方法返回true),那么它們的hashCode值一定要相同;
(2)如果兩個(gè)對(duì)象的hashCode相同,它們并不一定相同。
當(dāng)然,你未必要按照要求去做,但是如果你違背了上述原則就會(huì)發(fā)現(xiàn)在使用容器時(shí),相同的對(duì) 象可以出現(xiàn)在Set集合中,同時(shí)增加新元素的效率會(huì)大大下降(對(duì)于使用哈希存儲(chǔ)的系統(tǒng),如 果哈希碼頻繁的沖突將會(huì)造成存取性能急劇下降)。

016抽象的(abstract)方法是否可同時(shí)是靜態(tài)的(static), 是否可同時(shí)是本地方法(native),是否可同時(shí)被 synchronized?

都不能。
1)抽象方法需要子類重寫,而靜態(tài)的方法是無法被重寫的,因此二者是矛盾的。
2)本地方法是由本地代碼(如 C++ 代碼)實(shí)現(xiàn)的方法,而抽象方法是沒有實(shí)現(xiàn)的,也是矛盾的。
3)synchronized 和方法的實(shí)現(xiàn)細(xì)節(jié)有關(guān),抽象方法不涉及實(shí)現(xiàn)細(xì)節(jié),因此也是相互矛盾的。

017final關(guān)鍵字的用法?

修飾類:當(dāng)用final修飾一個(gè)類時(shí),表明這個(gè)類不能被繼承。正如String類是不能被繼承的。final類中的成員變量可以根據(jù)需要設(shè)為final,但是要注意final類中的所有成員方法都會(huì)被隱式地指定為final方法。
修飾方法:使用final修飾方法的原因有兩個(gè)。第一個(gè)原因是把方法鎖定,以防任何繼承類修改它的含義;第二個(gè)原因是效率。在早期的Java實(shí)現(xiàn)版本中,會(huì)將final方法轉(zhuǎn)為內(nèi)嵌調(diào)用。但是如果方法過于龐大,可能看不到內(nèi)嵌調(diào)用帶來的任何性能提升。在最近的Java版本中,不需要使用final方法進(jìn)行這些優(yōu)化了。因此,只有在想明確禁止該方法在子類中被覆蓋的情況下才將方法設(shè)置為final。(注:一個(gè)類中的private方法會(huì)隱式地被指定為final方法)
修飾變量:對(duì)于被final修飾的變量,如果是基本數(shù)據(jù)類型的變量,則其數(shù)值一旦在初始化之后便不能更改;如果是引用類型的變量,則在對(duì)其初始化之后便不能再讓其指向另一個(gè)對(duì)象。雖然不能再指向其他對(duì)象,但是它指向的對(duì)象的內(nèi)容是可變的。

018final和static的區(qū)別?

public class Demo1 {
????public static void main(String[] args) ?{
????????MyClass myClass1 = new MyClass();
????????MyClass myClass2 = new MyClass();
????????System.out.println(myClass1.i);
????????System.out.println(myClass2.i);
????????System.out.println(myClass1.j);
????????System.out.println(myClass2.j); ?
????}
}
class MyClass {
????public final double i = Math.random();
????public static double j = Math.random();
}

運(yùn)行結(jié)果:

0.3222977275463088
0.2565532218939688
0.36856868882926397
0.36856868882926397

每次打印的兩個(gè)j值都是一樣的,而i的值卻是不同的。從這里就可以知道final和static變量的區(qū)別了。static屬于類級(jí)別的不可變,而final是對(duì)象級(jí)別的不可變。

019final與finally、finalize 的區(qū)別?

1)final:用于聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,被其修飾的類不可繼承。
2)finally:異常處理語句結(jié)構(gòu)的一部分,表示總是執(zhí)行。
3)finalize:Object 類的一個(gè)方法,當(dāng)java對(duì)象沒有更多的引用指向的時(shí)候,系統(tǒng)會(huì)自動(dòng)的由垃圾回收器來負(fù)責(zé)調(diào)用此方法進(jìn)行回收前的準(zhǔn)備工作和垃圾回收。

020靜態(tài)變量和實(shí)例變量區(qū)別?

靜態(tài)變量: 靜態(tài)變量由于不屬于任何實(shí)例對(duì)象,屬于類的,所以在內(nèi)存中只會(huì)有一份,在類的 加載過程中,JVM只為靜態(tài)變量分配一次內(nèi)存空間。
實(shí)例變量: 每次創(chuàng)建對(duì)象,都會(huì)為每個(gè)對(duì)象分配成員變量內(nèi)存空間,實(shí)例變量是屬于實(shí)例對(duì)象 的,在內(nèi)存中,創(chuàng)建幾次對(duì)象,就有幾份成員變量。

021靜態(tài)方法和實(shí)例方法有何不同?

靜態(tài)方法和實(shí)例方法的區(qū)別主要體現(xiàn)在兩個(gè)方面:
在外部調(diào)用靜態(tài)方法時(shí),可以使用"類名.方法名"的方式,也可以使用"對(duì)象名.方法名"的 方式。而實(shí)例方法只有后面這種方式。也就是說,調(diào)用靜態(tài)方法可以無需創(chuàng)建對(duì)象。
靜態(tài)方法在訪問本類的成員時(shí),只允許訪問靜態(tài)成員(即靜態(tài)成員變量和靜態(tài)方法), 而不允許訪問實(shí)例成員變量和實(shí)例方法;實(shí)例方法則無此限制。

022指出下面程序的運(yùn)行結(jié)果?

class A{ 
    static{ 
        System.out.print("1"); 
    } 
    public A(){ 
        System.out.print("2"); 
    } 
} 
class B extends A{ 
    static{ 
        System.out.print("a"); 
    } 
    public B(){ 
        System.out.print("b"); 
    } 
} 
public class Hello{ 
    public static void main(String[] ars){ 
        A ab = new B(); //執(zhí)行到此處,結(jié)果: 1a2b 
        ab = new B(); //執(zhí)行到此處,結(jié)果: 1a2b2b 
    } 
}?
輸出結(jié)果為 1a2b2b;
分析:類的 static 代碼段,可以看作是類首次加載(虛擬機(jī)加載)執(zhí)行的代碼,而對(duì)于類加載,首先要執(zhí)行其基類的構(gòu)造,再執(zhí)行其本身的構(gòu)造。

023訪問修飾符public,private,protected,以及不寫(默認(rèn))時(shí)的區(qū)別?

修飾符 當(dāng)前類 同包 子類 其它包
public
protected
默認(rèn)(缺省)
private

類的成員不寫訪問修飾時(shí)默認(rèn)為default。默認(rèn)對(duì)于同一個(gè)包中的其他類相當(dāng)于公開 (public),對(duì)于不是同一個(gè)包中的其他類相當(dāng)于私有(private)。受保護(hù)(protected)對(duì) 子類相當(dāng)于公開,對(duì)不是同一包中的沒有父子關(guān)系的類相當(dāng)于私有。Java中,外部類的修飾符 只能是public或默認(rèn),類的成員(包括內(nèi)部類)的修飾符可以是以上四種。

024Java有沒有g(shù)oto?

goto 是Java中的保留字,在目前版本的Java中沒有使用。(根據(jù)James Gosling(Java之 父)編寫的《The Java Programming Language》一書的附錄中給出了一個(gè)Java關(guān)鍵字列 表,其中有g(shù)oto和const,但是這兩個(gè)是目前無法使用的關(guān)鍵字,因此有些地方將其稱之為保 留字,其實(shí)保留字這個(gè)詞應(yīng)該有更廣泛的意義,因?yàn)槭煜語言的程序員都知道,在系統(tǒng)類庫 中使用過的有特殊意義的單詞或單詞的組合都被視為保留字)

025Java 的接口和 C++的虛類的相同和不同處?

由于 Java 不支持多繼承,而有可能某個(gè)類或?qū)ο笠褂梅謩e在幾個(gè)類或?qū)ο罄锩娴姆椒ɑ驅(qū)傩裕F(xiàn)有的單繼承機(jī)制就不能滿足要求。與繼承相比,接口有更高的靈活性,因?yàn)榻涌谥袥]有任何實(shí)現(xiàn)代碼。當(dāng)一個(gè)類實(shí)現(xiàn)了接口以后,該類要實(shí)現(xiàn)接口里面所有的方法和屬性,并且接口里面的屬性在默認(rèn)狀態(tài)下面都是public static,所有方法默認(rèn)情況下是 public.一個(gè)類可以實(shí)現(xiàn)多個(gè)接口。

目錄

001java面向?qū)ο蟮睦斫猓棵嫦驅(qū)ο蟮奶卣鳎? 002Java中實(shí)現(xiàn)多態(tài)的機(jī)制是什么? 003構(gòu)造方法有哪些特性? 004構(gòu)造器(constructor)是否可被重寫(override)? 005super關(guān)鍵字的用法 006this與super的區(qū)別? 007Java中重寫和重載有哪些區(qū)別? 008接口和抽象類有哪些區(qū)別? 009接口是否可繼承(extends)接口? 抽象類是否可實(shí)現(xiàn)(implements) 接口? 抽象類是否可繼承具體類(concrete class)? 010描述一下值傳遞和引用傳遞的區(qū)別? 011Java中==和equals有哪些區(qū)別? 012hashCode()方法的作用? 013hashcode方法和equals方法區(qū)別? 014為什么重寫 equals 方法必須重寫 hashcode 方法? 015兩個(gè)對(duì)象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對(duì)不對(duì)? 016抽象的(abstract)方法是否可同時(shí)是靜態(tài)的(static), 是否可同時(shí)是本地方法(native),是否可同時(shí)被 synchronized? 017final關(guān)鍵字的用法? 018final和static的區(qū)別? 019final與finally、finalize 的區(qū)別? 020靜態(tài)變量和實(shí)例變量區(qū)別? 021靜態(tài)方法和實(shí)例方法有何不同? 022指出下面程序的運(yùn)行結(jié)果? 023訪問修飾符public,private,protected,以及不寫(默認(rèn))時(shí)的區(qū)別? 024Java有沒有g(shù)oto? 025Java 的接口和 C++的虛類的相同和不同處?
返回頂部
主站蜘蛛池模板: 国产成人精品视频午夜 | 日韩免费视频网站 | 国外成人免费高清激情视频 | 黄色片a | 成人高辣h视频一区二区在线观看 | 国产欧美日韩三级 | 2021精品国内一区视频自线 | 一本大道香蕉高清视频视频 | www.一级毛片 | 日本黄大片 在线播放 | 1024香蕉国产在线视频 | 精品免费在线视频 | 天天舔天天射天天操 | 午夜影院在线观看免费 | 天天摸天天操天天射 | 91成人精品视频 | 激情午夜网 | 国产91精品一区二区麻豆网站 | 免费在线a| 一级一级一片免费高清 | 中文国产成人精品久久久 | 成年大片免费播放视频人 | 色老妇| 国产成人影院在线观看 | 黄色激情视频在线观看 | 亚洲伊人久久综合一区二区 | 亚洲一区二区三区影院 | 久久综合五月 | 国产黄色在线播放 | 91精品国产免费久久国语蜜臀 | 最近中文字幕免费完整国语 | 国产激情一区二区三区在线观看 | 国产一区日韩二区欧美三区 | 国产中文在线 | 亚洲第一成年人网站 | 国产成人麻豆精品video | 日日摸夜夜添夜夜添aa | 丁香五香天堂网 | 男女后进式猛烈xx00动态图片 | 五月婷婷丁香色 | 一区二区视频在线免费观看 |