java面試題

靜態變量和實例變量的區別?
    在語法定義上的區別:靜態變量前要加static關鍵字,而實例變量前不加。

    在程序運行時的區別:實例變量屬於某個對象的屬性,必須創建了實例對象,其中的實例變量纔會被分配空間,才能使用這個實例變量。

    靜態變量不屬於某個實例對象,而是屬於類,所以也稱爲類變量,只要程序加載了類的字節碼文件,不用創建任何實例對象,靜態變量就會被分配空間,靜態變量就可以被使用了。

   總之,實例變量必須創建對象後纔可以通過這個對象來使用,靜態變量則可以直接使用類名來引用。

 

是否可以從一個static方法內部發出對非static方法的調用?

    不可以。因爲非static方法要與對象關聯在一起,必須創建一個對象後,纔可以在該對象上進行方法的調用,而static方法調用時不需要創建對象,可以直接調用。也就是說,一個static方法被調用時,可能還沒有創建任何實例對象,所以,一個static方法內部不可以發出對非static方法的調用。

 

Integer與int的區別?

    int是java提供的8種基本數據類型之一。Java爲每個原始類型提供了封裝類,Integer是Java爲int提供的包裝類。int的默認值是0,而Integer的默認值是null,即Integer可以區分出來未賦值和值爲0的區別,int則無法表達出來未賦值的情況,例如想要表達出沒有參加考試和考試成績爲0的區別,則只能用Integer。

 

請說出作用域public,private,protected以及不寫時的區別

作用域 同一類 同一包 子類中 不同包
public
protected ×
defualt(friendly) × ×
private × × ×

    public:接口訪問權限

    protected:繼承訪問權限

    default:包訪問權限

    private:你無法訪問(除了包含該成員的類以外,其他任何類都無法訪問這個成員)

 

面向對象編程有三大特性:封裝、繼承、多態。

      封裝隱藏了類的內部實現機制,可以在不影響使用的情況下改變類的內部結構,同時也保護了數據。對外界而言它的內部細節是隱藏的,暴露給外界的只是它的訪問方法。

      繼承是爲了重用父類代碼。兩個類若存在IS-A的關係就可以使用繼承。同時繼承也爲實現多態做了鋪墊。那麼什麼是多態呢?多態的實現機制又是什麼?請看我一一爲你揭開:

      所謂多態就是指程序中定義的引用變量所指向的具體類型和通過該引用變量發出的方法調用在編程時並不確定,而是在程序運行期間才確定,即一個引用變量倒底會指向哪個類的實例對象,該引用變量發出的方法調用到底是哪個類中實現的方法,必須在由程序運行期間才能決定。因爲在程序運行時才確定具體的類,這樣,不用修改源程序代碼,就可以讓引用變量綁定到各種不同的類實現上,從而導致該引用調用的具體方法隨之改變,即不修改程序代碼就可以改變程序運行時所綁定的具體代碼,讓程序可以選擇多個運行狀態,這就是多態性。

      比如你是一個酒神,對酒情有獨鍾。某日回家發現桌上有幾個杯子裏面都裝了白酒,從外面看我們是不可能知道這是些什麼酒,只有喝了之後才能夠猜出來是何種酒。你一喝,這是劍南春、再喝這是五糧液、再喝這是酒鬼酒….在這裏我們可以描述成如下:

      這裏所表現的的就是多態。劍南春、五糧液、酒鬼酒都是酒的子類,我們只是通過酒這一個父類就能夠引用不同的子類,這就是多態——我們只有在運行的時候纔會知道引用變量所指向的具體實例對象。

 

抽象類與接口的對比

參數 抽象類 接口
默認的方法實現 它可以有默認的方法實現 接口完全是抽象的。它根本不存在方法的實現
實現 子類使用extends關鍵字來繼承抽象類。如果子類不是抽象類的話,它需要提供抽象類中所有聲明的方法的實現。 子類使用關鍵字implements來實現接口。它需要提供接口中所有聲明的方法的實現
構造器 抽象類可以有構造器 接口不能有構造器
與正常Java類的區別 除了你不能實例化抽象類之外,它和普通Java類沒有任何區別 接口是完全不同的類型
訪問修飾符 抽象方法可以有publicprotecteddefault這些修飾符 接口方法默認修飾符是public。你不可以使用其它修飾符。
main方法 抽象方法可以有main方法並且我們可以運行它 接口沒有main方法,因此我們不能運行它。
多繼承 抽象方法可以繼承一個類和實現多個接口 接口只可以繼承一個或多個其它接口
速度 它比接口速度要快 接口是稍微有點慢的,因爲它需要時間去尋找在類中實現的方法。
添加新方法 如果你往抽象類中添加新的方法,你可以給它提供默認的實現。因此你不需要改變你現在的代碼。

如果你往接口中添加方法,那麼你必須改變實現該接口的類。

 

 

String是最基本的數據類型嗎

   基礎類型與引用類型的區別是,基礎類型只表示簡單的字符或數字,引用類型可以是任何複雜的數據結構
   基本類型僅表示簡單的數據類型,引用類型可以表示複雜的數據類型,還可以操作這種數據類型的行爲;
   JVM處理基礎類型與引用類型的方式是不一樣的,對於基本類型,JVM會爲其分配數據類型實際佔用的內存空間,而對於引用類型變量,他僅僅是一個指向堆區中某個實例的指針。

 

HashTable與HashMap
1、同步性:Hashtable是線程安全的,也就是說是同步的,而HashMap是線程序不安全的,不是同步的。
2、HashMap允許存在一個爲null的key,多個爲null的value 。
3、hashtable的key和value都不允許爲null。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章