JAVA精髓(基礎篇)

Java基礎 


1、Java基本數據類型 

答:基本類型,或者叫做內置類型,是JAVA中不同於類的特殊類型。
Java中的簡單類型從概念上分爲四種:實數、整數、字符、布爾值。但是有一點需要說明的是,Java裏面只有八種原始類型,其列表如下:
實數:double、float
整數:byte、short、int、long
字符:char
布爾值:boolean
Integer VS int
public final class Integer extends Number implements Comparable
Integer類在對象中包裝了一個基本類型int的值。Integer類型的對象包含一個int類型的字段。
此外,該類提供了多個方法,能在int類型和String類型之間互相轉換,還提供了處理int類型時非常有用的其他一些常量和方法。

2、原始數據類型和封裝類的區別 

答:封裝類型就是java面向對象引入的數據類型,裏面定義了一些常用的方法,是用new分配到堆內存上的。引入封裝類型的主要目的是因爲類能夠提供必要的方法,用於實現基本數據類型的數值與可打印字符串之間的轉換,以及一些其他的實用程序方法。Java爲每個原始類型提供了封裝類。
3、String、StringBuffer、StringBuilder區別 


4、運行時異常和非運行時異常區別
 
答:a.運行時異常是不需要捕獲的,程序員可以不去處理,當異常出現時,虛擬機會處理。常見的運行時異常有空指針異常。 
我們常見的5中運行時異常: 
[java] view plain copy
ClassCastException(類轉換異常)   
IndexOutOfBoundsException(數組越界)   
NullPointerException(空指針)   
ArrayStoreException(數據存儲異常,操作數組時類型不一致)   
還有IO操作的BufferOverflowException異常 ,具體可以參見java的API:http://docs.oracle.com/javase/7/docs/api/ 

b.非運行時異常就必須得捕獲了,否則編譯不過去,java編譯器要求程序員必須對這種異常進行catch,Java認爲Checked異常都是可以被處理(修復)的異常,所以Java程序必須顯式處理Checked異常。 

常見的非運行異常有io異常和sql異常。 
[java] view plain copy
IOException、FileNotFoundExcetion 和SQLException  

finally是異常處理工作的一部分,表示總是執行。一般finally寫的代碼語句就是流的關閉。也就是做了一項清理,工作清理工作對於我們來說是必不可少的,因爲如果一些消耗資源的操作,比如IO,JDBC。
如果我們用完以後沒有及時正確的關閉,那後果會很嚴重,這意味着內存泄露。(有人說過,對於資源的及時正確的清理是程序員的基本素質之一) 

5、簡述一下面向對象的特徵,並舉例說明你對面向對象的理解 
6、正則表達式的用法 

http://www.cnblogs.com/xhj123/p/6032683.html

7、Java 語言如何進行異常處理,關鍵字:throws、throw、try、catch、finally分別代表什麼意義?finally代碼是在return之後還是之前執行? 

throws是獲取異常
throw是拋出異常
try是將會發生異常的語句括起來,從而進行異常的處理,
catch是如果有異常就會執行他裏面的語句,
而finally不論是否有異常都會進行執行的語句。

finally語句在try和catch語句中的return執行後、返回前執行;
若finally語句中沒有return,則其執行結果不影響try和catch中已確定的返回值;
若finally語句中有return,則其執行後的結果會直接返回。

8、abstract class和interface有什麼區別?接口可以繼承接口嗎?接口可以繼承抽象類嗎,爲什麼? 

接口可以繼承接口。抽象類可以實現(implements)接口,抽象類是可以繼承具體類。抽象類中可以有靜態的main方法。
記住抽象類與普通類的唯一區別就是不能創建實例對象和允許有abstract方法
接口不能繼承抽象類,抽象類裏面是可以存在非抽象方法的,但是接口裏面只能存在抽象方法。假設接口繼承抽象類,那麼該接口也會繼承抽象類裏面的非抽象方法,這就與接口的定義矛盾了

9、構造器(constructor)是否可被重寫(override)? 

構造器Constructor不能被繼承,因此不能重寫Override,但可以被重載Overload。

10、是否可以繼承String類? 

答案: 不可以,因爲String類有final修飾符,而final修飾的類是不能被繼承的,實現細節不允許改變

11、Java 中的final關鍵字有哪些用法? 

final關鍵字是我們經常使用的關鍵字之一,它的用法有很多,但是並不是每一種用法都值得我們去廣泛使用。它的主要用法有以下四種:

用來修飾數據,包括成員變量和局部變量,該變量只能被賦值一次且它的值無法被改變。對於成員變量來講,我們必須在聲明時或者構造方法中對它賦值;
用來修飾方法參數,表示在變量的生存期中它的值不能被改變;
修飾方法,表示該方法無法被重寫;
修飾類,表示該類無法被繼承。
上面的四種方法中,第三種和第四種方法需要謹慎使用,因爲在大多數情況下,如果是僅僅爲了一點設計上的考慮,我們並不需要使用final來修飾方法和類

12、try{}裏有一個return語句,那麼緊跟在這個try後的finally{}裏的代碼會不會被執行,什麼時候被執行,在return前還是後? 
題7
13、闡述final、finally、finalize的區別。 

final用於聲明屬性,方法和類,分別表示屬性不可交變,方法不可覆蓋,類不可繼承。
finally是異常處理語句結構的一部分,表示總是執行。
finalize是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,供垃圾收集時的其他資源回收,例如關閉文件等

14、如何通過反射創建對象? 

根據以上代碼:.使用反射機制創建對象的步驟如下:
1、先聲明你要創建的對象的類全稱;使用Class類的靜態方法forName(String.className)加載這個類的字節碼(注意,加載字節碼不等於實例化對象) ,返回 一個Class對象,這個對象代表的是一個字節碼文件。
2、調用這個類對象(字節碼)的方法newInstance()方法(注意:這裏的這個newInstance方法默認調用默認的構造方法即調用無參的構造方法, 一旦構造方法有參數時,此方法行不通,需要使用構造方法的對象的相關方法來 實例化)實例化類Person,返回的是Object類型
3、強制轉換成Person類型即你所需類型
而獲得Class對象的方法還有:
Class c = Class.forName("java.lang.String");這條語句得到一個 String 類的類對象。還有另一種方法,如下面的語句:Class c = int.class; 或者 Class c = Integer.TYPE;它們可獲得基本類型的類信息。其中後一種方法中訪問的是基本類型的封裝類 (如 Integer) 中預先定義好的 TYPE 字段

15、Java 8的新特性 


16、Java數組和鏈表的兩種結構的操作效率 
數組靜態分配內存,鏈表動態分配內存; 
數組在內存中連續,鏈表不連續; 
數組元素在棧區,鏈表元素在堆區; 
數組利用下標定位,時間複雜度爲O(1),鏈表定位元素時間複雜度O(n); 
數組插入或刪除元素的時間複雜度O(n),鏈表的時間複雜度O(1)。
17、Java的引用類型有哪幾種 

18、default關鍵字的作用是修飾接口中的方法,使得其有方法體,子類實現該接口,可以不用實現該方法。

19、某些java類爲什麼要實現Serializable接口
什麼是Serializable接口?
一個對象序列化的接口,一個類只有實現了Serializable接口,它的對象才能被序列化
什麼是序列化?
將對象的狀態信息轉換爲可以存儲或傳輸的形式的過程,在序列化期間,對象將其當前狀態寫入到臨時存儲區或持久性存儲區,之後,便可以通過從存儲區中讀取或反序列化對象的狀態信息,來重新創建該對象
什麼情況下需要序列化?
當我們需要把對象的狀態信息通過網絡進行傳輸,或者需要將對象的狀態信息持久化,以便將來使用時都需要把對象進行序列化
Serializable主要用來支持兩種主要的特性:
1、Java的RMI(remote method invocation),RMI允許像在本機上一樣操作遠程機器上的對象,當發送消息給遠程對象時,就需要用到序列化機制來發送參數和接受返回值
2、Java的JavaBean,Bean的狀態信息通常是在設計時配置的,Bean的狀態信息必須被保存下來,以便當程序運行時能恢復這些狀態信息,這也需要序Serializable機制

20、不通過構造函數也能創建對象嗎?
答案:yes 
解析:Java創建對象的幾種方式(重要): 
(1) 用new語句創建對象,這是最常見的創建對象的方法。 
(2) 運用反射手段,調用java.lang.Class或者java.lang.reflect.Constructor類的newInstance()實例方法。 
(3) 調用對象的clone()方法。 
(4) 運用反序列化手段,調用java.io.ObjectInputStream對象的 readObject()方法。
(1)和(2)都會明確的顯式的調用構造函數 ;(3)是在內存上對已有對象的影印,所以不會調用構造函數 ;(4)是從文件中還原類的對象,也不會調用構造函數。
21、LIST深度拷貝使用反序列化,IO流來處理

22、
override(重寫)
   1、方法名、參數、返回值相同。
   2、子類方法不能縮小父類方法的訪問權限。
   3、子類方法不能拋出比父類方法更多的異常(但子類方法可以不拋出異常)。
   4、存在於父類和子類之間。
   5、方法被定義爲final不能被重寫。
 overload(重載)
  1、參數類型、個數、順序至少有一個不相同。 
  2、不能重載只有返回值不同的方法名。
  3、存在於父類和子類、同類中
 

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