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

來源:互聯網
上載者:User

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不是基礎資料型別 (Elementary Data Type),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)

throws SAXException

{

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(

+ );

out.println(

+ );

out.println(

+ );

out.println(

+ );

out.println(

教師資訊表
姓名 +

(String)hashTable.get(new String(name)) +

學院 +

(String)hashTable.get(new String(college))+

電話 +

(String)hashTable.get(new String(telephone)) +

備忘 +

(String)hashTable.get(new String(notes)) +

);

>

31、EJB與JavaBean的區別

JavaBean是可重複用的組件,對JavaBean並沒有嚴格的規範,理論上講,任何一個Java類都可以是一個Bean,但是通常情況下,由於JavaBean是被容器所建(如tomcat等)的。所以JavaBean應具有一個參數的構造器,另外通常JavaBean還要實現serializable介面用於實現Bean的持久性,JavaBean實際上相當於微軟Com模型中的本地進程中com組件,踏實不能被誇進程訪問的,enterorise JavaBean相當於DCOM,即分布式組件,踏實基於java的與阿成方法的調用(RMI)技術的,所以EJB可以被遠端存取(跨進成,跨電腦)但是EJB必須被部署在諸如websoere、weblogic這樣的容器中,EJB客戶從不直接存取真正的EJB組件,而是通過其容器訪問,EJB容器是EJB組建的代理,EJB組件由容器建立和管理。客戶通過容器訪問真正的EJB組件。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.