物件和類
- 1. 物件和類
- 1.1 java中的物件
- 1.2 Java中的類
- 1.3類的實體化
- 1.4 類和物件的說明
- 2.this的參考
- 2.1 this參考的特性
- 3.物件的構造及初始化
- 3.1.構造方法
- 3.2 構造方法《補充》
- 3.3 默認初始化
1. 物件和類
物件:物件是類的一個實體,由自己的狀態和行為,舉個例子,一個人是一個物件,人自己具備一些屬性(性別 外貌 性格)
類:類是一個模板,描述一個物件的行為和狀態
舉例子:

汽車為類,具體發每輛汽車是該汽車類的物件
1.1 java中的物件
對比現實物件和軟體物件,它們之間十分相似,
軟體物件也有狀態和行為,軟體物件的狀態就是屬性,行為通過方法體現,
在軟體開發中,方法操作物件內部狀態的改變,物件的相互呼叫也是通過方法來完成,
1.2 Java中的類
類可以看作是創建Java 物件的模板

Java 的簡單定義:
public class Dog{
String breed;
int size;
String color;
int age;
void eat(){
}
void run(){
}
void sleep(){
}
void name(){
}
}
一個類包含以下型別的變數:
- 區域變數:在方法、構造方法或陳述句塊中定義的變數被稱為區域變數,變數宣告和初始化都是在方法中,方法結束后,比那輛就會自動銷毀,
- 成員變數:成員變數是定義在類中,方法體之外的變數,在創建物件時候實體化,可以被訪問
- 類變數 :類變數在宣告在類中,方法體外,但必須宣告為static型別
一個類可以擁有多個方法,其中eat()、run()、sleep() 和 name() 都是 Dog 類的方法,
1.3類的實體化
用型別別創建物件的程序,稱為類的實體化,在Java中使用 new 關鍵字,配合類名來實體化物件
public class Main{
public static void main(String[] args) {
PetDog dogh = new PetDog(); //通過new實體化物件
dogh.name = "阿黃";
dogh.color = "黑黃";
dogh.barks();
dogh.wag();
PetDog dogs = new PetDog();
dogs.name = "阿黃";
dogs.color = "黑黃";
dogs.barks();
dogs.wag();
}
}
/*輸出結果:
阿黃: 旺旺旺~~~
阿黃: 搖尾巴~~~
賽虎: 旺旺旺~~~
賽虎: 搖尾巴~~~
*/
注意事項:
- new 關鍵字用于創建一個物件的實體
- 使用 . 來訪問物件中的屬性和方法
- 同一個類可以創建多個實體
1.4 類和物件的說明
- 類只是一個模型
- 類是一種自定義語言
- 實體化的物件 占用實際的物理空間 存盤類成員變數
- 類實體化出物件就像現實中使用建筑設計圖建造出房子,類就像那個設計圖

2.this的參考
java編譯器給每個“成員方法“增加了一個隱藏的參考型別引數,該參考引數指向當前物件(成員方法運行時呼叫該
成員方法的物件),在成員方法中中所有成員變數的操作,都是通過該參考去訪問,
public class Date {
public int year;
public int month;
public int day;
public void setDay(int year, int month, int day){
this.year = year;
this.month = month;
this.day = day;
}
public void printDate(){
System.out.println(this.year + "/" + this.month + "/" + this.day);
}
}
this時編譯器自動添加的,用戶在實作代碼時一般不需要顯式給出
注意: this參考的時呼叫成員方法的物件
舉例子:

2.1 this參考的特性
- this的型別:對應型別別參考,即那個物件呼叫就是那個物件的應用型別
- this只能在“成員方法”中使用
- 在成員方法中,this只能參考當前物件,不能在參考其他物件,具有 final屬性
- this是“成員方法”第一個隱藏的引數,編譯器會自動傳遞,在成員方法執行時,編譯器會負責將呼叫成員方法物件的參考傳遞給該成員方法,this負責來接收
3.物件的構造及初始化
Java內部定義一個區域變數時,必須初始化,否則會編譯失敗
3.1.構造方法
構造方法:特殊的成員方法,名字必須與類名相同,在創建物件時,由編譯器自動呼叫,并且整個物件的宣告周期內只呼叫一次,
public class Date {
public int year;
public int month;
public int day;
// 構造方法:
// 名字與類名相同,沒有回傳值型別,設定為void也不行
// 一般情況下使用public修飾
// 在創建物件時由編譯器自動呼叫,并且在物件的宣告周期內只呼叫一次
public Date(int year, int month, int day){
this.year = year;
this.month = month;
this.day = day;
System.out.println("Date(int,int,int)方法被呼叫了");
}
public void printDate(){
System.out.println(year + "-" + month + "-" + day);
}
public static void main(String[] args) {
// 此處創建了一個Date型別的物件,并沒有顯式呼叫構造方法
Date d = new Date(2021,6,9); // 輸出Date(int,int,int)方法被呼叫了
d.printDate(); // 2021-6-9
}
}
public class Date {
public int year;
public int month;
public int day;
// 無參構造方法
public Date(){
this.year = 1900;
this.month = 1;
this.day = 1;
}
// 帶有三個引數的構造方法
public Date(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
public void printDate(){
System.out.println(year + "-" + month + "-" + day);
}
public static void main(String[] args) {
Date d = new Date();
d.printDate();
}
}
//名字相同 引數串列不同,因此構成了方法多載
經過javac編譯之后,建構式的名字會被修改成《init》
構造方法中,可以通過this呼叫其他構造方法簡化代碼
public class Date {
public int year;
public int month;
public int day;
// 無參構造方法--內部給各個成員賦值初始值,該部分功能與三個引數的構造方法重復
// 此處可以在無參構造方法中通過this呼叫帶有三個引數的構造方法
// 但是this(1900,1,1);必須是構造方法中第一條陳述句
public Date(){
//System.out.println(year); 注釋取消掉,編譯會失敗
this(1900, 1, 1);
//this.year = 1900;
//this.month = 1;
//this.day = 1;
}
// 帶有三個引數的構造方法
public Date(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
}
注意:
- this(…)必須時構造方法中第一條陳述句
- 不能形成環
3.2 構造方法《補充》
物件是根據類創建的,在Java中,使用關鍵字 new 來創建一個新的物件,創建物件需要以下三步:
- 宣告:宣告一個物件,包括物件名稱和物件型別
- 實體化: 使用關鍵字 new 來創建一個物件
- 初始化:使用 new 創建物件時,會呼叫構造方法初始化物件
public class Puppy{
public Puppy (String name ){
System. out.println(" 小狗的名字時:" + name );
}
public myPuppy = new Puppy (“tom”);
}
}
運行結果: tom
3.3 默認初始化
為什么區域變數在使用時必須初始化,而成員變數可以不用???
- 檢測物件對應的類是否加載了,如果沒有加載則加載
- 為物件分配記憶體空間
- 處理并發行問題
- 初始化所分配的空間

5.設定物件頭資訊
6.呼叫構造方法<>,給各個物件各個成員賦值
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/299517.html
標籤:java
