Java學習筆記(四)

**

幾種單例模式

1.餓漢模式線程安全,缺點內存浪費

public class testsingle {
	
	private static final testsingle single=new testsingle();
	private testsingle(){}
	public static testsingle get(){
		
		return single;
	}
	public static void main(String args[]){
	
	}
}

2.懶漢模式線程不安全,缺點如果獲取實例時,初始化工作較多,加載速度會變慢,影響系統系能,每次獲取實例都要進行非空檢查,系統開銷大

public class testsingle {
	private static final testsingle single=null;
	private testsingle(){}
	public static testsingle get(){
		if(single==null)
			single=new testsingle();
		return single;
	}

}

3.加鎖 優點:線程安全,缺點:每次獲取實例都要加鎖,耗費資源,其實只要實例已經生成,以後獲取就不需要再鎖了

public class  testsingle {
	private static final testsingle single=null;
	private testsingle(){}
	public static synchronized testsingle get(){
		if(single==null)
			single=new testsingle();
		return single;
	}

}

4.雙重檢查所優點:線程安全,進行雙重檢查,保證只在實例未初始化前進行同步,效率高 缺點:還是實例非空判斷,耗費一定資源

public class  testsingle {
	private static final testsingle single=null;
	private testsingle(){}
	public static  testsingle get(){
		if(single==null){
			synchronized(testsingle.class){
				
				if(single==null)
					single=new testsingle();
			}
		
		}
		return single;
	}

}

5.靜態內部類優點:既避免了同步帶來的性能損耗,又能夠延遲加載

public class  testsingle {
	private testsingle(){}
	private static class horld{
		private static final testsingle single=new testsingle();		
	}
		
	public static  testsingle get(){

		return horld.single;
	}

}

6.枚舉天然線程安全,可防止反射生成實例。

public enum single{
	instance;
	public void init (){
		
		System.out.println("資源初始化");
	}
}

**
**

public、private、protected、default的作用

訪問修飾符用來控制訪問權限
.不在類內部的類的只有兩種public,default(不同包不可以訪問)
public–都可訪問(公有)
private–類內可訪問(私有)
protected–包內和子類可訪問(保護)
不寫(default)–包內可訪問 (默認)

**。
**

深拷貝和淺拷貝區別

淺拷貝只是拷貝了地址當原對象改變時拷貝的對象也會一起改變
深拷貝在內存空間內重新分配一塊區域來拷貝對象,兩者地址不同內容相同原對象改變不會影響新對象

**
**

error和exception的區別,CheckedException,RuntimeException的區別

error類型的錯誤一般有JVM虛擬機拋出,如Java虛擬機運行錯誤(Virtual MachineError),當JVM不再有繼續執行操作所需的內存資源時,將出現 OutOfMemoryError。這些異常發生時,Java虛擬機(JVM)一般會選擇線程終止;還有發生在虛擬機試圖執行應用時,如類定義錯誤(NoClassDefFoundError)、鏈接錯誤(LinkageError)。
運行異常一般是程序邏輯錯誤造成,如ArrayIndexOutOfBoundsException(數組下標越界),NullPointerException(空指針異常)、ArithmeticException(算術異常)、MissingResourceException(丟失資源)、ClassNotFoundException(找不到類)等異常
檢查異常一般與運行上下文有關需要try-catch一般有IOException(文件異常)、SqlException(sql異常)

**
**

類加載器加載順序

啓動類加載器(Bootstrap ClassLoader)有C++實現屬於JVM一部分,其餘均有Java實現繼承java.lang.ClassLoader獨立於JVM之外

自底向上檢查類是否加載
Custom ClassLoader–>App ClassLoader–>Extension ClassLoader–>Bootstrap ClassLoader
自頂向下加載類
通過java.lang.ClassLoader的子類自定義加載class<–Load CLASSPATH或Djava.class.path所指定的jar包和類<–Load JRE\lib\ext*.jar或Djava.class.dirs指定目錄下的jar包<–Load JRE\lib\rt.jar或者-Xbootclasspath所指定的jar包
假設自定義了一個java.lang.String類根據規則最終都會調用Bootstrap ClassLoader去加載jdk自帶的String類

**
**

什麼是序列化,怎麼序列化,爲什麼序列化

序列化:把對象轉換爲字節序列的過程稱爲對象的序列化。
反序列化:把字節序列恢復爲對象的過程稱爲對象的反序列化
序列化原因:
當你想把的內存中的對象狀態保存到一個文件中或者數據庫中時候;
當你想用套接字在網絡上傳送對象的時候;
當你想通過RMI傳輸對象的時候;
**

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章