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

Java 基礎核心:包、常量、靜態成員與繼承完整圖解

     編輯:Java 相關知識

包機制、final 常量、static 靜態成員、繼承關係是 Java 面向對象編程的四大基石。本文通過代碼示例、內存圖解、最佳實踐,系統講解包創建與導入規則、final 變量賦值時機、靜態與實例成員區別、單例模式實現、繼承訪問權限與方法重寫/隱藏規則。

一、包機制

1. 創建包


// 必須在源文件第一行非註釋語句
package com.itnba.maya.zy; // 命名規範:域名反轉 + 模塊 + 層級
  • 目錄結構必須與包名一致:src/com/itnba/maya/zy/。
  • 編譯輸出 javac -d . Test.java 會自動創建目錄樹。

2. 導入包


import com.itnba.maya.zyy.*;     // 導入包下所有類
import com.itnba.maya.zyy.Foo;   // 導入單個類(推薦,避免命名衝突)
// import 不能寫在 package 語句之前

3. 同包無需導入,不同包必須導入或使用全限定名

二、常量:final 變量

Java 無 const 關鍵字,final 變量即常量。只有兩個賦值機會:

  1. 聲明時顯式初始化:final int MAX = 100;
  2. 構造器中初始化(每個構造器都必須賦值,且僅能二選一):

public class FinalDemo {
    final String name; // 空白 final
    final int id = 1;  // 聲明時賦值

    public FinalDemo(String name) {
        this.name = name; // 構造器賦值
        // id = 2; // 編譯錯誤:已賦值不可再賦值
    }
    
    public FinalDemo() {
        this("default"); // 委派構造器,間接賦值 name
    }
}
  • 引用類型 final:引用不可變,但對象內部狀態可變(final List list = new ArrayList(); list.add(1); // 合法)。
  • 方法參數 final:防止在方法內修改引用指向。

三、靜態成員

核心區別

單例模式(餓漢式)標準實現


public class Singleton {
    // 1. 私有構造器
    private Singleton() {}
    
    // 2. 靜態常量持有唯一實例(類加載時初始化,線程安全)
    private static final Singleton INSTANCE = new Singleton();
    
    // 3. 公開靜態工廠方法
    public static Singleton getInstance() {
        return INSTANCE;
    }
}
  • 靜態變量初始化由 JVM 保證線程安全(類加載鎖)。
  • 懶漢式需雙重檢查鎖或靜態內部類實現延遲加載。

四、繼承

訪問修飾符與繼承關係

維度實例成員靜態成員
歸屬屬於對象屬於類,全局唯一
內存堆內存(每個對象一份)方法區/元空間(類加載時分配)
訪問obj.field / obj.method()Class.field / Class.method() (也可對象訪問但不推薦)
生命週期隨對象創建/銷毀隨類加載/卸載
可訪問成員實例+靜態僅靜態(無 this 引用)
修飾符同類同包子類不同包子類非子類
private✓✗✗✗
default(包私有)✓✓✗✓
protected✓✓✓✗
public✓✓✓✓

方法重寫 vs 隱藏


class Animal {
    protected String name = "動物";
    public void sound() { System.out.println(name + " 叫聲"); }
    public static void staticSound() { System.out.println("靜態方法"); }
}

class Bird extends Animal {
    // 重寫實例方法:同樣簽名,@Override 可選但推薦
    @Override
    public void sound() {
        System.out.println("鳥鳴: " + this.name); // 訪問父類 protected 字段
    }
    
    // 隱藏靜態方法:非重寫,編譯期綁定
    public static void staticSound() {
        System.out.println("鳥類靜態方法");
    }
}

public class Test {
    public static void main(String[] args) {
        Animal a = new Bird();
        a.sound();           // 動態分派 → Bird.sound() → "鳥鳴: 動物"
        a.staticSound();     // 靜態綁定 → Animal.staticSound() → "靜態方法"
        Bird.staticSound();  // → "鳥類靜態方法"
    }
}
  • 實例方法:運行期動態分派(多態)。
  • 靜態方法:編譯期靜態綁定(隱藏而非重寫)。
  • 字段:無多態,編譯期根據引用類型綁定(a.name 為 "動物")。

構造器鏈與初始化順序


父類靜態字段/塊 → 子類靜態字段/塊 → 父類實例字段/塊 → 父類構造器 → 子類實例字段/塊 → 子類構造器
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved