對象創建和構造器

創建對象方法調用順序

  • 1.靜態代碼塊
  • 2.構造代碼塊
  • 3.構造器
  • 4.先父類,再子類

對象創建

  • new關鍵字
    • 需要有相應構造器
      • 根據class類在堆中爲對象分配空間
      • 調用相應的構造器來初始化對象
      • 將在堆中分配的空間地址的傳遞給在棧中的引用
  • 反射
    • 利用Class類的newInstance方法,創建對象。
    • 底層調用無參構造器,所以需要確保有無參構造器
  • 反序列化
    • 將已經序列化的對象,反序列化到內存中創建對象
    • 需要實現Serializable接口
  • 克隆
    • 克隆一個已存在的對象
    • 原對象實現cloneable接口,並且重寫clone方法
    • 注意淺拷貝問題

構造器

  • 概念

    • 類中用來初始化對象的方法,構造器與類名相同,且沒有返回值
    • 特點:

      • 名稱與類名相同
      • 方法沒有返回值和返回值類型
      • 只能和new一起使用
      • 修飾符不能爲abstract static final
      • 可以存在return語句,但是後面不能跟返回值
      • 調用其他構造器用this()關鍵字
      • 構造器見不要互相調用
    • 作用

      • 初始化對象屬性,不是創建對象
    • 空構造器

      • 沒有參數的構造器
      • 如果沒有,編譯時自動加入空構造

引用與內存分析

  • 引用特點
    • 引用存在棧中,對象存在堆中
    • 同一時刻,一個引用只能指向一個對象
    • 一個對象可以有多個引用,任意一個對其修改,其他引用也可見該變化
    • java一切爲值傳遞,不過引用傳遞拷貝的是地址值

this

  • 作用
    • 代表當前對象
  • 注意點
    • this(。。。)指代構造器,只能放構造器的第一行
    • this。屬性,調用成員屬性
    • this不能出現在被static修飾的內容中

單例模式

  • 核心
    • 對外只提供一個實例化對象
  • 步驟
    • 構造器私有
    • 對象內部持有當前對象的引用
    • 對外提供一個獲取當前對象的方法
  • 懶漢式單例
    • 調用獲取對象的方法時創建單例的實例化對象
public class  Student {
                private static Student student;
                private  Student () {
                }
                public static Student getInstance () {
                     if (student == null) {
                        student = new  Student();
                     }
                    return student;
                }
            }
  • 餓漢式單例
    • 類加載時,就創建一個單例的實例化對象
public class  Student {
        private static Student student =  new Student();        
        static {
            student =  new Student();
            }
        private Student () {
            }
        public Student getInstance () {         
            return student;
        }   
}

代碼塊

  • 靜態代碼塊
    • 格式:static{}
    • 位置:類內,方法外
    • 執行時間:加載class文件時
    • 其內不能使用成員變量
    • 只在類加載時執行一次,其餘不加載
  • 構造代碼塊
    • 格式{}
    • 位置:類內,方法外
    • 執行時間:構造器之前
    • 可以使用成員變量,靜態的和非靜態的
    • 在每次創建對象時加載
  • 普通代碼塊

    • 格式:{}
    • 位置:方法內
    • 每次方法被調用時加載
  • 同步代碼塊

    • synchronized(){}

垃圾回收

System.gc:通知jvm進行垃圾回收,但是jvm有自己內部的垃圾回收機制,所以何時回收不知道。
回收時,調用finalize方法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章