首頁  >  文章  >  Java  >  Java基礎知識的總結分析

Java基礎知識的總結分析

黄舟
黄舟原創
2017-09-21 10:44:451400瀏覽

這篇文章對Java程式語言的基礎知識作了一個較為全面的匯總,在這裡跟大家分享一下。需要的朋友可以參考。

Java基礎

1、Java語言的優點:

1)Java是純粹物件導向語言

2)與平台無關性,一次編譯到處執行

3)Java提供了狠多內建類別函式庫

4)提供了對web應用的支援

5)具有較好的安全性(數組邊界檢測、Bytecode檢測)和健全性(強制型機制、垃圾回收器、異常處理)

6)去除c++難以理解的一些特性(頭檔指標運算子重載多重繼承)

2、java與c++的異同:

1)Java為解釋型語言,c++為編譯型語言,java會慢但是跨平台

2)Jave為純面向對象,c++既面向對象又能面向過程。 Jave無全域變數和全域函數

3)Java沒有指針,更安全

4)Java不支援多重繼承但是有介面概念

5)Java不需要手動分配管理記憶體(申請釋放),提供垃圾回收器自動回收。當堆疊或靜態儲存區沒有對這個物件的參考時,就會被回收。沒有析構函數,但是有finalize()方法。

6)Java沒有運算子重載,沒有預處理功能。

3、public static void main(String [] args)是程式的入口。

4、java可有多個main()文件,但只有與文件名稱相同的用public修飾的類別的main()才能作為程式的入口。註:有且僅有一個類別被public修飾並與檔案同名。

5、靜態快在main函數之前執行。初始化執行順序:父靜態變數父靜態程式碼區塊子靜態程式碼變數子靜態程式碼區塊父非靜態變數父非靜態程式碼區塊父類別建構子非靜態變數子非靜態程式碼區塊子類別建構子

6、建構子:

1)與類別同名,無回傳值

2)可以有多個,根據參數不同

3)總是伴隨new運算一起呼叫

4)主要用來初始化物件

5)不能被繼承

6)可用super來顯示呼叫父類別建構子

7、淺複製僅複製考慮的對象,不複製它所引用的物件。 深複製兩者都複製

8、物件導向和物件導向過程有什麼不同:

1)面向物件是用符合常規思維的方式去處理客觀世界的問題,面向過程是則重以事件為中心,模組化。

2)物件導向是使電腦世界向客觀世界靠攏,使問題的處理更清晰。面向過程是清晰準確表達過程的模組,把客觀世界的問題抽象化成電腦可以處理的過程。

9、物件導向的特徵和優點:抽象 繼承 封裝 多型有較高的開發效率,程式碼可重複使用。較高的可維護性,程式碼更清晰明了。

10、java只支援單一繼承,extends繼承是 is a 關係,組合是 has a關係。

在java語言中能用到組合的盡量不要用繼承

11、多型:

重載(同個類別中有多個同名方法)水平關係

重寫(子類別重寫父類,方法名稱和參數清單相同) 垂直關係

#12、抽象類別和介面的異同:

1)只要包含一個抽象方法都是抽象類別,介面的方法全部都是抽象方法,稱為純抽象類別。

2)抽象類別的子類別需要實作父類別的抽象方法。

3)介面中的變數都預設為:static final 必須賦初值。

4)介面實作用implements。一個類別可以實作多個介面實現類似多繼承的關係。

5)介面被運用於常用的功能,如:新增刪除。抽象類別用於生活公共類別的角色,不適用經常對程式碼修改的情況

13、this和super的區別:

This用來指向目前實例物件

Super用來存取父類別的方法和成員變數

當子類別繼承父類別時,子類別建構子中super( )必須放第一句。

14、break continue return 的區別:

#Break 用來直接強行跳出目前循環,不執行剩餘程式碼

#Continue 用來停止當次循環,回到起始處進行下次循環。

Return 跳轉 用來表示從一個方法中回傳。

Break out跳出多重循環

15、static的作用:

a 為物件分配單一的儲存空間,與建立物件個數無關

b 實作某個方法或屬性和類別而不是與物件關聯在一起

C 變數可達到全域的效果,在記憶體中只有一個複製

16、不可變類別的實作:

類別中的所有成員變數被private修飾

沒有寫set方法

#類別定義final

##17 、值傳遞和引用傳遞的區別:

值傳遞:實參會把它的值傳遞給形參


引用傳遞:傳遞的是對象,形參和實參指向同一個儲存單元。


18、有八種基本資料型,型別轉換的優先權:byte不能與booleam互換。

19、round 表示四捨五入ceil表示向上取整floor表示向下取整,i++表示先執行後加


一,++i表示先加一後執行。


20、String s1=”abc」是存放在常數區

String s2=”abc”s2應用常數區的對象,不會建立新的物件。


String s3=new String(「abc」)是在堆中建立對象,


String s4=new String(「abc」)又必須在堆中建立新物件。


21、「==」與「equals」

「==」用來比較兩個變數的值是否相等,如果一個變數指向餓資料是物件(引用型別),就有兩塊記憶體。物件本身佔用一塊記憶體(堆記憶體),變數也佔用一塊記憶體。 String s4 = new String(“abc”)。變數s所對應的記憶體中所儲存的數值就是物件佔用那塊記憶體的首位址。如果想看兩個變數是否指向同一個對象,也就是要看他們對應記憶體中的數值(首地址)是否相同。


equals比較的不是引用,而是數值內容,也就是比較的是abc。


22、陣列也是物件。 陣列提供length屬性來取得陣列的長度,而String是透過length()計算。

23、異常處理

1)try catch finally模式


2)Finally區塊中的程式碼一定會被執行,除非這兩種情況:當程式在try之前就遇到異常或在try中透過exit()強制退出。


3)jvm將錯誤表示為一個例外並拋出,透過catch來捕獲,然後進行處理。安全性和魯​​棒性。


4)異常分為兩大類:錯誤(error)和異常(Excetion)


異常分為:檢查異常和運行異常。


檢查異常又稱為編譯異常。


例如:IO異常、SQL異常


運行異常為:空指標例外、型別轉換例外、算術例外、陣列越界異常、陣列儲存例外、快取區溢出異常。


先捕獲子類別後捕獲父類,儘早拋出異常,能處理就處理,不處理就拋出,運行時異常實際上不必處理,直接拋出。


24、

Java IO:位元組流(8位元)不會用到快取字元流(16位元)用到快取

25、Socket稱為套接字。 用來實現不同虛擬機器或不同電腦之間的通訊。

分為兩種:面向連線的TCP,可靠。無面向連線的UDP,不可靠。


任何一個Socket都是由一個IP位址和連接埠號碼唯一決定。


26、java平台獨立性是指一個平台上編寫和編譯程序,而在其他平台上運行。

有JVM和java API。

Java語言是一種動態解釋型語言,類別class只有被載入到JVM上才能運作。不會一次載入全部類別後執行,而是先載入基類,其他類別是需要時再載入。


27

、垃圾回收GC:回收不會再使用的記憶體。三個任務:分配記憶體;確保被引用的記憶體不會錯誤地回收;回收不再被引用的物件的記憶體。

28、java中記憶體洩漏問題:

#兩種情況:


1)在堆中申請的空間沒有被釋放


2)物件不再被使用,但是仍在記憶體中保留著


原因:靜態集合類別、各種連接、監聽器、變數不合理的作用域


29、java中堆疊和堆疊的區別:
##分配在堆疊:基本資料類型的變數、物件的參考變數


變數出了作用域就會被自動釋放


分配在堆疊:引用類型變數、需要透過new建立的變數。主要為運行時創建的物件


JVM是基於堆疊的虛擬機,每個java程式都運行在一個單獨的JVM實例上,所以一個java程式中的對個線程運行在,每個實例又唯一對應一個堆,所以這些執行緒之間會共享堆記憶體。

只需要申請堆空間,不需要考慮釋放問題。


使用堆疊中的參考變數來存取堆疊中的陣列和物件。


堆疊只要是用來存放物件的,堆疊主要是用來放執行程式的。


堆疊的速度快,但大小和生存期確定,缺乏彈性。堆是動態分配內存,靈活性強但速度慢。


30、容器:java Collections框架:list 、Queue 、set 、stack 、map

list 、Queue 、set 、stack都繼承Collection介面。

#

1)List是有序的Collection。依對象的進入順序儲存對象,可儲存重複對象。

2)Set是集合的概念,集合中不能有重複的元素。

3)map是鍵映射到值得資料結構。值可以重複,但是鍵是唯一的,不能重複。

31、迭代器:是一個對象,一種存取一個容器物件的各個元素,而又不必暴露該物件內部的細節方法。

1)使用容器的iterator()方法傳回一個Iterator,然後透過Iterator的next()方法傳回一個元素。

2)使用Iterator的hasNext()方法判斷容器中是否還有元素,如果有可以使用next()取得下一個元素。

3)透過remove()來刪除迭代器傳回的元素。

32、collection和collections的差異:

Collection:是一個集合接口,為各個特定集合提供最大化的統一運算。

Collections:是針對集合類別的包裝類別。不能實例化,相當於一個工具類,服務Collection框架。

33、多執行緒:

執行緒:執行程式碼的一個執行單元。

程式:一個正在執行的程式

各執行緒共享程式的記憶體空間(程式碼片段、資料、堆疊空間)有獨立的堆疊空間。

執行緒優點:

1)減少程式的回應時間

2)比起進程,建立個切換開銷小

3)多CPU和多核心本身就具有多執行緒能力

4)簡化程式結構,以便於理解和維護。

34、如何實作java多執行緒:

1)繼承Thread類,重寫run()方法

2)實作Runnable接口,並實作接口的run()方法。

3)實作Callable接口,重寫call()方法。

35、同步

要實現同步操作,必須取得每個執行緒物件的鎖,而獲得它可以保證在同一時刻只有一個執行緒能夠進入臨界區,並且在這個鎖被釋放之前,其他執行緒就能再進入臨界區,如果還有其他執行緒想要取得該物件的鎖,只能進入等待佇列等待。

36、多進程同步的實作方法:

1)synchronized關鍵字

2)Wait ()方法與notify()方法

3)Lock

37、終止執行緒的方法:stop()方法與suspeng()方法。

Java提供兩種執行緒:守護執行緒(服務進程)、使用者程式。

38、如何透過JDBC存取資料庫:

1)載入JDBC驅動器,將JDBC驅動jar套件複製到lib下

2)載入JDBC驅動程式

3)建立資料庫連線

4)建立Statement物件或是PrepareStatement物件。用於對資料庫操作

5)執行SQL語句

6)存取結果集ReaultSet物件

7)依序關閉ReaultSet Statement Connection。

39、Class.forName()方法的作用是把類別載入到JVM中。

在使用JDBC連接資料庫之前,一般會呼叫Class.forName(“com.mysql.jdbc.Driver”)方法來載入驅動程式。
Statement用於執行不帶參數的簡單SQL語句,並傳回它所產生結果的物件。每次執行SQL,資料庫都會編譯該SQL語句。
PrepareStatement可執行帶參數的。效率更高,可讀性,可維護性更高,安全性更好

40、JDBC提供了getString()、getInt()、getIData()等方法從ResultSet中獲取數據。

41、在JDBC連線時連接池數有限,所以一定要確保釋放不再使用的連線。

createStatement和prepareStatement最好放在循環外面,而且使用statement後需要及時關閉。最好是執行一次executeQuery後馬上關閉statement。

42、Hibernate是JDBC的封裝。採用設定檔的形式將資料庫的連線參數寫到XML中,但
是最後對資料庫的存取還是要透過JDBC來完成。

43、Hibernate是個持久層框架,它將表中的信息映射到XML中,再從XML檔案映射到對應的持久化類別中。

Java Web

#1、瀏覽器的作用:

#1)、完成與伺服器端的互動。

2)、完成HTML的解析,實作使用者需要看的內容以直覺的資訊展示出來。

2、HTTP的請求方法有:GET POST HEAD TRACE OPTIONS

GET:是最簡單的請求方法,從伺服器端取得使用者所需的資源,並將其作為回應傳回給客戶端。取得伺服器端的資訊(查詢)。若需上傳資料則加入到URL後面。資料暴露安全不夠,數量受限。

POST:除了能夠從伺服器端取得資源外,同時還可以上傳資料到伺服器。上傳的數據不是在URL中明文顯示,可以上傳大量數據,用戶不可見

#3、Servlet:

採用Java語言編寫的伺服器程序,運行於Web伺服器中的Servlet容器中,主要功能是提供請求、回應的服務模式,可以產生動態的Web內容。

Web伺服器取得到一個對servlet的請求時,會交給Tomcat容器進行處理,容器再透過呼叫Servlet的方法(doGet() doPost())來回應請求。

步驟:

發起servlet請求->Web伺服器交給容器處理->容器建立兩個物件HttpServletResponse HttpServletRequire->建立單獨線程,並將兩個物件以參數形式傳遞進入線程->線程容器呼叫Servlet的service()方法中的doGet()或doPost()完成回應->容器將回應訊息以HTML形式傳回給客戶。

4、Servlet的生命週期:

#載入->建立-> 初始化-> 處理客戶請求— —> 卸載

5、JSP的優點:

JSP:嵌入java程式碼的html檔。主要解決servlet與HTML的分離。實作業務邏輯與視圖進行分離。

6、JSP與servlet的異同:

#相同:

本質都是Servlet文件,只要是JSP能完成的工作,使用Servlet都能完成.JSP最終都是會轉化為servlet來運作。

不同:

Servlet是處於控制層,主要是做流程控制和業務處理。 JSP是處於視圖層,主要用於顯示。

Servlet沒有內建對象,JSP中的內建物件主要是透過HttpServletResponse 物件、HttpServletRequire物件來得到。

7、MVC模型:

模型層(M):實作系統業務邏輯。 JavaBean或EJB

視圖層(V):實作使用者的互動。 JSP

控制層(C): 實作視圖與模型的邏輯控制。 servlet

8、控制層:

#控制器接收使用者的輸入並呼叫模型和視圖去完成。

控制器本身不會輸出任何東西,也不執行任何處理。

只是接收請求並決定使用哪個模型去處理請求,決定使用哪個視圖去顯示模型處理返回資料

9、MVC的優點:

1)低耦合性,實現視圖層與邏輯層分離。

2)高重複使用性和可適用性

3)部署快速

4)容易維護

#10、Servlet中的forward和redirect有什麼差別:

#Forward是伺服器內部的重定向,伺服器直接存取目標位址的url,位址不變。

Redirect:客戶端的重定向,完全跳轉,位址改變。

11、JSP的內建物件:

1)require(請求物件)

2)Response (回應物件)

3)pageContext(頁面上下文物件)

#4)Session(會話物件)

5)Application(應用程式物件)

6)Out(輸出物件)

7)Config(設定物件)

#8)Page(頁面物件)

9)Exception(異常物件)

12、request物件的方法:

1 )setAttribute(String name ,Object)設定name的屬性值

2)getAttribute(String name )取得name的屬性值

##3)getParameter(String name )取得使用者提交的數據,name與表單的name對應一致


4)getSession()用來取得與請求相關的會話


13、JSP中的動作:

1)JSP:include 用來頁面請求時引進一個檔案


2)Jsp:useBean 用來實例化一個javabean


3)Jsp:setProperty 用來設定已經實例化的bean物件的屬性


4)Jsp:getProperty 用來取得已經實例化的bean物件的屬性


5)Jsp:foward 用來將請求跳到另一個頁面


14、JSP中include指令和include動作

#指令:<% @include file =”test.jsp “%>


動作:


##15、會話跟踪技術:


對同一個使用者對伺服器的連續請求和接收回應進行監視。


1)page一個頁面


2)Request一個請求


3)Session 一個使用者體驗


4)Application 整個Web應用程式


16、字串編碼:GBK 、UTF-8


17、什麼是Ajar


非同步js與XML。


結合了java技術、js技術、xml技術。 客戶端技術

功能:在不刷新頁面的情況下透過與伺服器進行少量的資料互動來提高頁面的互動性,減少回應時間,改善使用者體驗

18、cookie和session的差異:

Session:指用來在客戶端與伺服器端之間保持狀態的解決方案以及儲存結構。

Cookie:由網頁伺服器儲存在使用者瀏覽器上的小檔案。

19、web伺服器:接收來自於客戶端的請求,然後把對請求的處理結果回饋個客戶端

兩大web伺服器:IIS Apache。

20、web容器:TomcatJBoss

#負責給servlet提供http請求和回應對象,呼叫doGet()過doPost()方法來處理用戶請求。

21、EJB的類別:

#1)session Bean(會話Bean)實作伺服器端的業務邏輯,協調Bean之間的交互

2)Entity Bean(實體Bean)資料組件代表資料庫中的記錄

3)Message Bean(訊息驅動Bean)處理非同步訊息,一般不是由用戶來呼叫的

22、EJB與Javabean的異同:

1)EJB:主要用於伺服器端的開發,Javabean主要用在客戶端的開發。

2)EJB元件可以部署在EJB容器中,不直接存取元件,而是透過容器訪問,javabean不可部署

3)EJB是分散式對象,可以被遠端調用,javabean不是,只能在內部被存取

23、EJB的角色:

1)Enterprise Bean Provider (企業級元件開發者)

2)Application Assembler(應用程式組合者)

3)EJB Deployer(EJB部署者)

4)EJB Sever Provider(EJB伺服器提供者)

5)EJB Container Provider(EJV容器提供者)

#6)System Administrator(系統管理員)

24、資料庫連接池的工作機制:

原因:

##1)建立資料庫是非常耗時的操作


2)資料庫連線個數是有限的


資料庫連線池負責指派管理釋放資料庫連線。當客戶需要存取資料庫是,就可以直接從池中取得資料庫的連接,而不用去建立連接,同時標誌為忙碌狀態。


25、JAVAEE開發的調優方法:

1)最佳化設計


##2)盡可能使用資料庫連接


3)使用框架


4)最佳化I/O


5)最佳化查詢


#26、struts框架的優點:


1)實作表現與邏輯的分離


2)提供頁面導航功能


3)提供表單驗證


4)提供資料庫連線池


5)提供了異常處理機制


6)支援國際化


27、資料驗證分為:


1)表單驗證


2)業務邏輯驗證


28、國際化:


程式在不修改內部程式碼的情況下,根據不同地區顯示相應的介面


29、什麼事控制反轉:


也稱依賴注入,一種降低物件之間耦合關係的設計思想。


使上層不仔依賴下層的接口,呼叫者(子)決定被呼叫者(父)。透過注入一個實例化的物件來實現解耦和目的。


30、Spring框架


提供了對輕量級loc的良好支持,也提供對AOP技術的非常好的封裝。


31、Hibernate框架,持久層框架


#實作Java物件與關聯式資料庫記錄的映射,簡化開發人員存取資料庫的流程,提高軟體開發的效率


任何使用到JDBC的都可以使用Hibernata


提高效能方法:


1)延遲載入


2)快取技術


3)最佳化查詢語句


32、實作分頁:


1)Hibernate自帶的分頁機制


2)用SQL語句實現,使用limit關鍵字


33、SSH:


struts實作視圖部分


Hibernate實作模型部分


Spring實作業務部分

##採用SSH框架,不僅能實現視圖、控制器與模型的徹底分離,還能實現業務邏輯與資料持久層的分離

##總結

#

以上是Java基礎知識的總結分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn