經典完整java面試題大全

http://www.dev26.com/blog/article/404

Java面向對象

1.       super()與this()的區別?

This():當前類的對象,super父類對象。html

Super():在子類訪問父類的成員和行爲,必須受類繼承規則的約束前端

而this他表明當前對象,固然全部的資源均可以訪問.java

在構造函數中,若是第一行沒有寫super(),編譯器會自動插入.可是若是父類沒有不帶參數的構造函數,或這個函數被私有化了(用private修飾).此時你必須加入對父類的實例化構造.而this就沒有這個要求,由於它自己就進行實例化的構造.
而在方法中super和this使用的方法就差很少了.只不過super 要考慮是否能訪問其父類的資源.程序員

2.       做用域public,protected,private,以及不寫時的區別?

Ø        Public:不一樣包、同一包、類內均可用web

Ø        Private:類內算法

Ø        Protected: 不一樣包的子類、同一包、類內均可用spring

Ø        不寫時:同一包內、類內sql

3.       編程輸出以下圖形。

* * * * *數據庫

* * * *apache

* * *

* *

*

代碼以下:

1
2
3
4
5
6
7
8
9
10
public  class  Print {
     public  static  void  main(String[] args) {
        for  ( int  i =  0 ; i <  5 ; i++){
            for  ( int  j =  5 ; j > i; j--) {
               System.out.print( "*" );
            }
            System.out.println();
        }
     }
}


4.       JAVA的事件委託機制和垃圾回收機制

java 事件委託機制的概念,一個源產生一個事件並將它送到一個或多個監聽器那裏。在這種方案中,監聽器簡單的等待,直到它收到一個事件。一旦事件被接受,監聽器將處理這個事件,而後返回。

垃圾回收機制 垃圾收集是將分配給對象但再也不使用的內存回收或釋放的過程。若是一個對象沒有指向它的引用或者其賦值爲null,則次對象適合進行垃圾回收

5.       在JAVA中,如何跳出當前的多重嵌套循環?

用break; return 方法。

6.       什麼是java序列化,如何實現java序列化?(寫一個實例)

序列化:

處理對象流的機制,所謂對象流也就是將對象的內容進行流化。能夠對流化後的對象進行讀寫操做,也可將流化後的對象傳輸於網絡之間。序列化是爲了解決在對對象流進行讀寫操做時所引起的問題。

序列化的實現:

將須要被序列化的類實現Serializable接口,該接口沒有須要實現的方法,implements Serializable只是爲了標註該對象是可被序列化的,而後使用一個輸出流(如:FileOutputStream)來構造一個ObjectOutputStream(對象流)對象,接着,使用ObjectOutputStream對象的writeObject(Object obj)方法就能夠將參數爲obj的對象寫出(即保存其狀態),要恢復的話則用輸入流。

7.       一個".java"源文件中是否能夠包括多個類(不是內部類)?有什麼限制?

能夠。若是這個類的修飾符是public,其類名與文件名必須相同。

8.       排序都有哪幾種方法?請列舉。用JAVA實現一個快速排序?

排序的方法有:插入排序(直接插入排序、希爾排序),交換排序(冒泡排序、快速排序),選擇排序(直接選擇排序、堆排序),歸併排序,分配排序(箱排序、基數排序)

快速排序的僞代碼。

9.       Overload和Override的區別。Overloaded的方法是否能夠改變返回值的類型?

方法的

重寫Override,子類覆蓋父類的方法,將子類傳與父類的引用調用的仍是子類的方法。

重載Overloading 一個類多個方法,名稱相同,參數個數類型不一樣。

二者都是Java多態性的不一樣表現。

Overloaded的方法是能夠改變返回值的類型。

1
2
3
4
5
6
7
8
1 ,  public  class  Ctest()
{
     Public  static  void  main()
{
System.out.prinln( 8 + 8 +」 88 」+ 8 + 8 );
}
}
168888


10.  Final類有什麼特色?

      屬性常量

      方法不能夠overridding

      類不能夠繼承

11.  繼承時候類的執行順序問題,通常都是選擇題,問你將會打印出什麼?

答:父類:

1
2
3
4
5
6
7
8
package  test;
public  class  FatherClass
{
public  FatherClass()
{
System.out.println( "FatherClassCreate" );
}
}


子類:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package  test;
import  test.FatherClass;
public  class  ChildClass  extends  FatherClass
{
public  ChildClass()
{
System.out.println( "ChildClass Create" );
}
public  static  void  main(String[] args)
{
FatherClass fc =  new  FatherClass();
ChildClass cc =  new  ChildClass();
}
}


輸出結果:

C:>java test.ChildClass

FatherClass Create

FatherClass Create

ChildClass Create

12. 內部類的實現方式?

答:示例代碼以下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package  test;
public  class  OuterClass
{
private  class  InterClass
{
Public Interlass()
{
System.out.println( "InterClass Create" );
}
}
public  OuterClass()
{
InterClass ic =  new  InterClass();
System.out.println( "OuterClassCreate" );
}
public  static  void  main(String[] args)
{
OuterClass oc =  new  OuterClass();
}
}


輸出結果:

C:>java test/OuterClass

InterClass Create

OuterClass Create

13.   用JAVA實現一種排序,JAVA類實現序列化的方法(二種)?

14.    如在COLLECTION框架中,實現比較要實現什麼樣的接口?

15. 用插入法進行排序代碼以下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package  test;
import  java.util.*;
class  InsertSort{
ArrayList al;
public  InsertSort( int  num, int  mod)
{
al =  new  ArrayList(num);
Random rand =  new  Random();
System.out.println( "The ArrayList Sort Before:" );
for  ( int  i= 0 ;i<num ;i++ )
{
al.add( new  Integer(Math.abs(rand.nextInt()) % mod +  1 ));
System.out.println( "al[" +i+ "]=" +al.get(i));
}
}
public  void  SortIt()
{
Integer tempInt;
int  MaxSize= 1 ;
for ( int  i= 1 ;i<al.size();i++)
{
tempInt = (Integer)al.remove(i);
if (tempInt.intValue()>=((Integer)al.get(MaxSize- 1 )).intValue())
{
al.add(MaxSize,tempInt);
MaxSize++;
System.out.println(al.toString());
else  {
for  ( int  j= 0 ;j<MaxSize ;j++ )
{
if
    
(((Integer)al.get(j)).intValue()>=tempInt.intValue())
{
al.add(j,tempInt);
MaxSize++;
System.out.println(al.toString());
break ;
}
}
}
}
System.out.println( "The ArrayList Sort After:" );
for ( int  i= 0 ;i<al.size();i++)
{
System.out.println( "al[" +i+ "]=" +al.get(i));
}
}
public  static  void  main(String[] args)
{
InsertSort is =  new  InsertSort( 10 , 100 );
is.SortIt();
}
}


JAVA類實現序例化的方法是實現java.io.Serializable接口

Collection框架中實現比較要實現Comparable 接口和 Comparator 接口

16.  編程:編寫一個截取字符串的函數,輸入爲一個字符串和字節數,輸出爲按字節截取的字符串。 可是要保證漢字不被截半個,如"我ABC"4,應該截爲"我AB",輸入"我ABC漢DEF",6,應該輸出爲"我ABC"而不是"我ABC+漢的半個"。

答:代碼以下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public  static  void  split(String source, int  num)  throws  Exception
     {
        int  k= 0 ;
        String temp= "" ;
        for  ( int  i =  0 ; i<source.length(); i++)
        {
            byte []b=(source.charAt(i)+ "" ).getBytes();
            k=k+b.length;
            if (k>num)
            {
               break ;
            }
            temp=temp+source.charAt(i);     
        }
        System.out.println(temp);
     }


15、Java編程,打印昨天的當前時刻

1
2
3
4
5
6
7
public  class  YesterdayCurrent{
public  void  main(String[] args){
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, - 1 );
System.out.println(cal.getTime());
}
}


16、文件讀寫,實現一個計數器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public  int  getNum(){
int  i = - 1 ;
try {
String stri= "" ;
BufferedReader in =  new  BufferedReader( new  FileReader(f));
while ((stri=in.readLine())!= null ){
i = Integer.parseInt(stri.trim());
}
in.close();
} catch (Exception e){
e.printStackTrace();
}
return  i;
}
public  void  setNum(){
int  i = getNum();
i++;
try {
PrintWriter out= new  PrintWriter( new  BufferedWriter(newFileWriter(f, false )));
out.write(String.valueOf(i));  //多是編碼的緣由,若是直接寫入int的話,將出現java編碼和windows編碼的混亂,所以此處寫入的是String
out.close() ;
} catch (Exception e){
e.printStackTrace();
}
}


17、指出下面程序的運行結果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class  A{
static {
System.out.print( "1" );
}
public  A(){
System.out.print( "2" );
}
}
class  extends  A{
static {
System.out.print( "a" );
}
public  B(){
System.out.print( "b" );
}
}
public  class  Hello{
public  static  void  main(String[] ars){
A ab =  new  B();  //執行到此處,結果: 1a2b
ab =  new  B();  //執行到此處,結果: 1a2b2b
}
}


  注:類的static 代碼段,能夠看做是類首次加載(被虛擬機加載)執行的代碼,而對於類的加載,首先要執行其基類的構造,再執行其自己的構造

18、抽象類和接口的區別?

(1)接口能夠被多重implements,抽象類只能被單一extends

(2)接口只有定義,抽象類能夠有定義和實現

(3)接口的字段定義默認爲:public static final, 抽象類字段默認是"friendly"(本包可見)

當功能須要累積時用抽象類,不須要累積時用接口。

19、什麼是類的返射機制?

經過類(Class對象),能夠得出當前類的fields、method、construtor、interface、superClass、modified等,同是能夠經過類實例化一個實例、設置屬性、喚醒方法。Spring中一切都是返射、struts、hibernate都是經過類的返射進行開發的。

20、類的返射機制中的包及核心類?

  java.lang.Class

  java.lang.refrection.Method

  java.lang.refrection.Field

  java.lang.refrection.Constructor

  java.lang.refrection.Modifier

  java.lang.refrection.Interface

21、獲得Class的三個過程是什麼?

對象.getClass()

      類.class或Integer.type(int)  Integer.class(java.lang.Integer)

      Class.forName();

22、如何喚起類中的一個方法?

產生一個Class數組,說明方法的參數

經過Class對象及方法參數獲得Method

經過method.invoke(實例,參數值數組)喚醒方法

23、如何將數值型字符轉換爲數字(Integer,Double)?

Integer.parseInt(「1234」)

Double.parseDouble(「123.2」)

24、如何將數字轉換爲字符?

1+」」

1.0+」」

25、如何去小數點前兩位,並四捨五入。

double d=1256.22d;

d=d/100;

System.out.println(Math.round(d)*100);

26、如何取得年月日,小時分秒?

Calendar c=Calendar.getInstance();

      c.set(Calendar.YEAR,2004);

      c.set(Calendar.MONTH,0);

      c.set(Calendar.DAY_OF_MONTH,31);

      System.out.println(c.get(Calendar.YEAR)+"  "+(c.get(Calendar.MONTH)+1)+"  "+c.get(Calendar.DAY_OF_MONTH));

27、如何取得從1970年到如今的毫秒數

Java.util.Date dat=new Date();

long now=dat.getTime();

28、如何獲取某個日期是當月的最後一天?

當前日期加一天,若當前日期與結果的月份不相同,就是最後一天。

取下一個月的第一天,下一個月的第一天-1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public  static  void  main(String[] args)
     {
        Calendarc=Calendar.getInstance();
        c.set(Calendar.YEAR, 2004 );
        c.set(Calendar.MONTH, 0 );
        c.set(Calendar.DAY_OF_MONTH, 30 );
        Calendarc1=(Calendar)c.clone();
        System.out.println(c.get(Calendar.YEAR)+ "  " +(c.get(Calendar.MONTH)+ 1 )+ "  " +c.get(Calendar.DAY_OF_MONTH));
         
        c.add(Calendar.DAY_OF_MONTH, 1 );
        if (c.get(Calendar.MONTH)!=c1.get(Calendar.MONTH))
        {
            System.out.println( "是最後一天" );
        }
        else
        {
            System.out.println( "不是取後一天" );
             
        }
     }


29、如何格式化日期?

Import java.text. SimpleDateFormat;

SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-ddhh:mm:ss");

Date dat=new Date();

//把日期轉化爲字符串

String str=sdf.format(dat);

System.out.println(str);

//將字符串轉化爲日期

Java.util.Date d1=sdf.parse(「yyyy-mm-dd」);

30、編碼轉換,怎樣實現將GB2312編碼的字符串轉換爲ISO-8859-1編碼的字符串。

String a=new String("中".getBytes("gb2312"),"iso-8859-1");

String a=new String("中".getBytes("iso-8859-1"));

32、String s = new String("xyz");建立了幾個StringObject?

New了一個,」XYZ」原本又是一個

兩個

33、float型floatf=3.4是否正確?

  報錯,應當是float f=3.4f

  若是是float f=3(整數)正確

35、說出一些經常使用的類,包,接口,請各舉5個

經常使用的類:BufferedReader BufferedWriter  FileReader  FileWirter String  Integer

經常使用的包:java.lang  java.awt  java.io java.util  java.sql javax.xmljavax.sevlet javax.ejb.  java.net  javax.faces

經常使用的接口: List  Map  Document NodeList EjbObject EjbHome SessionBean EntityBean

36、java中會存在內存泄漏嗎,請簡單描述。

會。如:int i,i2;  return (i-i2);   //when i爲足夠大的正數,i2爲足夠大的負數。結果會形成溢位,致使錯誤。

37、java中實現多態的機制是什麼?

      靜態的多態:方法名相同,參數個數或類型不相同。(overloading)

      動態的多態:

             子類覆蓋父類的方法,將子類的實例傳與父類的引用調用的是子類的方法

             實現接口的實例傳與接口的引用調用的實現類的方法。      

38、垃圾回收器的基本原理是什麼?垃圾回收器能夠立刻回收內存嗎?有什麼辦法主動通知虛擬機進行垃圾回收?

動態內存

      存放類實例

靜態內存

類自己

垃圾收集主要針對的是動態內存,通常當內存不夠用時會進行垃圾收集。

或經過System.gc()手動收集,但不保證必定執行。

39、靜態變量和實例變量的區別?

static i = 10; //常量

 class A a;  a.i =10;//可變

靜態方法能夠調用靜態變量。

實現方法能夠調用靜態變量、實例變量

41、是否能夠從一個static方法內部發出對非static方法的調用?

不能夠,若是其中包含對象的method();不能保證對象初始化.

42、寫clone()方法時,一般都有一行代碼,是什麼?

Clone 有缺省行爲,super.clone();他負責產生正確大小的空間,並逐位複製。

43、JAVA語言如何進行異常處理,關鍵字:throws,throw,try,catch,finally分別表明什麼意義?在try塊中能夠拋出異常嗎?

Try:執行部分,產生異常

Catch:捕捉異常

Finally:無論有沒有異常都執行

Throws:在方法聲明處聲明要拋出的異常,調用者必須對其進行處理。

Throw:拋出一個異常

在try中能夠拋出異常,通常與聲明的異常相同。

自定義異常要繼承於Exception或Exception的子類

45、冒泡排序法

//相鄰兩個數比較,將最小或最大的放到後面,最後面數的不參與比較

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public  class  BubbleSort {
     private  static  int  al[] =  new  int [ 10 ];
     publicBubbleSort() {
        al[ 0 ]= 2 ;
        al[ 1 ]= 3 ;
        al[ 2 ]= 23 ;
        al[ 3 ]= 45 ;
        al[ 4 ]= 1 ;
        al[ 5 ]= 67 ;
        al[ 6 ]= 23 ;
        al[ 7 ]= 80 ;
        al[ 8 ]= 35 ;
        al[ 9 ]= 72 ;
     }
     public  static  void  main(String[] args) {
        BubbleSort bs =  new  BubbleSort();
        System.out.println( "排序前:" );
        display(al);
         
        for ( int  i= 0 ;i<al.length;i++) {
         
            for  ( int  j =  0 ; j < al.length-i- 1 ; j++) {
                
               if (al[j]>al[j+ 1 ]) {
                   swap(j,j+ 1 );
               }
            }
        }
        System.out.println();
        System.out.println( "排序後:" );
        display(al);
     }
     private  static  void  display( int [] al2) {
        for  ( int  i =  0 ; i < al2.length; i++) {
            System.out.print(al2[i]+ "  " );
        }
     }
     private  static  void  swap( int  i, int  j) {
        int  temp = al[i];
        al[i]= al[j];
        al[j] = temp;
     }
}


46、String and StringBuffer的區別?

String:長度給定不可變,當多個字符串聯合時要先轉爲StringBuffer,再聯合,速度慢。

StringBuffer:長度可變,能夠將多個字符串值直接聯合,效率高

47、用java代碼編寫堆棧

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public  class  Stack {
    
     int [] data;
     int  maxSize;
     int  top;
     public  Stack( int  maxSize) {
        this .maxSize = maxSize;
        data =  new  int [maxSize];
        top = - 1 ;
     }
      
     /**
      * 依次加入數據
      * @param data 要加入的數據
      * @return 添加是否成功
      */
     public  boolean  push( int  data) {
        if (top+ 1 == maxSize) {
            System.out.println( "棧已滿!" );
            return  false ;
        }
        this .data[++top] = data;
        return  true ;
     }
      
     /**
      * 從棧中取出數據
      * @return 取出的數據
      */
     public  int  pop()  throws  Exception{
        if (top==- 1 ) {
            throw  new  Exception( "棧已空!" );
        }
        return  this .data[top--];
     }
      
     public  static  void  main(String[] args) throwsException {
        Stack stack= new  Stack( 1000 );
        stack.push( 1 );
        stack.push( 2 );
        stack.push( 3 );
        stack.push( 4 );
        stack.push( 5 );
        while (stack.top>= 0 )
        {
            System.out.println(stack.pop());
        }   
     }
}


48、集合的做用是什麼?

數據的傳送 增、刪、改、查、constainsAll,能夠存放不一樣類型的對象。

49、集合的通用方法有那些?通用方法是什麼?(操做)

集合List 的遍歷方法有:

Iterator:

Enumeration

For

Get

set

Collection的通用方法有:

   Iterator()

   Add()

   Clear();

   remove()

 

50、說出ArrayList,Vector, LinkedList的存儲性能和特性HashMap和Hashtable的區別

ArrayList Vector:以數組的方式存儲,增、刪慢,查、改快

   ArrayList:線程不安全,速度快

   Vector:線程安全,速度慢(synchoronized)

LikedList:以單鏈表的方式存儲,增、刪快,查、改慢

HashMap與Hashtable都實現的Map接口,HashTable線程安全,HashMap線程不安全。

51、Collection 和Collections的區別。

Collection是集合的根接口,其下有set及list

Collections是集合的算法。

52、Set裏的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用==仍是equals()? 它們有何區別?用contains來區分是否有重複的對象。仍是都不用。

在比較時先調用hashCode方法,若是不相同,證實不相等。

若是相同,再調用equals方法,若是equals方法相同,證實相等,不相同,證實不相等。

==:主要用在基本數據類型及引用

Equals:主要是對象或對象引用的比較。

集合中是否包含某一個元素用contains來判斷。

53、List, Set, Map是否繼承自Collection接口?

List,set繼承於Collection

Map沒有繼承於Collection,其相對是獨立的。

屬於Collection類型的對象,能夠經過構造函數將一個集合構形成另一個集合。

54、面向對象的特徵有哪些方面

1.抽象:

   找共性,將共有的屬性、方法放到父類中

2.繼承:

   子類繼承於父類,具備父類的全部屬性與方法,能夠重用,也能夠覆蓋。

3.封裝:

   一個類包括多個屬性及方法。

4. 多態性:

   動態:

   靜態:

55、String是最基本的數據類型嗎?

基本數據類型包括byte、int、char、long、float、double、boolean和short。

java.lang.String類是final類型的,所以不能夠繼承這個類、不能修改這個類。爲了提升效率節省空間,咱們應該用StringBuffer類

56、int 和 Integer 有什麼區別?

      Int是基本數據類型,不是對象,佔一個內存空間,沒有方法。與其同類的有long,char,doble

      Integer是封裝類,具備方法及屬性。與其同類的有Long,Double.Float

57、運行時異常與通常異常有何異同?

   運行時異常:java JVM拋出的異常,代碼中不用處理。

   通常異常:用戶拋出的異常,若是用throws 聲明瞭,調用這個方法的代碼必須對其處理。

58、&和&&的區別?

      &:與: 左邊若爲false右邊還執行。

      &&:短路與,左邊若爲false右邊不執行。

59、final, finally, finalize的區別?

final 用於聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。

finally是異常處理語句結構的一部分,表示老是執行。

finalize是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,能夠覆蓋此方法提供垃圾收集時的其餘資源回收,例如關閉文件等。

算符能夠用來決定某對象的類是否實現了接口。

62、heap和stack有什麼區別?

棧是一種線形集合,其添加和刪除元素的操做應在同一段完成。棧按照後進先出的方式進行處理。

堆是棧的一個組成元素

63、Static Nested Class 和Inner Class的不一樣?

Static Nested Class是被聲明爲靜態(static)的內部類,它能夠不依賴於外部類實例被實例化。而一般的內部類須要在外部類實例化後才能實例化。

64、何時用assert?

assertion (斷言)在軟件開發中是一種經常使用的調試方式,不少開發語言中都支持這種機制。在實現中,assertion就是在程序中的一條語句,它對一個boolean表達式進行檢查,一個正確程序必須保證這個boolean表達式的值爲true;若是該值爲false,說明程序已經處於不正確的狀態下,系統將給出警告或退出。通常來講,assertion用於保證程序最基本、關鍵的正確性。assertion檢查一般在開發和測試時開啓。爲了提升性能,在軟件發佈後,assertion檢查一般是關閉的。

65、GC是什麼? 爲何要有GC?

GC是垃圾收集的意思(Gabage Collection),內存處理是編程人員容易出現問題的地方,忘記或者錯誤的內存回收會致使程序或系統的不穩定甚至崩潰,Java提供的GC功能能夠自動監測對象是否超過做用域從而達到自動回收內存的目的,Java語言沒有提供釋放已分配內存的顯示操做方法。

66、short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?

short s1 = 1; s1 = s1 + 1; (s1+1運算結果是int型,須要強制轉換類型) short s1 = 1; s1 +=1;(能夠正確編譯)

67、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

Math.round(11.5)==12 Math.round(-11.5)==-11round方法返回與參數最接近的長整數,參數加1/2後求其floor.

68、Java有沒有goto?

java中的保留字,如今沒有在java中使用。

69、給我一個你最多見到的runtime exception

ArithmeticException, ArrayStoreException, BufferOverflowException,BufferUnderflowException, CannotRedoException, CannotUndoException,ClassCastException, CMMException, ConcurrentModificationException,DOMException, EmptyStackException, IllegalArgumentException,IllegalMonitorStateException, IllegalPathStateException, IllegalStateException,ImagingOpException, IndexOutOfBoundsException, MissingResourceException,NegativeArraySizeException, NoSuchElementException, NullPointerException,ProfileDataException, ProviderException, RasterFormatException,SecurityException, SystemException, UndeclaredThrowableException,UnmodifiableSetException, UnsupportedOperationException

通常異常:

   IOException

   FileNotFoundException

   SqlException

 

70、接口是否可繼承接口? 抽象類是否可實現(implements)接口? 抽象類是否可繼承實體類(concrete class)?

接口能夠繼承接口。抽象類能夠實現(implements)接口,抽象類是否可繼承實體類,但前提是實體類必須有明確的構造函數。任何抽象類都是實際類Object的子類。

71、abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized?

   都不能

72、數組有沒有length()這個方法?String有沒有length()這個方法?

      數組沒有length()這個方法,有length這個屬性

String有length()這個方法.

73、構造器Constructor是否可被override?

構造器Constructor不能被繼承,所以不能重寫Overriding,但能夠被重載Overloading。

74、是否能夠繼承String類?

String類是final類故不能夠繼承。

75、swtich是否能做用在byte上,是否能做用在long上,是否能做用在String上?

switch(expr1)中,expr1是一個整數表達式。所以傳遞給 switch 和 case 語句的參數應該是 int、 short、 char 或者 byte。long,string都不能做用於swtich。

76、try {}裏有一個return語句,那麼緊跟在這個try後的finally {}裏的code會不會被執行,何時被執行,在return前仍是後?

會執行,在return前執行。

77、編程題: 用最有效率的方法算出2乘以8等於幾?

2 << 3

78、兩個對象值相同(x.equals(y) == true),但卻可有不一樣的hash code,這句話對不對?

不對,有相同的hash code。

79、當一個對象被看成參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這裏究竟是值傳遞仍是引用傳遞?

是引用傳遞

基本數據類型:值

對象: 引用

80、四種會話跟蹤技術

Cookie

Session

Hidden

url 重寫

81、編程題: 寫一個Singleton出來。

Singleton模式主要做用是保證在Java應用程序中,一個類Class只有一個實例存在。

通常Singleton模式一般有幾種種形式:

第一種形式: 定義一個類,它的構造函數爲private的,它有一個static的private的該類變量,在類初始化時實例話,經過一個public的getInstance方法獲取對它的引用,繼而調用其中的方法。

public class Singleton {

private Singleton(){}

      //在本身內部定義本身一個實例,是否是很奇怪?

      //注意這是private 只供內部調用

      private static Singletoninstance = new Singleton();

      //這裏提供了一個供外部訪問本class的靜態方法,能夠直接訪問  

      public static SingletongetInstance() {

        return instance;   

      }

   }

   第二種形式:

public class Singleton {

  private static Singleton instance = null;

  public static synchronized Singleton getInstance() {

  //這個方法比上面有所改進,不用每次都進行生成對象,只是第一次     

  //使用時生成實例,提升了效率!

  if (instance==null)

    instance=new Singleton();

return instance;   }

}

其餘形式:

定義一個類,它的構造函數爲private的,全部方法爲static的。

通常認爲第一種形式要更加安全些

83、Java中的異常處理機制的簡單原理和應用。

原理

   有錯直接轉到異常處理部分或向上拋出。

應用:

JAVA的異常就是錯誤,有兩種一種是運行時,編碼能夠不用捕捉。一種是通常異常,若是throws聲明瞭,必須進行處理。

84、垃圾回收的優勢和原理。並考慮2種回收機制。

優勢:

   程序員不用管內存,jvm自動完成,開發方便。運行優先很是低,程序沒法清楚實例何時被消毀。

85、描述一下JVM加載class文件的原理機制?

JVM中類的裝載是由ClassLoader和它的子類來實現的,Java ClassLoader 是一個重要的Java運行時系統組件。它負責在運行時查找和裝入類文件的類。

86、char型變量中能不能存貯一箇中文漢字?爲何?

可以定義成爲一箇中文的,由於java中以unicode編碼,一個char佔16個字節,因此放一箇中文是沒問題的

88、寫一個程序,從文件(c:\test.txt)中查出字符串」mobnet」出現的次數?

java基礎類庫(io流,集合類,線程,Socket,AWT,Swing,sql)

1、java中有幾種類型的流?JDK爲每種類型的流提供了一些抽象類以供繼承,請說出他們分別是哪些類?

字節流,字符流。字節流繼承於InputStream OutputStream,字符流繼承於Reader Writer。在java.io包中還有許多其餘的流,低層流與調層流,高層流主要是爲了提升性能和使用方便。

2、啓動一個線程是用run()仍是start()?

啓動一個線程是調用start()方法,啓動線程並調用run方法。

3、線程的基本概念、線程的基本狀態以及狀態之間的關係

線程是進程內的併發,沒有自已內存空間,共享進程的,線程間的通訊成本較低。

Java中的線程有四種狀態分別是:運行、就緒、掛起、結束。

4、多線程有幾種實現方法,都是什麼?同步有幾種實現方法,都是什麼? 用什麼關鍵字修飾同步方法? stop()和suspend()方法爲什麼不推薦使用?

1
2
3
4
5
6
7
8
9
10
11
12
Extends Thread
Implements Runnable
同步
Public  synchronized  aa()
{
}
Public  void  cc(object aa)
{
     synchronized (aa)
{
}
}


synchoronized修飾同步方法。

答:多線程有兩種實現方法,分別是繼承Thread類與實現Runnable接口

同步的實現方面有兩種,分別是synchronized,wait與notify

反對使用stop(),是由於它不安全。它會解除由線程獲取的全部鎖定,並且若是對象處於一種不連貫狀態,那麼其餘線程能在那種狀態下檢查和修改它們。結果很難檢查出真正的問題所在。suspend()方法容易發生死鎖。調用suspend()的時候,目標線程會停下來,但卻仍然持有在這以前得到的鎖定。此時,其餘任何線程都不能訪問鎖定的資源,除非被"掛起"的線程恢復運行。對任何線程來講,若是它們想恢復目標線程,同時又試圖使用任何一個鎖定的資源,就會形成死鎖。因此不該該使用suspend(),而應在本身的Thread類中置入一個標誌,指出線程應該活動仍是掛起。若標誌指出線程應該掛起,便用wait()命其進入等待狀態。若標誌指出線程應當恢復,則用一個notify()從新啓動線程。

5、集合框架有什麼?

Collection                                                     Map

   List             set                                     HashMap

ArrayList  linkedList  HashSet TreeSet

12、設計4個線程,其中兩個線程每次對j增長1,另外兩個線程對j每次減小1。寫出程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
public  class  TestThread
{
     private  int  j;
     public  synchronized  void  inc()
     {
        j++;
        System.out.println(Thread.currentThread().getName()+  "-inc:"  + j);
     }
     public  synchronized  void  dec()
     {
        j--;
        System.out.println(Thread.currentThread().getName()+  "-dec:"  + j);
     }
     public  static  void  main(String[]args)
     {
        TestThread t= new  TestThread();
        for  ( int  i =  0 ; i <  2 ; i++)
        {
            Thread inc= new  Thread(newInc(t));
相關文章
相關標籤/搜索