面經總結:J2SE

 

  • 面向對象的特性?

(1.特性;2.優勢)
封裝、繼承、多態;
  封裝:封裝隱藏了類的內部實現機制,能夠在不影響使用的狀況下改變類的內部結構,同時也保護了數據。對外界而言它的內部細節是隱藏的,暴露給外界的只是它的訪問方法。 優勢:1.隱藏對象的屬性來保護對象內部狀態;2.禁止對象的不良交互提升模塊化;
  繼承: 給對象提供了從基類獲取字段和方法的能力。優勢:提升代碼的重用性;
  多態: 指容許不一樣類的對象對同一消息作出相應。所謂多態就是指程序中定義的引用變量所指向的具體類型和經過該引用變量發出的方法調用在編程時並不肯定,而是在程序運行期間才肯定,即一個引用變量倒底會指向哪一個類的實例對象,該引用變量發出的方法調用究竟是哪一個類中實現的方法,必須在由程序運行期間才能決定。由於在程序運行時才肯定具體的類,這樣,不用修改源程序代碼,就可讓引用變量綁定到各類不一樣的類實現上,從而致使該引用調用的具體方法隨之改變,即不修改程序代碼就能夠改變程序運行時所綁定的具體代碼,讓程序能夠選擇多個運行狀態,這就是多態性。
  實現多態的三個條件:
  1) 繼承:在多態中必須存在有繼承關係的子類和父類。
  2) 重寫:子類對父類中某些方法進行從新定義,在調用這些方法時就會調用子類的方法。
  3) 向上轉型:在多態中須要將子類的引用賦給父類對象,只有這樣該引用纔可以具有技能調用父類的方法和子類的方法。
  多態的特色:父類對象引用子類;1.能夠調用父類方法;2.子類重寫父類則調用子類方法;3.只存在子類的方法不可調用,子類重載父類的方法不可調用(重載的方法父類中不存在!);
  多態的優勢:可擴充性,能夠方便的增長新的子類不影響已存在類的功能特性。
 
 
  • static能夠修飾什麼?final能夠修飾什麼?

static 能夠修飾什麼:成員變量、成員方法、靜態塊;編程

final 能夠修飾什麼:成員變量、成員方法、類;數組

1、final關鍵字能夠用來修飾類、方法、變量。各有不一樣。多線程

A、修飾類(class)。 
     一、該類不能被繼承。 
     二、類中的方法不會被覆蓋,所以默認都是final的。 
     三、用途:設計類時,若是該類不須要有子類,沒必要要被擴展,類的實現細節不容許被改變,那麼就設計成final類模塊化

B、修飾方法(method) 
     一、該方法能夠被繼承,可是不能被覆蓋。 
     二、用途:一個類不容許子類覆蓋該方法,則用final來修飾 
     三、好處:能夠防止繼承它的子類修改該方法的意義和實現;更爲高效,編譯器在遇到調用fianal方法轉入內嵌機制,提升了執行效率。 
     四、注意:父類中的private成員方法不能被子類覆蓋,所以,private方法默認是final型的(能夠查看編譯後的class文件)spa

C、修飾變量(variable) 
     一、用final修飾後變爲常量。包括靜態變量、實例變量和局部變量這三種。 
     二、特色:能夠先聲明,不給初值,這種叫作final空白。可是使用前必須被初始化。一旦被賦值,將不能再被改變。線程

D、修飾參數(arguments) 
     一、用final修飾參數時,能夠讀取該參數,可是不能對其做出修改設計

2、final關鍵字不能用來抽象類和接口。指針

 

  • Java修飾符的範圍?

成員變量的修飾符:code

private:自身能夠訪問,同包子類不能繼承,同包類不能訪問;對象

默認:自身能夠訪問,同包子類能夠繼承,同包類能夠訪問;

protected:自身能夠訪問,同包子類能夠繼承,不一樣包子類能夠繼承,同包類能夠訪問,其餘類不能夠訪問;

public:不一樣包子類能夠繼承,其餘類能夠訪問;

public > protected > default > private

public 指定該變量爲公共的,他能夠被任何對象的方法訪問

private 指定該變量只容許本身的類的方法訪問,其餘任何類(包括子類)中的方法均不能訪問。

protected 指定該變量能夠被自身和子類訪問。在子類中能夠覆蓋此變量。

 

  • == 和 equals 的區別?

1.基本類型; 2.基本類型封裝;3.String;4.非字符串變量

equals()是Object類的方法;

(1) 若是是基本類型比較,那麼只能用==來比較,用equals會編譯錯誤,由於不是對象。int a = 3;

(2) 對於基本類型的包裝類型,好比Boolean、Character、Byte、Shot、Integer、Long、Float、Double等的引用變量,==是比較地址的,而equals是比較內容的。Integer n1 = new Integer(30);

(2.5)對於String a = 「a」; Integer b = 1;這種類型的特有對象建立方式,==的時候值是相同的。

(3)對於字符串變量來講,使用「==」和「equals()」方法比較字符串時,其比較方法不一樣。

「==」比較兩個變量自己的值,即兩個對象在內存中的首地址。

「equals()」比較字符串中所包含的內容是否相同。

String s1 = "123"; 
String s2 = "123"; 

String s4 = new String("123"); 
String s5 = new String("123"); 

s1==s2 true;   s1.equals(s2) true;   

s4==s5 false;   s4.equals(s5) true;

s1==s4 false;   s1.equals(s4) true;

s1/s2分別指向字符串常量"123"建立的對象,在常量池裏只有一個對象,內容爲"123";

s4/s5兩個引用對象指向的對象內容相同,可是new操做符建立的,內存中分配兩塊空間給這兩個對象,因此內存地址不一樣。

(4)對於非字符串變量來講,"=="和"equals"方法的做用是相同的都是用來比較其對象在堆內存的首地址,即用來比較兩個引用變量是否指向同一個對象

 

  • 基本數據類型?

基本類型有八種:

整型4種:byte/short/int/long  字節數:1/2/4/8

字符型1種:char  2

浮點型2種:float/double  4/8

布爾型1種:boolean 1/8(八分之一字節)

一個字節等於8位,等於256個數,就是-128到127

大寫的B表示Bytes=字節;小寫的b表示bit=位;1byte=8bit;

自動轉換:(小可轉大,大轉小會失去精度)

byte -> short/char -> int -> long -> float -> double

 

  •  error/exception/runtime exception區別?

Error和Exception都實現了Throwable接口 
Error指的是JVM層面的錯誤,好比內存不足OutOfMemoryError;
Exception 指的是代碼邏輯的異常,好比下標越界OutOfIndexException;

Exception分爲可查異常CheckedException和運行時異常RuntimeException:

可查異常是必須處理的異常,要麼try catch住,要麼往外拋,誰調用,誰處理,好比 FileNotFoundException、IOException、SQLException等。若是不處理,編譯器就不讓你經過。

運行時異常 又叫作非可查異常,在編譯過程當中,不要求必須進行顯示捕捉。

常見的Runtime Excepiton?

NullPointerException 空指針異常
ArithmeticException 算術異常,好比除數爲零
ClassCastException 類型轉換異常
ConcurrentModificationException 同步修改異常,遍歷一個集合的時候,刪除集合的元素,就會拋出該異常 
IndexOutOfBoundsException 數組下標越界異常
NegativeArraySizeException 爲數組分配的空間是負數異常

爲何分兩種異常?

Java之因此會設計運行時異常的緣由之一,是由於下標越界,空指針這些運行時異常太過於廣泛,若是都須要進行捕捉,代碼的可讀性就會變得很糟糕。

 

  • object類的方法?

9種;(簡要介紹各方法)

  1.對象的複製/獲取/String/釋放:clone/getClass/toString/finalize;

  2.hash:equals/hashCode;

  3.多線程:wait/notify/notifyAll

clone:實現對象的淺複製;

getClass:得到運行時類對象;

finalize:用於釋放資源;

equals:比較對象是否相等;基本類型不能夠用equals,對於String類型「equals」和「==」做用不一樣;

hashcode:用於hash尋找;

wait:使當前線程等待該對象的鎖,當前線程必須是該對象的擁有者,也就是具備該對象的鎖;wait()方法一直等待,直到得到鎖或者被中斷。wait(longtimeout)設定一個超時間隔,若是在規定時間內沒有得到鎖就返回。

調用該方法後當前線程進入睡眠狀態,直到如下事件發生:

(1)其餘線程調用了該對象的notify方法。

(2)其餘線程調用了該對象的notifyAll方法。

(3)其餘線程調用了interrupt中斷該線程。

(4)時間間隔到了。

此時該線程就能夠被調度了,若是是被中斷的話就拋出一個InterruptedException異常。

notify:喚醒在該對象上等待的某個線程

 

  • 反射機制?

反射機制實際上就是動態的加載一些類,這些類在編譯時不須要加載,但運行時再調用。
反射是在運行時獲取類信息,經過動態的調用來改變程序行爲。
 
 
  • 抽象類和接口的區別?

1.變量;2.方法(抽象、public);3.一/多;
  1)變量:接口的變量默認是final的,而抽象類能夠包含非final變量;
  2)方法:接口中的方法默認是public,抽象類方法能夠是private/protected/public;接口中只能提供抽象方法,而抽象類中既能夠提供抽象方法,也能夠提供實現方法;
  3)一個類能夠實現不少接口,但只能繼承一個抽象類;
 
  • Class中方法的執行順序?

static{} > {} > className{} > method(){}

靜態代碼塊>匿名方法塊>構造方法>普通方法。

相關文章
相關標籤/搜索