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、存在於父類和子類、同類中
相關文章
- Spark基礎學習精髓——第一篇Spark
- Java基礎篇Java
- Java基礎-併發篇Java
- (2020)JAVA基礎篇(一)Java
- java基礎篇之多型Java多型
- Java基礎-面相物件篇Java物件
- java基礎private/封裝篇Java封裝
- 【JAVA】【面試】【基礎篇】- 集合Java面試
- Java基礎篇--設計模式Java設計模式
- Java基礎知識篇——Java基本介紹Java
- Java基礎篇—Java類載入機制Java
- Java基礎知識篇05——方法Java
- JAVA基礎學習篇之反射Java反射
- Java多執行緒-基礎篇Java執行緒
- Java面試題-基礎篇一Java面試題
- Java面試題-基礎篇二Java面試題
- 2019年Java面試-基礎篇Java面試
- Java面試題-基礎篇四Java面試題
- Java面試題-基礎篇五Java面試題
- Android面試之Java 基礎篇Android面試Java
- Java面試題基礎篇(一)Java面試題
- Java面試題基礎篇(二)Java面試題
- Java面試題基礎篇(三)Java面試題
- 夯實Java基礎系列1:Java物件導向三大特性(基礎篇)Java物件
- 《Java工程師成神之路-基礎篇》Java基礎知識——String相關Java工程師
- Java基礎知識篇02——Java基本語法Java
- Java核心基礎第3篇-Java流程控制Java
- Java基礎知識篇02——封裝Java封裝
- 基礎篇:JAVA集合,面試專用Java面試
- java安全編碼指南之:基礎篇Java
- 初識java day01(基礎篇)Java
- 基礎篇:深入解析JAVA反射機制Java反射
- 基礎篇:JAVA引用型別和ThreadLocalJava型別thread
- 聊聊Java中的異常(基礎篇)Java
- 零基礎學Java-基礎語法篇day1Java
- 《Java工程師成神之路-基礎篇》Java基礎知識——序列化(已完結)Java工程師
- 基礎篇:java GC 總結,建議收藏JavaGC
- 這篇 Java 基礎,我吹不動了Java