首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 類與對象詳解(五):對象的創建、初始化與訪問機制

     編輯:Java 綜合教學

Java 類與對象詳解(五):對象的創建、初始化與訪問機制

對象是面向對象程序的核心。本文詳細拆解對象的聲明、實例化、初始化三階段,以及對象對屬性和方法的訪問規則,並通過代碼示例演示 this 關鍵字的作用。

一、對象的生成:三步走


Student zhangsan = new Student(); // 一條語句包含三個動作
階段動作說明
1. 聲明Student zhangsan在棧內存分配引用變量空間(32/64 位地址),不分配對象內存,值為 null
2. 實例化new Student()在堆內存分配對象內存,調用構造器,返回對象地址賦給引用
3. 初始化構造器執行為實例變量賦初始值(顯式/默認),執行構造器代碼體

記住: 聲明≠創建對象;new 才是真正創建對象的關鍵字,每次 new 都在堆中開闢新空間。

二、構造器規則

  • 方法名與類名相同,無返回類型(連 void 都不能寫)
  • 若類中未定義任何構造器,編譯器自動生成無參默認構造器
  • 若自定義了構造器(無論有參無參),編譯器不再生成默認構造器,必須顯式調用已定義的構造器

三、代碼示例:無參構造器初始化


class Student {
    float height, weight;
    String head, ear, hand, foot, mouth;

    // 顯式無參構造器
    Student() {
        height = 0; weight = 0;
        head = "myhead"; ear = "myear";
        hand = "myhand"; foot = "myfoot"; mouth = "mymouth";
        System.out.println("new Student ok!!!");
    }
}

public class Man {
    public static void main(String[] args) {
        Student zhangsan = new Student(); // 調用無參構造器
    }
}
// 輸出:new Student ok!!!

四、對象的使用:訪問屬性與方法

通過 引用.屬性 或 引用.方法(參數) 訪問。訪問權限由修飾符(private/public/protected/默認)控制。

1. 訪問實例變量


zhangsan.height = 175.5f;
System.out.println(zhangsan.name);

2. 調用實例方法


class Person {
    float height, weight;
    String name;

    Person() {
        height = 175; weight = 70; name = "zhangsan";
        System.out.println("new Person ok!!!");
    }

    void speak(String words) {
        System.out.println("say: " + words);
    }
}

public class Human {
    public static void main(String[] args) {
        Person zhangsan = new Person();
        zhangsan.speak("hello java!!!");        // 調用方法

        Person lisi = new Person();
        lisi.name = "lisi";                     // 修改屬性
        lisi.speak("I am studying java!!!");
    }
}
/* 輸出:
new Person ok!!!
say: hello java!!!
new Person ok!!!
say: I am studying java!!!
*/

五、this 關鍵字:當前對象的引用

當方法參數/局部變量與實例變量同名時,this.變量名 明確指代實例變量,解決遮蔽衝突。


class Person {
    String name;
    int age;

    // 構造器參數同名
    Person(String name, int age) {
        this.name = name; // this.name = 實例變量,name = 參數
        this.age = age;
    }

    void printInfo() {
        System.out.println(this.name + " - " + this.age); // 此處 this 可省略
    }
}

this 還可用於:

  • 構造器互調:this(...) 必須在首行
  • 返回當前對象:return this; 支持鏈式調用
  • 傳遞當前對象:other.method(this)

六、內存圖解(文字版)

棧 (Stack)                    堆
┌──────────────┐              ┌──────────────────────┐
│ zhangsan ────────────────► │ Student Object       │
│ (引用/地址)   │              │ height: 0.0          │
└──────────────┘              │ weight: 0.0          │
                              │ head: "myhead"       │
                              │ ...                  │
                              └──────────────────────┘

引用像「遙控器」,對象像「電視機」;一個對象可被多個引用指向(共享),引用賦值為 null 或超出作用域後,對象可能被 GC 回收。


掌握「聲明在棧、實例在堆、構造器初始化、this 解決同名」這條主線,是理解 Java 面向對象運行機制的基石。建議在 IDEA Debug 模式下觀察變量面板,直觀感受引用與對象的關係。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved