天天看點

Java基礎知識的三十個經典問答

1、面向對象的特點

抽象:

抽象是或略一個主題中與目前目标的無關的因素,一邊充分考慮有關的内容。抽象并不能解決目标中所有的問題,隻能選擇其中的一部分,忽略其他的部分。抽象包含兩個方面:一是過程抽象;一是資料抽象。

繼承

繼承是一種聯接類的層次模型,允許和鼓勵類的重用,提供了一種明确的共性的方法。對象的一個新類可以從現有的類中派生,這叫做類的繼承。心累繼承了原始類的特性,新類稱為原始類的派生類或者是子類,原始類稱為新類的基類或者父類。子類可以從父類那裡繼承父類的方法和實作變量,并卻允許新類增加和修改新的方法使之滿足需求。

封裝

封裝就是把過程和資料包圍起來。對資料的通路隻是允許通過已經定義好的界面。面向對象就是基于這個概念,即現實世界可以描述為一系列完全自治,封裝的對象,這些對象通過固定受保護的接口通路其他對象。

多态

多态性是指不同類的對象對同一個請求作出相應。多态性包括參數多态和包含多态。多态性語言具有靈活、抽象、行為共享、代碼共享的優勢。很好的解決了應用程式中同名的問題。

2、int 和 Integer 有什麼差別

java提供了兩種類型:引用類型和原始類型(内置類型)。int是java的原始資料類型,Integer是java為int提供的封裝類。

java為每一種資料類型提供了自己的封裝類:

原始資料類型 封裝類

int Integer

boolean Boolean

char Character

byte Byte

short Short

long Long

float Float

double Double

引用類型和原始類型的行為完全不同,并且他們具有不同的語義,引用類型和原始類型具有不同的特征和用法,他們包括:大小和速度問題,這種類型以哪種類型的資料結構存儲,當引用類型和原始類型有用作某個類的執行個體資料時制定的預設值。對象應用執行個體變量的預設值為null,而原始類型執行個體變量的預設值與它們的類型有關。

3、final、finally、finalize的差別

final是一種聲明屬性,作用與類、方法和變量;final修飾的變量的值不能夠再改變,final修飾的方面不能被覆寫,final修飾的類不能被繼承。

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

finalize是object類的一個子方法,在垃圾回收器執行是調用回收對象的此方法,此方法可以被覆寫提供資源回收時的其他資源回收。如檔案關閉等。

4、 heap和stack的差別

棧是一種現行結構,其添加和删除元素應在同一段完成,棧按照先進後出的方式進行處理。

堆是棧的一個組成元素。

5、 基本的資料類型

byte,int,long,double,char,boolean,float,short

String不是基本資料類型,java.util.String是final類,是以不能修改這個類,不能繼承這個類。

為了節省空間,提高效率我們應該用StringBuffer。

6、 assert什麼時候使用?

assertion(斷言)在軟體開發中使用中常見的調試方式,很多程式設計語言中都支援這種機制,在實作中,assertion就是在程式中的一條語句,他對一個boolean表達式進行檢查,一個正确的程式必須保證這個boolean表達式的值是true。如果該值為false,說迷宮程式已經處于不正确的狀态了,系統将給出警告或者退出。一般來說assertion用來保證程式最基本、關鍵的正确性,assertion檢查通常在開發和測試時啟動,為了提高效率,在軟體釋出後,assertion檢查通常是關閉的。

7、 GC是什麼?為什麼要有GC?

GC是垃圾回收的意思(gabage collection),記憶體處理器是程式設計人員容易出現問題的地方,忘記或者錯誤的記憶體回收導緻程式或者系統的不穩定甚至崩潰,java的GC功能可以自動監測對象是否超過作用域進而達到自動回收記憶體的目的,java語言沒有提供釋放已配置設定記憶體的俄顯示操作方法。

8、啟動線程使用run()還是start()?

啟動一個線程用start()方法,使線程所代表的虛拟處理機處于可運作的狀态,這意味着它可以有JVM(java虛拟機)來排程和執行,這并不意味着線程就會立即執行。run()方法可以産生必須退出的标志來停止一個線程。

9、構造器Constructor是否可以被override?

構造器(override)不能被繼承,是以不能重寫overriding,但是可以被重載overloading。

10、 當一個對象作為參數傳遞給一個方法後,此方法可以給便這個對象的屬性,并可以傳回變化後的結果,那麼這裡到底是值的傳遞還是引用傳遞?

是值得傳遞。

java語言中隻有值傳遞參數,對一個對象執行個體作為一個參數被傳遞到方法中時,參數的值就是對該對象的引用,對象的内容可以在被調用的方法中改變,但對象的引用是永遠改變不了的。

11、 垃圾回收機制的優點,并考慮2種回收機制。

java語言中一個顯著的特點就是引入了垃圾回收機制,使C++程式員最頭痛的記憶體管理問題迎刃而解,他使得java程式員在編寫承學的哦時候不用再考慮内潤管理問題了,由于有了垃圾回收機制,java中的對象不再有“作用域”的概念,隻是在對象引用的時候才有“作用域”,垃圾回收可以有效的防止記憶體洩漏,有效的使用可以使用的記憶體。

垃圾回收器通常作為一個單獨的低級别的線程運作,不可預知的情況下對記憶體堆中已經死亡的或者長時間沒有使用的對象進行清楚的哦回收,承諾過許願程式員不能實時的調用來幾回收器對某個對象或所有對象進行垃圾回收,回收機制有分帶複制來幾回收和标記垃圾回收,增量垃圾回收。

12、char型變量中能不能存儲一個中文漢字?為什麼?

能夠存儲一個漢字。

因為java中以unicode編碼,一個char占16個位元組,多億放一個中文是沒有問題的。

13、jsp中的内置對象

request--表示HttpServletRequest對象,它包含了有關浏覽器請求的資訊,并且提供了幾個用于擷取cookie,header和session資料的遊泳的方法。

response--表示HttpServletResponse對象,提供了幾個用于設定送回浏覽器響應的方法(如cookie頭資訊等)。

out--對象是java.jsp.JspWriter的一個執行個體,提供了幾種方法使你能用于想浏覽器傳回輸出結果。

pageContext--表示一個javax.servlet.jsp.PageContext對象。它是用于友善存取各種範圍的名字空間、servlet相關的對象的API,并且包裝了通用的servlet相關的功能的方法。

session--表示一個請求的javax.servlet.http.HttpSession對象,session可以村互相使用者的狀态資訊。

application--表示一個javax.servlet.ServletContext對象,這有助于查找有關servlet引擎和servlet環境的資訊。

config--表示一個javax.servlet.ServletConfig對象,該對象用于存取servlet執行個體的初始化資料。

page--表示從該頁面産生的一個servlet執行個體。

14、jsp和servlet有奶俄相同點和不同點?他們之間的聯系是什麼?

jsp是servlet技術的擴充,本質上是servlet的簡易方式,強調應用的表現和表達,jsp編譯後是“類servlet”,servlet和jsp最主要的不同點在于,servlet的應用邏輯是在java檔案中,并且完全從表示層中的html裡分離出來,而jsp的情況但是java和html可以組合成一個擴充名為.jsp的檔案,jsp側重于視圖,servlet主要用于控制邏輯。

15、匿名内部類(Anonymous Inner Class)是否可繼承其他類,是否可以實作接口?

可以繼承其他類或完成其他接口,在swing程式設計中常用此方式。

16、HashMap和HashTable的差別

HashMap是HashTable的輕量級實作(非線程安全的實作),他們都完成了Map接口,主要差別在于HashMap允許空鍵值(key),郁郁非線程安全,效率上可能高于HashTable。

17、String s=new String("abc");建立了幾個對象?

建立了兩個 一個是“abc” 一個是指向“abc”對象的 S 對象。

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

Math.round(11.5)==12,Math.round(-11.5)==-11,

return方法傳回與參數最接近的長整數,參數加1/2後求其floor。

19、sleep()和wait()的差別?

sleep是線程類(thread)的方法。導緻此線程暫停執行之地昂時間,給執行的機會給其他線程,但是監控狀态依然保持,到時候後自動回複,調用sleep不會釋放對象鎖。

wait是object類的方法,對此對象發出wait方法導緻本線程放棄對象鎖,進入等待此對象的的呢古代鎖定池,隻有針對此對象發出notify方法(或者notifyAll)後本線程才進入對象鎖定池準備獲得對象鎖進入運作狀态。

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

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

String有length()方法。

21、Overload和Override的差別。Overloaded的方法是否可以改變傳回值的類型?

方法的重寫OVerriding和重載Overloading是Java多态的不同表現,

重寫Overriding是父類與子類之間多态性的一種表現,重載Overloading是一個類中多态性的一種表現,

如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫(Voerriding)。子類的對象使用這個方法時,将調用子類中的定義,對它而言,父類中的定義如同被屏蔽了,如果在一個類中定義了多個同名的方法,他們或有不同的參數個數或有不同的參數類型,則稱為方法的重載(Overriding),Overriding的方法是可以改變傳回值的類型。

22、Set裡的元素是不是能夠重複的,那麼用什麼方法來區分重複與否呢?使用==還是用equals()?他們有什麼差別?

Set裡的元素是不能重複的,那麼用iterator()方法來區分重複與否。equals()方法是判斷兩個Set是否相等。

equals()和==方法決定引用值是否指向同一個對象,equals()在類中被覆寫,為的是當兩個分離的對象的内容和類型相配的話,傳回真值。

23、error和exception 的差別

error表示恢複不是不可能但是很困難的情況下的一種嚴重問題。比如說記憶體溢出,不可能指望程式能處理之中情況。

exception表示一種設計或實作問題。也就是說,他表示如果程式運作正常,從不會發生的情況。

24、abstract class和interface有什麼差別?(抽象類與接口的差別)

聲明方法的存在不去實作他的類被叫做抽象類(abstrct class),它用于要建立一個展現某些基本行為的類,并為該類聲明方法,但不能在類終中實作該類的情況,不能建立abstract類的執行個體。然而可以建立一個變量,其類型就是一個抽象類,并讓他指向具體的子類的一個執行個體。不能有抽象構造函數或抽象靜态方法,abstract類的子類為他們的父類中的所有抽象方法提供實作,否則他們也是抽象類為,取而代之,在子類中是實作該方法。知道其行為的其他類可以在類中實作這些方法。

接口(interface)是抽象類的變體,在接口中,所有方法都是抽象的。多繼承性可通過實作這樣的接口而獲得。接口中的所有方法都是抽象的,沒有一個有程式體,接口隻可以定義static final成員變量,接口的實作與子類相似,除了個實作類不能從從接口定義中繼承行為,當類實作特殊的接口時,他定義(即将程式給予)多有這種接口的犯法,然後,它可以在實作了該接口的類的任何對象上調用接口的方法,由于抽象類,它允許使用接口名作為應用變量的類型。通常的動态聯編将生效,引用可以轉換到接口類型或從接口類型轉換,instanceof運算符可以用來決定某對象的類是實作了接口。

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

都不可以

26、jsp頁面中的跳轉方式分别是什麼?有什麼差別?

有兩種,分别是

< JSP:INCLUDE page="jjj.jsp" fresh="true">

< JSP:FORWARD page="nextpage.jsp">

差別:

前者頁面不會轉向include所指的頁面,隻是顯示該頁的結果,首頁面還是原來的頁面,執行完後就會回來,相當于函數調用,并且可以帶有參數,後指完全轉向新的頁面,不會再回來。相當于個goto語句。

27、java servlet API中的forward()和redirect()的差別?

前者僅是容器中控制權的轉向,在用戶端浏覽器位址欄中不會顯示出轉向的位址,後者則是完全的跳轉,浏覽器将會得到跳轉的位址,并重新發送請求連結,這樣,從浏覽器的位址欄中就可以看到跳轉以後的連結位址,多億,牽制更為高效。在前者可以滿足需要的同時,盡量使用forward()方法,并且這樣有助于隐藏實際的連結,在有些情況下,比如需要跳轉到其他浏覽器的資源,則必須用sendRedeirct()方法。

28、xml有哪些解析技術?差別是什麼?

有DOM,SAX,STAX等

DOM:處理大型檔案是其性能下降的非常厲害,這個問題是由DOM的樹結構造成的,這種結構占用的記憶體較多,而且DOM必須在解析檔案之前把整個文檔裝入記憶體,适合對xml的随機通路,sax:不現于,DOM,SAX是事件驅動型的xml解析方式,他順序的讀取xml檔案,不需要自已全部裝載正檔案,當遇到文檔開頭,文檔結束,或者标簽開都與标簽結束時,他會觸發一個事件,用于通過在其回調事件中寫入處理代碼來處理xml檔案,适合對xml的順序通路。

Stax:Streaming API for xml(Stax)。

29、jsp中有哪些内置對象?他們的作用是什麼?

jsp中共9中内置元件,

request:使用者端請求,此請求會包含來自GET/Post請求的參數;

response:網頁傳回使用者端的回應。

pageContext:頁面的屬性是在這裡管理

session:與請求有關的回話期

application :Servlet正在執行的内容

out :用來傳遞回應的輸出

config :servlet的構架部件

page jsp網頁本身

exception :針對錯誤的網頁。未捕捉的例外。

30、程式設計用java解析xml的方式

用sax方式解析xml,xml如下:

< ? xml version=1.0 encoding=gb2312? >

小明

資訊學院

6258113

男,1955,博士,94年調入海南大學

事件回調類SAXHandler.java

import java.io.*;

import java.util.Hashtable;

import org.xml.sax.*;

public class SAXHandler extends HandlerBase

{

private Hashtable table = new Hashtable();

private String currentElement = null;

private String currentValue = null;

public void setTable(Hashtable table)

this.table = table;

}

public Hashtable getTable()

return table;

public void startElement(String tag, AttributeList attrs)

throws SAXException

currentElement = tag;

public void characters(char[] ch, int start, int length)

currentValue = new String(ch, start, length);

public void endElement(String name) throws SAXException

if (currentElement.equals(name))

table.put(currentElement, currentValue);

JSP内容顯示源碼,SaxXml.jsp:

< %@page errorPage=ErrPage.jsp contentType=text/html;charset=GB2312 %> >

< %@page import=java.io.*%>

< %@page import=java.util.Hashtable %>

< %@page import=org.w3c.dom.*% >

< %@page import=org.xml.sax.* %>

< %@page import=javax.xml.parsers.SAXParserFactory %>

< %@page import=javax.xml.parsers.SAXParser %>

< %@page import=SAXHandler %>

< %@

File file = new File(c:\people.xml);

FileReader reader = new FileReader(file);

Parser parser;

SAXParserFactory spf = SAXParserFactory.newInstance();

SAXParser sp = spf.newSAXParser();

SAXHandler handler = new SAXHandler();

sp.parse(new InputSource(reader), handler);

Hashtable hashTable = handler.getTable();

out.println( );

out.println(

+ );

Java基礎知識的三十個經典問答

);