Java基礎-學習筆記05

JuneFall發表於2024-07-21

05 可變引數、作用域、構造器、建立物件的流程分析

可變引數

基本語法

訪問修飾符 返回型別 方法名(資料型別... 形參名){
}

例如,int... nums
int... 表示可接收的是可變引數,型別是 int;
使用可變引數時,可以當作陣列來使用,即 nums 可以當作陣列;

使用細節

  • 可變引數的實參可以為0個或任意多個
  • 可變引數的實參可以為陣列
  • 可變引數的本質就是陣列
  • 可變引數可以和普通型別的引數一起放在形參列表,但必須保證可變引數在最後
  • 一個形參列表中只能出現一個可變引數

作用域的使用

  • 類屬性可以被本類使用;或者透過物件呼叫被別的類使用(建立新的物件,或者直接將物件作為函式的輸入);可加修飾符
  • 區域性變數只能被類中對應的方法使用;不可加修飾符
  • 類屬性和區域性變數(成員方法中的定義的變數)可以重名,訪問時遵循就近原則
  • 在同一個作用域中,比如在同一個成員方法中,兩個區域性變數,不能重名
  • 屬性的生命週期長,伴隨著物件的建立而建立,伴隨著物件的銷燬而銷燬;
  • 區域性變數的生命週期較短,伴隨著它的程式碼塊的執行而建立,伴隨著程式碼塊的結束而銷燬,即在一次方法呼叫過程中。

構造器

基本語法

[修飾符] 方法名(形參列表){
方法體;
}

修飾符可以預設;
構造器沒有返回值;
方法名和類名必須一樣;
構造器由系統自動呼叫;

使用細節

  • 一個類可以定義多個不同的構造器,即構造器過載
  • 如果沒有定義構造器,系統會自動給類生成一個無參構造器,比如 Dog(){}就是預設構造器 (可以透過javap反編譯看到)
  • 一旦自己定義了構造器,預設構造器就被覆蓋了,無法再使用預設構造器

物件建立流程的分析

案例

 class Person{
     int age = 90;
     String name;
     Person(String n, int a){
         name = n;
         age = a;
     }
 } 
 Person p = new Person("小倩",20);

流程分析

1) new Person 建立物件
① 在方法區載入Person類的資訊;(只會載入一次)
② 在堆裡開闢空間(地址),裡面存放著age和name兩個屬性資訊,此時兩個屬性都為其對應型別的預設值,0和null;(預設初始化
③ 讀取到類的屬性有賦值,於是age對應值為90;(顯示初始化);
④ 讀取到 (“小倩”,20)開始呼叫構造器,在常量池裡開闢字串空間,把屬性分別換成“小倩”,20;(構造器初始化

2) Person p = 返回物件 把堆裡的Person物件的地址,返回到棧裡p這個物件的引用/物件名。

this關鍵字使用細節

  • this關鍵字可以用來訪問本類的屬性、方法、構造器
  • this關鍵字可以用來區分屬性和區域性變數
  • 訪問成員方法的語法:this.方法名(引數列表),與直接 方法名(引數列表) 在繼承時會有區別
  • 訪問構造器語法:this(引數列表);只能在構造器中訪問另一個構造器,且訪問語句必須放在構造器裡的第一條語句
  • this不能再類定義的外部使用,只能在類定義的方法中使用

相關文章