更新時間:2019-06-28 09:58:54 來源:動力節點 瀏覽4599次
Java基礎知識
面向對象的特征:
抽象,封裝、繼承、多態
面向對象的特征
1.抽象:抽象就是忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象并不打算了解全部問題,而只是選擇其中的一部分,暫時不用部分細節。抽象包括兩個方面,一是過程抽象,二是數據抽象。
2.繼承:繼承是一種聯結類的層次模型,并且允許和鼓勵類的重用,它提供了一種明確表述共性的方法。對象的一個新類可以從現有的類中派生,這個過程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那里繼承方法和實例變量,并且類可以修改或增加新的方法使之更適合特殊的需要。
3.封裝:封裝是把過程和數據包圍起來,對數據的訪問只能通過已定義的界面。面向對象計算始于這個基本概念,即現實世界可以被描繪成一系列完全自治、封裝的對象,這些對象通過一個受保護的接口訪問其他對象。
4.多態性:多態性是指允許不同類的對象對同一消息作出響應。多態性包括參數化多態性和包含多態性。多態性語言具有靈活、抽象、行為共享、代碼共享的優勢,很好的解決了應用程序函數同名問題。
intInteger的區別:
Java提供兩種不同的類型:引用類型和原始類型(或內置類型)。Int是java的原始數據類型,Integer是java為int提供的封裝類。Java為每個原始類型提供了封裝類。
原始類型封裝類
booleanBoolean
charCharacter
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
引用類型和原始類型的行為完全不同,并且它們具有不同的語義。引用類型和原始類型具有不同的特征和用法,它們包括:大小和速度問題,這種類型以哪種類型的數據結構存儲,當引用類型和原始類型用作某個類的實例數據時所指定的缺省值。對象引用實例變量的缺省值為null,而原始類型實例變量的缺省值與它們的類型有關。
String類和StringBuffer類的區別
它們都是處理字符串的類,但是它們有一個最大的區別,那就是,String對象是存儲你不能改動的文本字符
串,相反,如果你希望改動,則應使用StringBuffer類作為替換
StringBuffer是可變的而String是不可變的.
而且String用得多個的話會占用不同的內存.
如:Stringstr=“bb”;
str=“aa”;
前一個bb的內存地址不變,當又給它賦值為aa時它又指向aa的地址.
而StringBuffer就不會這樣.
:”==”比較的是兩個對象的地址,”equals()”比較的是兩個對象的值.
集合
Collection層次結構中的根接口
Collection表示一組對象,這些對象也稱為collection的元素
Java集合的缺點:類型未知
總的說來,JavaAPI中所用的集合類,都是實現了Collection接口,他的一個類繼承結構如下:
Collection
Collection
Collection
Collection
Collection
Collection
List是基于Array,可以有重復的值
Vector:基于Array的List很重要的一點就是Vector“sychronized”的,這個也是Vector和ArrayList的唯一的區別
ArrayList:基于Array上的鏈表,但是不同的是ArrayList不是同步的
LinkedList:它不是基于Array的,所以不受Array性能的限制。它每一個節點(Node)都包含兩方面的內容:1.節點本身的數據(data);2.下一個節點的信息(nextNode)。所以當對LinkedList做添加,刪除動作的時候就不用像基于Array的List一樣,必須進行大量的數據移動。只要更改nextNode的相關信息就可以實現了。這就是LinkedList的優勢
HashSet:雖然Set同List都實現了Collection接口,但是他們的實現方式卻大不一樣。List基本上都是以Array為基礎。但是Set則是在HashMap的基礎上來實現的,這個就是Set和List的根本區別。HashSet的存儲方式是把HashMap中的Key作為Set的對應存儲
Set總結:
1.Set實現的基礎是Map(HashMap);
2.Set中的元素是不能重復的,如果使用add(Objectobj)方法添加已經存在的對象,則會覆蓋前面的對象;
性能時Map所要面對的一個大問題。如果你知道get()時怎么工作的,你就會發覺(比方說)在ArrayList里面找對象會是相當慢的。而這正是HashMap的強項。它不是慢慢地一個個地找這個鍵,而是用了一種被稱為hashcode的特殊值來進行查找的。散列(hash)時一種算法,它會從目標對象當中提取一些信息,然后生成一個表示這個對象的“相對獨特”的int。hashCode()是Object根類的方法,因此所有Java對象都能生成hashcode。HashMap則利用對象的hashCode()來進行快速的查找。這樣性能就有了急劇的提高。
設計模式方面
1、開發中都用到了那些設計模式用在什么場合
答:每個模式都描述了一個在我們的環境中不斷出現的問題,然后描述了該問題的解決方案的核心。通過這種方式,你可以無數次地使用那些已有的解決方案,無需再重復相同的工作。主要用到了MVC的設計模式。用來開發JSP/Servlet或者J2EE的相關應用。簡單工廠模式等。
2、UML方面
答:標準建模語言UML。用例圖,靜態圖(包括類圖、對象圖和包圖),行為圖,交互圖
(順序圖,合作圖),實現圖,
1、概述struts,以及struts如何實現MVC架構的
答:strutsframework是一種基于java的技術,Web應用程序開發人員通過strutsframework即可充分利用面向對象設計、代碼重用以及“編寫一次、到處運行”的優點。Struts提供了一種創建Web應用程序的框架,其中對應用程序的顯示、表示和數據的后端代碼進行了抽象。Struts采用jsp作為MVC的視圖,由ActionServlet具體指定的action動作類作為控制器即MVC中的C,負責視圖與模型之間的交互。控制器的每個入口點都由名為struts-config.xml的配置文件設置。該文件把來自視圖的請求映射為特定的JAVA類以進行相應的處理,控制器還指定下一個視圖的位置。Struts中的模型主要指的就是javabean,它是模型的代表,主要封裝數據和業務邏輯。
Struts的處理流程:
控制器進行初始化工作,讀取配置文件,為不同的Struts模塊初始化相應的ModulConfig對象。
控制器接收Http請求,并從ActionConfig中找出對應于該請求的Action子類,如果沒有對應的Action,控制器直接將請求轉發給JSP或者靜態頁面,否則控制器將請求分發至具體的Action類進行處理。
在控制器調用具體的Action的Execute方法之前,ActionForm對象將利用Http請求中的參數來填充自已。還可以在ActionForm類中調用Validate方法來檢查請求參數的合法性,并且可以返回一個包含所有錯誤信息的ActionErrors對象。
執行具體的的Execute的方法,它負責執行相應的業務邏輯。執行完后,返回一個ActionForward對象,控制器通過該ActionForward對象來進行轉發工作。也可以把Action要處理的業務邏輯封裝在JavaBean中,如果系統中還有EJB,那么通過JavaBean調用EJB以完成業務處理;如果沒有EJB,那么就直接在JavaBean中連接數據庫,進行數據庫相關的操作。
2、概述MVC體系結構
答:MVC包括三類對象,model是應用對象,view是視圖,controller是控制器,它定義用戶界面對用戶輸入的響應方式。
在MVC體系中,模型通常被稱為“業務邏輯”,是真正完成任務的代碼,視圖就是使用界面,反映數據的變化。控制器控制著模型和視圖之間的交互過程,它決定著向用戶返回怎樣的視圖、檢查通過界面輸入的信息以及選擇處理輸入信息的模型
在MVC中,表示層和邏輯層分離,各部分可相互獨立進行開發,便于開發和維護,提高了開發效率。
3、多線程的優點
答:可分兩方面來答:
相對于單線程而言:
可以響應多任務的并發操作。
多線程取消了主循環和輪流檢測機制,一個線程可以暫停而不阻止系統其他的部分的執行,而且當程序中一個線程阻塞時,只有那個被阻塞的線程暫停,所有其他的線程繼續執行。
相對于進程而言:(可以答也可以不答)
它所要求的開銷比較小,轉換成本較小。
所有線程共享同一地址空間,相互協作。
彼此之間通信很容易。
4、用java訪問Oracle數據庫、取得記錄并輸出到界面
答:……………………..
Class.forName(“oracle.jdbc.driver.OracleDriver”);
Connectionconn=DriverManager.getConnection(url,username,password);
Statementstmt=conn.createStatement();
Stringstr=”select*from[table]”;
ResultSetrs=stmt.executeQuery(str);
While(rs.next())
{
……………………
}
rs.close();
stmt.close();
conn.close();
5、概述java垃圾回收機制
答:它的工作原理如下:
當不存在對一個對象的引用時,我們就假定不再需要那個對象,那個對象所占有的存儲單元可以被收回,可通過System.gc()方法回收,但一般要把不再引用的對象標志為null為佳。
6、java類是否可以多繼承,怎么實現多繼承
答:java沒有多繼承,但可以通過接口的形式來達到多繼承的目地。
7、面向對象的特點
答:面向對象有三大特點:封裝、繼承、多態。(如果要回答四個,可加上抽象性這一特點)
9、接口有什么優點
答:接口有以下優點:
接口只是一個框架而沒有實現,因此在接口定義時不需要考慮接口中的方法如何實現。
利用接口可達到實現多繼承的目地。
可以在不暴露對象的類的前提下,暴露對象的編程接口。
不用強迫類關系在無關類中截獲相似處(采用適配器就可以了)。
聲明想執行的一個或多個方法。
10、ArrayList與Vector的區別
答:主要從兩個方面來說明:
安全、效率方面
如果要實現同步安全,則要用Vector,否則則用ArrayList,因為ArrayList不考慮同步安全的問題,所以效率要高些。
資源方面
當兩者的容量已滿時,它們都會自動增長其容量,但Vector是按其容量的一倍增長,而ArrayList則按其容量的50%增加,所以Vector更能節省資源。
11、MVC結構在Jtable中怎樣實現的,這種結構有什么好處
答、在Jtable中不存儲它的單元數據,它的所有實例把它們的單元值交給實現了TableModel接口的對象來維護和管理,所以在MVC結構中,Jtable的表格主要體現了一個V的作用,其表格將數據變化體現出來,而數據模型則體現了M的作用,封裝數據和業務邏輯。
注:詳細解說見第二題
12、在控制臺中輸入一個字符串,然后按照逆序打印出來
答:importjava.io.*;
publicclasstest{
publicstaticvoidmain(Stringargs[]){
StringA=””;
StringB=””;
StringC=””;
Try{
BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));
If((B=br.readLine())!=null){
A=A+B;
}
for(intI=str.length()-1;I>=0;I–){
C=C+A.substring(I,I+1);
}
System.out.println(C);
}
catch(Exceptione){
System.out.println(e.getMessage());
}
}
}
13、java是否存在內存泄露
答:存在,當一個對象引用另一對象后,當另一對象為空時,會出現內存泄露。
14、String類的值是否可以改變
答:String類的值在初始后不能改變,如果要改變,可轉換為StringBuffer類,這個類的值是可以動態改變的。(這里主要考String和StringBuffer的區別)
17、java有幾種修飾符默認的是什么
答:(注:修飾符是影響類、變量及成員方法的生存空間和可訪問性的關鍵字)
修飾符類成員方法成員變量局部變量
abstract√√--
static-√√-
public√√√-
protected-√√-
private-√√-
privateprotected-√√-
synchronized-√--
native-√--
volatile--√-
final√√√-
transient--√√
以下是訪問控制修飾符:默認為friendly
修飾符同類同包子孫類不同包
public√√√√
protected√√√-
friendly√√--
private√---
18、toString方法的概述
答:因為每個類都繼承了Object類,所以都實現了toString()方法。
通過toString()方法可以決定所創建對象的字符串表達形式。
19、Object類的概述
答:Object類是所有其他的類的超類,Object的一個變量可以引用任何其他類的對象。因為數組是作為類實現的,所以Object的一個變量也可以引用任何數組,它包括以下幾種方法:
clone()equals()finalize()getClass()hashCode()notify()notifyAll()toString()wait()
20、java特點
答:java具有以下幾個主要特點:
簡單性
面向對象:JAVA是完全面向對象的,它支持靜態和動態風格的代碼繼承及重用
分布式:包括數據分布和操作分布
健壯性:java系統仔細檢測對內存的每次訪問,確認它是否合法,而且在編譯和運行程序時,都要對可能出現的問題進行檢查,以消除錯誤的產生。
結構中立
安全性:java不支持指針,一切對內存的訪問都必須通過對象的實例變量來實現,這樣就防止程序員使用木馬等欺騙手段訪問對象的私有成員,同時也避免了指針操作中容易產生的錯誤。
與平臺無關:java寫的應用程序不用修改就可在不同的軟硬平臺上運行。平臺無關性有兩種:源代碼級和目標代碼級。Java主要靠JAVA虛擬機在目標代碼級上實現平臺無關性
解釋執性:運行JAVA程序時,它首先被編譯成字節代碼,字節代碼非常類似機器碼,執行效率非常高。
高性能
多性程
動態性:它允許程序動態的裝入運行時需要的類。
21、什么叫抽象類抽象類跟接口有什么區別為什么引進數據接口概念
答:具有關鍵字abstract,在實現內容上沒有完全定義的類就叫抽象類。
抽象類和接口的區別如下:
①在類來繼承抽象類時,只需實現部分具體方法和全部抽象方法,而實現接口則要實現里面的全部方法。
②在接口中無成員變量,而抽象類中可有成員變量。
在Java中引進接口主要是為了解決多繼承的問題。
22、doGet與doPut的區別
答:doPut會把地址作為一個文件寫到服務器,而doGet不會,而只顯示在地址欄。
23、多線程實現有那幾種方法,同步有哪幾種方法
答:實現同步主要有兩種方法:1.synchronized2.waitnotify
實現多線程主要繼承Thread類和實現Runnable接口。
24、JSP頁面的跳轉
答:jsp頁面實現跳轉主要有jsp:forward和sendRedirect兩種方法
jsp:forward:在本容器內跳轉。跳轉后,地址欄地址不變。效率高。跳轉后立即結束本頁的內容。
sendRedirect:在容器之間的跳轉,跳轉后地址欄地址為跳轉后的地址,效率較低。
通常采用jsp:forward方式跳轉。
25、類變量的初始化
答:在Java中類變量在局部中一定要初始化,因為局部變量會覆蓋全局變量,否則會報錯:變量未初始化。全局變量則可以不初始化,而到具體的內部方法或其他的類成員中初始化。
26、數組的定義
答:數組是作為一種對象實現的。數組元素可以包含作何類型值,但數組里面的每個元素的類型必須一致創建數組步聚如下:
聲明
構造
初始化
27、Hastable與HashMap的區別
答:Hashtable和Hashmap的主要區別如下:
Hashtable是同步的,而HashMap不是同步的。所以不要求同步的時候,用HashMap的效率較高
Hashtable版本較HashMap版本低。
28、說明List和Set的區別
答:兩者主要區別如下:
List用來處理序列,而Set用來處理集。
List中的內容可以重復,而Set則不行。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習