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

Java 核心基礎:instanceof、final 關鍵字與值傳遞機制深度解析

     編輯:Java 綜合教學

Java 核心基礎:instanceof、final 關鍵字與值傳遞機制深度解析

本文系統講解三個 Java 基礎卻高頻考點:instanceof 類型判斷、final 多維度語義、基本類型與引用類型的值傳遞本質,並附帶可運行代碼驗證。

一、instanceof 關鍵字

作用

  1. 判斷對象是否為某類(或其子類、實現類)的實例;
  2. 前提:對象類型與目標類型存在繼承或實現關係,否則編譯報錯;
  3. 強制類型轉換前的安全檢查,避免 ClassCastException。

代碼演示

class Person { String name; }
class Student extends Person {}

public class Demo {
    public static void main(String[] args) {
        Person p = new Person("星星");
        System.out.println(p instanceof Person); // true
        
        Student s = new Student();
        System.out.println(s instanceof Person); // true(子類實例也是父類實例)
        
        // 安全轉型模式
        if (p instanceof Student) {
            Student stu = (Student) p; // 不會拋異常
        }
    }
}

二、final 關鍵字全景圖

修飾目標語義代碼示例
基本類型變量首次賦值後不可更改(常量)final int MAX = 100;
引用類型變量引用地址不可變,但對象內部狀態可變final List<String> list = new ArrayList<>(); list.add("a"); // OK
list = new ArrayList<>(); // 編譯錯誤
方法禁止子類重寫(override),可重載public final void init() {}
類禁止被繼承(如 String、Integer)public final class Immutable {}

常量定義規範

public static final double PI = 3.14159; // 全大寫+下劃線

代碼驗證:引用不可變 vs 狀態可變

class Yuan {
    int r;
    final double PI = 3.14; // 實例常量
    public Yuan(int r) { this.r = r; }
    public void area() { System.out.println("面積:" + r * r * PI); }
}

public class FinalDemo {
    public static void main(String[] args) {
        final Yuan y = new Yuan(10);
        y.r = 20;          // 合法:修改對象屬性
        y.area();          // 面積:1256.0
        // y = new Yuan(5); // 編譯錯誤:引用不可重賦值
    }
}

三、Java 值傳遞機制鐵律

Java 只有值傳遞! 無引用傳遞。

  • 基本類型:傳遞值的副本,方法內修改不影響外部;
  • 引用類型:傳遞引用的副本(即對象地址),方法內可通過副本修改對象內部狀態,但無法改變外部引用指向。

經典驗證代碼

public class ValueTransfer {
    public static void main(String[] args) {
        // 基本類型:無法交換
        int a = 10, b = 20;
        swap(a, b);
        System.out.println("a=" + a + ", b=" + b); // 10, 20
        
        // 引用類型(數組):可修改內容
        int[] arr = {10, 20};
        swapArr(arr);
        System.out.println("arr[0]=" + arr[0] + ", arr[1]=" + arr[1]); // 20, 10
    }
    
    static void swap(int a, int b) {
        int t = a; a = b; b = t; // 僅修改局部副本
    }
    
    static void swapArr(int[] arr) {
        int t = arr[0]; arr[0] = arr[1]; arr[1] = t; // 修改堆上對象
    }
}

四、總結記憶口訣

  • instanceof:判類型,防轉型拋異常;
  • final:變量不變、方法不改、類不繼、常量大寫;
  • 值傳遞:基本傳值、引用傳地址副本,堆上對象共享可改狀態。

作者:王可利(Star·星星)

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