1. 程式人生 > >java相關知識點(一)

java相關知識點(一)

1.什麼是面向物件程式設計

    以物件為基本單位的程式開發,通過物件間的彼此協同,相互呼叫,完成程式間的構建。

2.面向物件的三大特性

 1. 封裝  私有的成員變數   private   同時提供get/set方法
 2. 繼承  父子關係   子類可以繼承父類的相關的非私有的屬性和方法   
 					子類也可以根據自己的需求來覆蓋父類的相關的方法子
 		  好處:絕不是複用父類的功能,繼承真正的好處是多型,它為多型進行服務
 4. 多型    
 	1).父類引用指向子類物件
 	2).呼叫時只能呼叫父類宣告的方法
 	3).執行時會執行子類覆蓋的方法

3.集合

 1. 體系結構
      Collection
      Map   ==>HashMap
      Set     ==>HashSet   SoredSet(介面) TreeSet
      List    ==>LinkedList  ArrayList
 2.  List集合   有序  可重複
 	  Set集合   無序    不可重複
 3.  LinkedList 和 ArrayList 的區別
 		連結串列			陣列
 		增刪快			查詢快
 4.  ArrayList 的底層陣列
 	    Onject[] obj = new Object[10];  初始化長度為10(JDK1.7)
 	    String的底層為char的陣列
 5.  Set  為不可重複   去重的操作
 	去重的依據取決於用的實現類
 		1.HashSet
	 	    HashCode    int 型別的數字   跟引用的預設格式有關
	 	    					引用的預設格式:類全限定名@hashCode
	 	    Equals  
	 	2.TreeSet     compareTo方法
 6.HashSet 與 HashMap 的關係?
 	HashSet 的底層是由 HashMap 實現
 7.ArrayList 是不是執行緒安全的
 	執行緒安全:如果多個執行緒同時訪問一個物件,如果存在問題則不是執行緒安全的物件
 	執行緒不安全的可以通過方法改成執行緒安全的:
 		Collections.synchronizedList();
 		Collections.synchronizedMap();
 		Collections.synchronizedSet();
 8.Collection 與 Collections 的區別?
 	Collection 集合中定義的是一個Set List 的父介面
 	Collections 是sun公司或oracle公司 定義的一個工具類  為集合的訪問和操作
 9.(百度)CurrentHashMap 的底層實現
 	HashMap 在JDK1.8的實現

4.介面

 1. 介面與抽象類的區別
 	1).抽象類中可以有實現的方法   介面沒有
 	2).介面中的變數都是公開的靜態的方法  方法都是公開的
 		抽象類中可以有私有方法,也可以有私有的屬性
    3).介面中沒有構造方法,抽象類中有構造方法
    4).介面多繼承,抽象類單繼承
 2. 介面的作用
 	1).用來遮蔽底層實現的差異,提高程式碼的維護性
 	2).介面的契約型(Servlet中實現的service的方法是tomcat來呼叫的)完成介面回撥

5.異常

 1. 分類:CheckException 已檢查異常 Exception的子類  必須處理,否則編譯不通過
	RuntimeException 執行時異常 RuntimeException及其子類  可以不處理
 2. 異常處理
	1).try catch
	2).throws
 3. 實戰中的異常處理
	1).DAO Service 丟擲的 throws
	2).Controller try{}catch(Exception e) 跳轉到錯誤頁面  顯示錯誤資訊

6.IO

1. 輸入流、輸出流
   字元流、位元組流
   節點流、過濾流(包裝流)
2. 字元流  操作文字  String
   .txt   xml   網路協議(http協議)傳輸的資料
3. 字符集  GBK UTF-8(中文)  ISO-8859-1(tomcat 西歐)
   亂碼問題:編解碼的字符集不一致(web)
4. IO程式碼片段  位元組流
5. FileUtils 工具類(Struts2中的檔案上傳下載使用)

7.執行緒

1.執行緒的開發方式
	a.繼承Thread
	b.實現Runnable介面(常用)
		why 常用?
			Java為單繼承的,為了防止還有有可能要繼承別的類,所以不用繼承的方式
			Runnable介面的方式,可以做到 把執行緒的資源與程式碼分離
2.執行緒安全
	如果一個物件 可以被多執行緒訪問,並且沒有多執行緒訪問的問題,就可以認為執行緒是安全的。
	什麼樣的物件的執行緒是安全的?
		a.重量級的資源 (工廠)
		b.如果一個物件沒有成員變數,那麼這個物件一定是執行緒安全的
		c.如果一個物件有成員變數,且成員變數是執行緒安全的,那麼它也是執行緒安全的
		d.如果加入synchronized 那麼它也是執行緒安全的
	執行緒不安全的: ArrayList  HashSet  HashMap
		用Collections.synchronizedXXX()可以解決
3. 如果出現多執行緒訪問的問題,最基本的解決方式
	synchronized、Lock
	a.方法上  用的鎖物件是當前this的
	b.程式碼塊的  用的鎖物件 可以指定 Object lock = new Object();
4. 執行緒通訊 wait ()     notify()  解決典型的生產者消費者的問題

8.反射

1. 類載入器
	a. Bootstrap 類載入器  載入的是C或C++相關的程式碼
	b. ext 載入器  載入jdk的 jre\lib\ext
	c. app 類載入器    載入應用相關類+jar包
2. 反射的基本編碼
	Class.forName()     object.getClass()    Connection.class
	//獲取類物件
	Class clazz = Class.forName(“全限定名”);
	//獲取類的物件
	Object object = clazz.newInstance();
	//獲取類的屬性
	Field[] de = clazz.getDeclaredFidlds();
	//獲取類的方法
	Method[] methods = clazz.getDeclaredMethods();
3.如何打破封裝  直接操作  私有的屬性和方法
	Field name = clazz.getDeclaredField("屬性名”);
	//可以操作私有屬性
	name.setAccessible();     //打破封裝
4 打破單例的限制
	可以通過反射  在一個類的外部 建立建構函式私有的物件 
5. 反射的效率低
6. 反射建立一個物件 ,需不需要代用這個物件的狗凹函式?
	反射建立物件,一定呼叫建構函式  預設情況下  呼叫無參的構造方法