1. 程式人生 > >面經總結:J2SE

面經總結:J2SE

如果 向上轉型 必須 浮點型 interrupt mage lean 方式 8bit

  • 面向對象的特性?

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

static 可以修飾什麽:成員變量、成員方法、靜態塊;

final 可以修飾什麽:成員變量、成員方法、類;

一、final關鍵字可以用來修飾類、方法、變量。各有不同。

A、修飾類(class)。
1、該類不能被繼承。
2、類中的方法不會被覆蓋,因此默認都是final的。
3、用途:設計類時,如果該類不需要有子類,不必要被擴展,類的實現細節不允許被改變,那麽就設計成final類

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

C、修飾變量(variable)
1、用final修飾後變為常量。包括靜態變量、實例變量和局部變量這三種。
2、特點:可以先聲明,不給初值,這種叫做final空白。但是使用前必須被初始化。一旦被賦值,將不能再被改變。

D、修飾參數(arguments)
1、用final修飾參數時,可以讀取該參數,但是不能對其作出修改

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

  • Java修飾符的範圍?

成員變量的修飾符:

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(){}

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

面經總結:J2SE