StringBuffer與StringBuilder的區別
StringBuffer和StringBuilder類都表示內容可以被修改的字符串,StringBuilder是線程不安全的,運行效率高,如果一個字符串變量是在方法裏面定義,這種情況只可能有一個線程訪問它,不存在不安全的因素了,則用StringBuilder。如果要在類裏面定義成員變量,並且這個類的實例對象會在多線程環境下使用,那麼最好用StringBuffer。
編程:1.編寫一個函數將一個十六進制數的字符串參數轉換成整數返回。
String str = “13abf”;
int len = str.length;
int sum = 0;
for(int i=0;i<len;i++){
char c = str.charAt(len-1-i);
int n = Character.digit(c,16);
sum += n * (1<<(4*i));
}
java中實現多態的機制是什麼?
靠的是父類或接口定義的引用變量可以指向子類或具體實現類的實例對象,
而程序調用的方法在運行期才動態綁定,就是引用變量所指向的具體實例
對象的方法,也就是內存里正在運行的那個對象的方法,而不是引用變量
的類型中定義的方法。
abstract class和interface有什麼區別?
含有abstract修飾符的class即爲抽象類,abstract 類不能創建的實例對象。含有abstract方法的類必須定義爲abstract class,abstract class類中的方法不必是抽象的。abstract class類中定義抽象方法必須在具體(Concrete)子類中實現,所以,不能有抽象構造方法或抽象靜態方法。如果的子類沒有實現抽象父類中的所有抽象方法,那麼子類也必須定義爲abstract類型。
接口(interface)可以說成是抽象類的一種特例,接口中的所有方法都必須是抽象的。接口中的方法定義默認爲public abstract類型,接口中的成員變量類型默認爲public static final。
下面比較一下兩者的語法區別:
1.抽象類可以有構造方法,接口中不能有構造方法。
2.抽象類中可以有普通成員變量,接口中沒有普通成員變量
3.抽象類中可以包含非抽象的普通方法,接口中的所有方法必須都是抽象的,不能有非抽象的普通方法。
4. 抽象類中的抽象方法的訪問類型可以是public,protected和(默認類型,雖然
eclipse下不報錯,但應該也不行),但接口中的抽象方法只能是public類型的,並且默認即爲public abstract類型。
5. 抽象類中可以包含靜態方法,接口中不能包含靜態方法
6. 抽象類和接口中都可以包含靜態成員變量,抽象類中的靜態成員變量的訪問類型可以任意,但接口中定義的變量只能是public static final類型,並且默認即爲public static final類型。
7. 一個類可以實現多個接口,但只能繼承一個抽象類。
下面接着再說說兩者在應用上的區別:
接口更多的是在系統架構設計方法發揮作用,主要用於定義模塊之間的通信契約。
而抽象類在代碼實現方面發揮作用,可以實現代碼的重用,例如,模板方法設計模式
是抽象類的一個典型應用,假設某個項目的所有Servlet類都要用相同的方式進行權限
判斷、記錄訪問日誌和處理異常,那麼就可以定義一個抽象的基類,讓所有的Servlet都
繼承這個抽象基類,在抽象基類的service方法中完成權限判斷、記錄訪問日誌和處理異
常的代碼,在各個子類中只是完成各自的業務邏輯代碼,僞代碼如下:
public abstract class BaseServlet extends HttpServlet
{
public final void service(HttpServletRequest request, HttpServletResponse response) throws IOExcetion,ServletException
{
記錄訪問日誌
進行權限判斷
if(具有權限)
{
try
{
doService(request,response);
}
catch(Excetpion e)
{
記錄異常信息
}
}
}
protected abstract void doService(HttpServletRequest request, HttpServletResponse response) throws IOExcetion,ServletException;
//注意訪問權限定義成protected,顯得既專業,又嚴謹,因爲它是專門給子類用的
}
public class MyServlet1 extends BaseServlet
{
protected void doService(HttpServletRequest request, HttpServletResponse response) throws IOExcetion,ServletException
{
本Servlet只處理的具體業務邏輯代碼
}
}
父類方法中間的某段代碼不確定,留給子類幹,就用模板方法設計模式。
備註:這道題的思路是先從總體解釋抽象類和接口的基本概念,然後再比較兩者的語法
細節,最後再說兩者的應用區別。比較兩者語法細節區別的條理是:先從一個類中的構
造方法、普通成員變量和方法(包括抽象方法),靜態變量和方法,繼承性等6個方面
逐一去比較回答,接着從第三者繼承的角度的回答,特別是最後用了一個典型的例子
來展現自己深厚的技術功底。