JAVA面試題-CORE JAVA部分

sunnylovecmc發表於2009-12-04

誠信、創新、開放、合作

 

 

JAVA面試題-CORE JAVA部分

                   --感謝SD0501班畢業學員李曉賓的提供,希望對面試學員和在校學員有所幫助。

1.  main(String[] args)方法內是否可以呼叫一個非靜態方法?

答案:不能

2.  同一個檔案裡是否可以有兩個public類?

答案:不能

3.  方法名是否可以與構造器的名字相同?   答案:可以。

public class Test

{

       public Test(String iceboy)

       {

               System.out.println(iceboy);

       }

       public void Test(String iceboy)

       {

               System.out.println(iceboy);

       }

       public static void main(String[] args)

       {

               Test a = new Test("abc");//輸出“abc

               a.Test("iceboy");//輸出“iceboy

       }

}

4. 初始化了一個沒有run()方法的執行緒類,是否會出錯?

       答案:不會。

       第一種方法:直接繼承Thread類。

public class Test

{

       public static void main(String[] args)

       {

              ThreadClass t = new ThreadClass();

              t.start();

              System.out.println("end");//輸出“end

       }

}

class ThreadClass extends Thread  //Thread類已經實現了空的run()方法。

{            

}

第二種方法:實現Runnable介面

public class Test

{

       public static void main(String[] args)

       {

              ThreadClass t = new ThreadClass();

              Thread thread = new Thread(t);

              thread.start();

              System.out.println("end");

       }

}

class ThreadClass implements Runnable

{     

       public void run()  //必須有此方法否則編譯報錯。它是Runnable介面中的抽象方法。

       {

              System.out.println("Threads");

       }

}

4.  區域性內部類是否可以訪問非final變數?

答案:不能訪問區域性的,可以訪問成員變數(全域性的)。

class Out

{

private String name = "out.name";

void print()

{

        final String work = "out.local.work";//若不是final的則不能被Animal 使用.

        int age=10;

        class Animal

        //定義一個區域性內部類.只能在print()方法中使用.

//區域性類中不能使用外部的非final的區域性變數.全域性的可以.

        {

               public void eat()

               {

                      System.out.println(work);//ok

                      //age=20;error not final

                      System.out.println(name);//ok.

               }

        }

        Animal local = new Animal();

        local.eat();

}

}

5.  選擇語句case中,允許使用的值有哪些?  答案:int,short,char,byte(都在int範圍之內,且是整數)

6.  Math,String是不可繼承的。(final類)

Instanceof 後面跟的應該是OBJECT

構造器可以是私有的。(private

===意義是完全不同的。一個是賦值,一個是等於。

全域性變數可以不進行初始化,如果使用一個區域性變數,則這個區域性變數要被初始化。

7.  try-catch-final塊中的退出語句。

public class Test

{

public static void main(String[] args)

{

        int a=1;

        try

        {

               a=a/0;

        }catch(Exception e)

        {

               System.out.println("catch");

               return;//return時,finally中的語句會執行。

               //System.exit(0);//若用上這句,finally中的語句不會執行。直接返回,退出程式。

        }

        finally //當沒有System.exit(0);時,無論是否發生異常它都會執行。

        {

               System.out.println("finally");

        }

}

}

注:   try-catch-final塊的順序不能調換。

8.  下面都是正確的main方法簽名。

public static void main(String[] args)

public static final void main(String[] args)

static public void main(String[] args)

static public synchronized void main(String[] args)

static public abstract void main(String[] args)//錯誤

9.  if(-0.0 == 0.0)是相等還是不等?

答案:相等。

10.一個抽象類是否可以沒有抽象方法?

       答案:可以。

11RandomAccessFile 類繼承Object,並且實現了DataInputDataOutput介面。

       答案:正確

12CollectionCollections的區別?

答案:Collection是一個介面,但 Collections卻是一個輔助類,裡面有很多靜態的工具方法。而且很有用的。如:reverse(List list)sort(List list, Comparator c)等。Collections沒有實現任何介面。它直接繼承了Object

13class Child extends Parents{}
        class Parents{}

是否可以這樣宣告類,在一個檔案中?
答案:可以。無所謂的。

14. 陣列,無論是當前的,還是類等級的,都會被初始化

        String 是被初始化為 null,不是空字元。                                            

       null,““, ,都是不同的。

       continue”只能在一個迴圈裡(for,do,while),它不能在case語句中出現。
       Primitive(int,char,long
)陣列是不能互相賦值的,即使它們本身可以。

       一個Constructor可以丟擲任何異常。
      
初始化塊是按照宣告的順序執行的。

        所有關於 NaN(Not a Number) non-NaN 的比較,都返回false. 這條很重要

        ==會產生編譯錯誤,如果兩邊型別不匹配的話。

        equals() 返回 false 如果物件型別不同,但不產生 編譯錯誤。

15Java成員變數預設初始化的值。

       成員變數型別        取值
                   byte-0    short-0     int-0       long-0L
                   char-'/u0000'     float-0.0F    double-0.0D   boolean-false
        
所有引用型別          null
16.  integer
long 操作 /% 的話, 可能會丟擲ArithmeticException,比如除0。但是 float

double不會,即使是除以0
      
double a=0;a=a/0;a等於NaN

17普通內部類不可以擁有靜態變數,但靜態內部類可以。
      
 File類沒有 任何 處理檔案內容的方法。

InputStream OutputStream 抽象類, DataInput DataOutput 介面。DataInputStream實現了DataInput介面。

 

18.物件導向的特徵有哪些方面
      
答案:最基本特徵:封裝,繼承,多型。

              其他特徵:抽象關聯,聚合,組合,內聚,耦合

19String是最基本的資料型別嗎? String StringBuffer的區別?
      
答案:String不是一最基本的資料型別。

       STRING的長度是不可變的,STRINGBUFFER的長度是可變的。如果你對字串中的內容經常

進行操作,特別是內容要修改時,那麼使用StringBuffer,如果最後需要String,那麼使用StringBuffertoString()方法

20int Integer 有什麼區別
      
答案:int是基本型別。Integer是引用型別。Integer可以把String轉換成int

21.執行時異常與一般異常有何異同?
答案:異常表示程式執行過程中可能出現的非正常狀態,執行時異常表示虛擬機器的通常操作中可能遇到的異常,是一種常見執行錯誤。java編譯器要求方法必須宣告丟擲可能發生的非執行時異常,但是並不要求必須宣告丟擲未被捕獲的執行時異常。

22.說出一些常用的類,包,介面,請各舉5個?
答案:常用類-System,ArrayList,FileInputStream,Thread,Socket.

              常用的包-java.io,java.util,java.sql,java.javax.naming,java.net
     
常用介面-Collection,Connection, Cloneable, Comparable, Serializable

23.說出ArrayList,Vector, LinkedList的儲存效能和特性.
答案:ArrayListVector都是使用陣列方式儲存資料,此陣列元素數大於實際儲存的資料以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及陣列元素移動等記憶體操作,所以索引資料快而插入資料慢,Vector由於使用了synchronized方法(執行緒安全),通常效能上較ArrayList差,而LinkedList使用雙向連結串列實現儲存,按序號索引資料需要進行前向或後向遍歷,但是插入資料時只需要記錄本項的前後項即可,所以插入速度較快。

24.設計4個執行緒,其中兩個執行緒每次對j增加1,另外兩個執行緒對j每次減少1。寫出程式。

注:因為這4個執行緒共享J,所以執行緒類要寫到內部類中。

加執行緒:每次對j加一。

減執行緒:每次對j減一。
public class TestThreads

{

       private int j=1;

       //加執行緒

       private class Inc implements Runnable

       {

              public void run()

              {

                     for(int i = 0;i < 10;i++)

                     {

                            inc();

                     }

              }

       }

       //減執行緒

       private class Dec implements Runnable

       {

              public void run()

              {

                     for(int i = 0;i < 10;i++)

                     {

                            dec();

                     }

              }

       }

       //1

       private synchronized void inc()

       {

              j++;

              System.out.println(Thread.currentThread().getName()+"-inc:"+j);

       }

       //1

       private synchronized void dec()

       {

              j--;

              System.out.println(Thread.currentThread().getName()+"-dec:"+j);

       }

       //測試程式

       public static void main(String[] args)

       {

              TestThreads test = new TestThreads();

              //建立兩個執行緒類

              Thread thread = null;

              Inc inc = test.new Inc();

              Dec dec = test.new Dec();

              //啟動4個執行緒

              for(int i = 0;i < 2;i++)

              {

                     thread = new Thread(inc);

                     thread.start();

                     thread = new Thread(dec);

                     thread.start();

              }

       }

}

25.陣列轉換問題。

       Object[] object  =  new Person[2];

       Person [] person  =  new Person [3];

       person  =  (Person [])object;//可以轉換

       int[] i = new int[2];

       long[] l = new int[3];

       i = (long[])l;//不可以轉換

26socket通訊寫出客戶端和伺服器端的通訊,要求客戶傳送資料後能夠回顯相同的資料。
       Server.java:
原始碼

       import java.net.*;

import java.io.*;

 

class  Server

{

              public Server()

              {

                     BufferedReader br = null;

                     PrintWriter pw = null;

                     try

                     {

                            ServerSocket server = new ServerSocket(8888);//建立伺服器端

                            Socket socket = server.accept();//監聽客戶端

                            //得到該連線的輸入流

                            br = new BufferedReader(new InputStreamReader(socket.getInputStream()));

                            //得到該連線的輸出流

                            pw = new PrintWriter(socket.getOutputStream(),true);

                            //先讀後寫

                            String data = br.readLine();

                            System.out.println(data);//輸出到控制檯

                            pw.println(data);//轉發給客戶端

                     }catch(Exception e)

                     {

                            e.printStackTrace();

                     }

                     finally

                     {

                            try

                            {

                                   //關閉讀寫流

                                   br.close();

                                   pw.close();

                            }catch(Exception e)

                            {}

                     }

              }

              public static void main(String[] args)

              {

                     Server server = new Server();

              }

}

Client.java:原始碼

import java.net.*;

import java.io.*;

 

class  Client

{

       public Client()

       {

              BufferedReader br = null;

              PrintWriter pw = null;

              try

              {

                Socket socket = new Socket("localhost",8888);//與伺服器建立連線,伺服器要先啟

                //得到Socket的輸入與輸出流

                br = new BufferedReader(new InputStreamReader(socket.getInputStream()));

                pw = new PrintWriter(socket.getOutputStream(),true);

                //先寫後讀

                pw.println("Client:你好!");

                String data = null;

                while(true)

                {

                   data = br.readLine();

                   if(data!=null) break;

                }

                System.out.println(data);

              }catch(Exception e)

              {

                     e.printStackTrace();

              }

              finally

              {

                     try

                     {

                            br.close();

                            pw.close();

                     }catch(Exception e)

                     {}

              }

       }

       public static void main(String[] args)

       {

              Client c = new Client();

       }

}

27談談final, finally, finalize的區別

答案:final 用於宣告屬性,方法和類,分別表示屬性不可變,注意:如果是基本型別說明變

量本身不能改變,如果是引用型別,說明它不能指向其他的物件了。但物件還是可以改變

的。方法不可覆蓋,類不可繼承。

finally是異常處理語句結構的一部分,表示無論是否出現異常總是執行。

finalizeObject類的一個方法,在垃圾收集器執行的時候會呼叫被回收物件的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關閉檔案等。

28Anonymous Inner Class (匿名內部類) 是否可以extends(繼承)其它類,是否可以implements(實現)interface(介面)?
   
答案:可以繼承其他類或完成其他介面,在swing程式設計中常用此方式。
29.Static Nested Class
Inner Class的不同,說得越多越好(面試題有的很籠統)
   
答案:Static Nested Class是被宣告為靜態(static)的內部類,它可以不依賴於外部類例項      

被例項化。而通常的內部類需要在外部類例項化後才能例項化。

 


30.&
&&的區別。
   
答案:&是位運算子,表示按位與運算,&&是邏輯運算子,表示邏輯與(and.

另外,&也可以用於邏輯運算,與&&的區別在於&是非短路運算子,&&是短路運算子
31.HashMap
Hashtable的區別。
   
答案:HashMapHashtable的輕量級實現(非執行緒安全的實現),他們都實現了Map介面 

主要區別在於HashMap允許空(null)鍵值(key)與空值(value,由於非執行緒安全,效率上可能高於Hashtable,Hashtable不允許有空(null)鍵值(key)與空值(value)。

32.什麼時候用assert?
答案:1.4新增關鍵字(語法),用於測試boolean表示式狀態,可用於除錯程式。使用方法 assert <boolean表示式>,表示如果表示式為真(true,則下面的語句執行,否則丟擲AssertionError

33GC是什麼? 為什麼要有GC?
答案:GC是垃圾收集的意思(Gabage Collection,記憶體處理是程式設計人員容易出現問題的地方,忘記或者錯誤的記憶體回收會導致程式或系統的不穩定甚至崩潰,Java提供的GC功能可以自動監測物件是否超過作用域從而達到自動回收記憶體的目的,Java語言沒有提供釋放已分配記憶體的顯式操作方法。

34String s = new String("xyz");建立了幾個String Object?
答案:兩個,一個是物件,一個是物件的引用。

35Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
答案:Math.round(11.5)==12

Math.round(-11.5)==-11,總是返回接近0的數。

36short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?
答案:short s1 = 1; s1 = s1 + 1; 有錯s1+1運算結果是int型,需要強制轉換型別)

short s1 = 1; s1 += 1;沒有錯s1==2

37.sleep() wait() 有什麼區別?
答案:sleep是執行緒類(Thread)的方法,導致此執行緒暫停執行指定時間(休息),把執行機會給其他執行緒,但是監控狀態依然保持,到時後會自動恢復,時間到了會繼續執行。呼叫sleep不會釋放物件鎖。

waitObject類的方法,對此物件呼叫wait方法導致本執行緒放棄物件鎖,進入等待此物件的等待鎖定池,只有針對此物件發出notify方法(或notifyAll後本執行緒才進入物件鎖定池準備獲得物件鎖進入執行狀態。

38Java有沒有goto語句?
答案:沒有

39.陣列有沒有length()這個方法? String有沒有length()這個方法?
答案:陣列沒有length()這個方法,有length的屬性。
String
length()這個方法。

40.陣列是不是基本型別?

        答案:不是。

41OverloadOverride的區別。Overloaded的方法是否可以改變返回值的型別?
答案:方法的重寫Overriding和過載OverloadingJava多型性的不同表現。

過載Overload是一個類中多型性的一種表現,方法名必需相同,引數列表必需不同.(長度不同或型別不同),與返回值型別沒有關係. 構造器也可以過載.方法名和引數列表都相同,只有返回型別不相同則是方法重複定義.編譯出錯. Overloaded的方法是可以改變返回值的型別。

重寫Override是父類與子類之間多型性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和引數,我們說該方法被重寫 (Overriding)。子類的物件使用這個方法時,將呼叫子類中的定義,對它而言,父類中的定義如同被遮蔽了。

42Set裡的元素能重複嗎?那麼用什麼方法區分是否重複?

    答案:Set裡的元素是不能重複的,如果重複就重複的就不加到裡面。用iterator()方法來區分     

重複與否。應該覆蓋equals()判斷兩個Set是否相等。


43.”==”
equal有何區別?

答案:==”比較的是記憶體地址,equal比較的是內容本身。

44.給我一個你最常見到的runtime exception

       答案:IndexOutOfBoundsException 陣列越界

       NullPointerException 空指標異常

       SystemException 系統異常

45errorexception有什麼區別?
答案:Error表示系統級的錯誤和程式不必處理的異常,我們無法處理它。
Exception
表示是可以捕捉或者需要程式進行處理的異常。

46List, Set, Map是否繼承自Collection介面?

答案:ListSet是。Map不是

47abstract classinterface有什麼區別?

答案:一個只能繼承一個抽象類,但卻可以實現多個介面。抽象類中可以有也可以沒有抽

象方法。並且可以定義和常規類一樣的變數和方法。而介面中所有的方法都是抽象的,所

有的變數都是靜態不可修改的。

48abstractmethod是否可同時是static,是否可同時是native,是否可同時是synchronized?
      
答案:都不能。

49.介面是否可繼承介面? 抽象類是否可實現(implements)介面? 抽象類是否可繼承實體類答(concrete class)?
答案:介面可以繼承介面。介面間繼承(extends,不能實現(implements

抽象類可以實現(implements)介面,但介面不能實現抽象類。抽象類間也用繼承(extends)。

抽象類是否可繼承實體類,但前提是實體類必須有無參的建構函式。

 

50.啟動一個執行緒是用run()還是start()?有什麼區別?
答案:啟動一個執行緒是呼叫start()方法,這並不意味著執行緒就會立即執行,只是進入了可執行狀態。直接呼叫run()方法不會產生執行緒,而是把它當作普通的方法呼叫,馬上執行。

51Constructor是否可被override?

        答案:不可以,但可以過載。

52. Class.forName的作用?

答:呼叫該訪問返回一個類名為指定字串的類的物件。

53.檔案讀寫的基本類有哪些?

       答案:FileInputStream,FileOutputStread,File,IOException等。

54.寫一個氣泡排序的程式。

       public class Sort

{

         public static void main(String[] args)

         {

               int[] array = {2,3,4,1,43,432,1,344,234,2,3,43,32,434,3432,43,2432,432,4,43};

               int num = 0;

               /*

                     冒泡排續

               */

               for(int i = 0;i < array.length;i++)

               {

                      /*

                             每下底一個元素,則調換的次數減一。

                             注意:j<array.length-i-1,不減一則陣列下標越界。

                      */

                      for(int j = 0;j<array.length-i-1;j++)

                      {

                              int temp = 0;

                              /*

                                    兩兩比較若前面的大於後面的則進行調換。

                              */

                              if(array[j] > array[j+1])

                              {

                                      temp = array[j];

                                      array[j] = array[j+1];

                                      array[j+1] = temp;

                               }

                       }

                 }

                /*

                     輸出排序後的陣列

                */

               System.out.println("****************已排序的陣列********");

               for(int i = 0;i < array.length;i++)

               {

                      System.out.print(array[i]+"       ");

                      num++;

                      if(num == 5)//每行輸出5個。

                      {

                             System.out.println();

                             num = 0;

                      }

                }

          }

 }

55序列化的注意事項以及如何實現序列化?(Serializable

       答案:*******************************

56.執行緒的基本概念、執行緒的基本狀態以及狀態之間的關係

       答案:*******************************

57.執行緒的同步、如何實現執行緒的同步?

       答案:*******************************

58幾種常用的資料結構及內部實現原理。

       答案:*******************************

59Socket通訊(TCPUDP區別及Java實現方式)
      
答案:*******************************

60Java的事件委託機制和垃圾回收機制

       答案:*******************************

61作用域public,private,protected,以及不寫時的區別。

       答案:private-類可見,不寫-包可見

              protected-包可見,並子類可見   public-都可見

62Java的國際化
      
答案:*******************************

63怎樣讓程式到後臺去執行?

       答案:*******************************

64.怎麼把一個檔案中的東西做全文替換。

       答案:*******************************

65ArrayListVector的區別?

        答案:就ArrayListVector主要從二方面來說.
同步性:Vector是執行緒安全的,也就是說是同步的,而ArrayList是執行緒序不安全的,不是同步的
資料增長:當需要增長時,Vector預設增長為原來一倍,而ArrayList卻是原來的一半

66char型變數中能不能存貯一箇中文漢字?為什麼?
答:是能夠定義成為一箇中文的,因為java中以unicode編碼,一個char16個位元組,所以放一箇中文是沒問題的。

67.多執行緒有幾種實現方法,都是什麼?同步有幾種實現方法,都是什麼?
答:多執行緒有兩種實現方法,分別是繼承Thread類與實現Runnable介面
同步的實現方面有兩種,分別是synchronized,waitnotify

68.垃圾回收機制,如何優化程式?
答案:*******************************

69floatfloat f=3.4是否正確?
:不正確。型別不匹配,應該用強制型別轉換,如下所示:float f=3.4f;

70. Java中異常處理機制,事件機制?

        答案:*******************************

71.現在輸入n個數字,以逗號,分開; 然後可選擇升或者降序排序;
import java.util.
StringTokenizer;

import java.util.Arrays;

public class Test

{

              public static void main(String[] args)

              {

                     String s = "2,654,24,6554,3234,3544,666,354,5435,11";

                     StringTokenizer  tok  = new StringTokenizer(s,",");

                     //返回有多少個被分割元素

                     int count = tok.countTokens();

                     int[] result = new int[count];

                     //把分割得到的數字存到陣列中去。

                     for(int i = 0;i<count;i++)

                     {

                            String temp = (String)tok.nextElement();

                            result[i] = Integer.parseInt(temp);

                     }

                     //排序

                     Arrays.sort(result);

                     for(int i = 0;i<result.length;i++)

                     {

                            if(i==0)

                            {

                                   System.out.print(result[i]);

                                   continue;//第一個元素的前面不列印“,”

                            }

                            System.out.print(","+result[i]);

                     }

                     System.out.println();//輸出:2,11,24,354,654,666,3234,3544,5435,6554

              }

}

72.金額轉換,阿拉伯數字的金額轉換成中國傳統的形式如:

(¥1011)->(一千零一拾一元整)輸出。

答案:************************************
73.
當一個執行緒進入一個物件的一個synchronized方法後,其它執行緒是否可進入此物件的其它方法?
    
答案:能,一個物件的synchronized方法只能由一個執行緒訪問。但其他執行緒可以同時訪問這個物件的非synchronized方法
74.try {}
裡有一個return語句,那麼緊跟在這個try後的finally {}裡的code會不會被執行,什麼時候被執行,在return前還是後?
   
答案:會執行,在return前執行。

75.程式設計題: 用最有效率的方法算出2乘以8等於幾? C背景的程式設計師特別喜歡問這種問題。
答案:2 << 3 。如果是210次方則是:1<<10.

76.兩個物件值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對?

答案:兩個物件的值是否相同,根據的是equals方法,而hash code是由hashCode()方法決定。因此值相同的物件hash code可能不同。

77.當一個物件被當作引數傳遞到一個方法後,此方法可改變這個物件的屬性,並可返回變化後的結果,那麼這裡到底是值傳遞還是引用傳遞?
   
答案:是值傳遞Java 程式語言只由值傳遞引數。當一個物件例項作為一個引數被傳遞到方法

中時,引數的值就是對該物件的引用。物件的內容可以在被呼叫的方法中改變,但物件的引用

是永遠不會改變的。
78
。程式設計題: 寫一個Singleton出來。

方式一:醉漢式

public class Singleton

{

private static Singleton test  = new Singleton();//靜態的。保留自身的引用。

//必須是私有的建構函式

private Singleton(){}

public static Singleton getInstance()//公共的靜態的方法。

{

return test;

}

}

方式二:懶漢式

public class Singleton

{

private static Singleton test  =  null;//靜態的。保留自身的引用。

//必須是私有的建構函式

private Singleton(){}

public static Singleton getInstance()//公共的靜態的方法。

{

if(test == null)

{

      test = new Singleton();

}

return test;

}

}

79.描述一下JVM載入class檔案的原理機制?

       答案:***********************

80.試舉例說明一個典型的垃圾回收演算法?

       答案:***********************

81.請寫一個java程式實現執行緒連線池功能?

       答案:***********************

82給定一個C語言函式,要求實現在java類中進行呼叫。

       答案:***********************

83編一段程式碼,實現在控制檯輸入一組數字後,排序後在控制檯輸出。

       答案:***********************

84.列出某資料夾下的所有檔案;
答案:***********************

85實現從檔案中一次讀出一個字元的操作

        答案:***********************

86列出一些控制流程的方法;

        答案:***********************

87多執行緒有哪些狀態?
答案:***********************

88.編寫了一個伺服器端的程式實現在客戶端輸入字元然後在控制檯上顯示,直到輸入"END"為止,讓你寫出客戶端的程式。

        答案:***********************

99.請用java寫二叉樹演算法,實現新增資料形成二叉樹功能,並以先序的方式列印出來.

        答案:****************************************

100呼叫系統命令實現刪除檔案的操作;

        答案:****************************************

101C++Java中的異常處理機制的簡單原理和應用。
答案:當JAVA程式違反了JAVA的語義規則時,JAVA虛擬機器就會將發生的錯誤表示為一個異常。違反語義規則包括2種情況。一種是JAVA類庫內建的語義檢查。例如陣列下標越界,會引發IndexOutOfBoundsException;訪問null的物件時會引發NullPointerException。另一種情況就是JAVA允許程式設計師擴充套件這種語義檢查,程式設計師可以建立自己的異常,並自由選擇在何時用throw關鍵字引發異常。所有的異常都是java.lang.Thowable的子類。

102Java的介面和C++的虛類的相同和不同處。
答案:由於Java不支援多繼承,而有可能某個類或物件要使用分別在幾個類或物件裡面的方法或屬性,現有的單繼承機制就不能滿足要求。與繼承相比,介面有更高的靈活性,因為介面中沒有任何實現程式碼。當一個類實現了介面以後,該類要實現介面裡面所有的方法和屬性,並且介面裡面的屬性在預設狀態下面都是public static,所有方法預設情況下是public.一個類可以實現多個介面。

103.垃圾回收的優點和原理。並考慮2種回收機制。
答案:Java語言中一個顯著的特點就是引入了垃圾回收機制,使c++程式設計師最頭疼的記憶體管理的問題迎刃而解,它使得Java程式設計師在編寫程式的時候不再需要考慮記憶體管理。由於有個垃圾回收機制,Java中的物件不再有作用域的概念,只有物件的引用才有作用域。垃圾回收可以有效的防止記憶體洩露,有效的使用可以使用的記憶體。垃圾回收器通常是作為一個單獨的低階別的執行緒執行,不可預知的情況下對記憶體堆中已經死亡的或者長時間沒有使用的物件進行清楚和回收,程式設計師不能實時的呼叫垃圾回收器對某個物件或所有物件進行垃圾回收。回收機制有分代複製垃圾回收和標記垃圾回收增量垃圾回收

104描述一下你最常用的程式設計風格。

        答案:****************************************

105heapstack有什麼區別。
答案:棧是一種線形集合,其新增和刪除元素的操作應在同一段完成。棧按照後進先出的方式進行處理。
堆是棧的一個組成元素

106.Static Nested Class Inner Class的不同,說得越多越好(面試題有的很籠統)
答案:Nested Class (一般是C++的說法),Inner Class (一般是JAVA的說法)Java內部類與C++巢狀類最大的不同就在於是否有指向外部的引用上。
注: 靜態內部類(Inner Class)意味著1建立一個static內部類的物件,不需要一個外部類物件,2不能從一個static內部類的一個物件訪問一個外部類物件

107JAVA類實現序列化的方法?在collection中,實現比較要實現什麼樣的介面?

        答案:java類實現序列化需要實現java.io.Serializable介面。

        collection中實現比較要實現java.lang.Comparable介面或java.util.Comparator介面。

相關文章