最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中static與final關(guān)鍵字詳解(簡單易懂)

 更新時(shí)間:2026年01月30日 08:41:45   作者:莫問前路漫漫  
在Java中static和final是兩個(gè)非常重要的關(guān)鍵字,它們各自具有獨(dú)特的作用,當(dāng)組合使用時(shí),還可以產(chǎn)生額外的效果,這篇文章主要介紹了Java中static與final關(guān)鍵字的相關(guān)資料,需要的朋友可以參考下

一、static(靜態(tài)關(guān)鍵字)

1. 核心概念

static修飾的成員(變量、方法、代碼塊、內(nèi)部類)屬于類本身,而不是類的某個(gè)實(shí)例(對(duì)象)。

  • 比喻:班級(jí)的公共飲水機(jī)(static),屬于整個(gè)班級(jí),所有同學(xué)(對(duì)象)都能使用,且只有 1 份;而每個(gè)同學(xué)的水杯(非 static),屬于各自的實(shí)例,有多個(gè)副本。
  • 內(nèi)存角度:static 成員在類加載時(shí)就被初始化,存放在方法區(qū)(而非堆內(nèi)存),生命周期與類一致,直到 JVM 卸載該類。

2. 常見用法及示例

(1)static 變量(類變量)

  • 所有實(shí)例共享同一個(gè) static 變量,修改一個(gè)實(shí)例的 static 變量,其他實(shí)例的該變量也會(huì)同步變化。
  • 訪問方式:類名.變量名(推薦)或對(duì)象名.變量名(不推薦,易混淆)。
  • 命名規(guī)范:通常配合final使用(常量),全大寫,下劃線分隔;普通 static 變量小寫開頭。
public class Student {
    // 非static變量(實(shí)例變量):每個(gè)學(xué)生有獨(dú)立的姓名
    private String name;
    // static變量(類變量):所有學(xué)生共享同一個(gè)班級(jí)名稱,只有1份
    public static String className = "高一(1)班";

    public Student(String name) {
        this.name = name;
    }

    public static void main(String[] args) {
        Student s1 = new Student("張三");
        Student s2 = new Student("李四");

        // 訪問static變量:推薦用類名訪問
        System.out.println(Student.className); // 輸出:高一(1)班
        // 修改static變量
        Student.className = "高一(2)班";
        // 所有實(shí)例的static變量都被修改
        System.out.println(s1.className); // 輸出:高一(2)班
        System.out.println(s2.className); // 輸出:高一(2)班
    }
}

(2)static 方法(類方法)

  • 屬于類,無需創(chuàng)建對(duì)象即可調(diào)用(類名.方法名)。
  • 核心限制:不能直接訪問非 static 成員(因?yàn)?static 方法沒有this引用,無法指向具體實(shí)例),但可以訪問 static 成員。
  • 典型場(chǎng)景:工具類方法(如Math.random()、Arrays.sort())、工具性操作(如對(duì)象創(chuàng)建的靜態(tài)工廠方法)。
public class Calculator {
    // static方法:無需創(chuàng)建Calculator對(duì)象即可調(diào)用
    public static int add(int a, int b) {
        // 可以訪問static成員,不能訪問非static成員
        return a + b;
    }

    // 非static方法:必須創(chuàng)建對(duì)象才能調(diào)用
    public int subtract(int a, int b) {
        return a - b;
    }

    public static void main(String[] args) {
        // 調(diào)用static方法:直接用類名
        int sum = Calculator.add(10, 20);
        System.out.println(sum); // 輸出:30

        // 調(diào)用非static方法:必須創(chuàng)建對(duì)象
        Calculator cal = new Calculator();
        int diff = cal.subtract(20, 10);
        System.out.println(diff); // 輸出:10
    }
}

(3)static 代碼塊

  • 類加載時(shí)執(zhí)行,且只執(zhí)行一次(無論創(chuàng)建多少個(gè)實(shí)例)。
  • 用于初始化 static 變量(如加載配置、初始化靜態(tài)資源)。
public class Config {
    public static String DB_URL;

    // static代碼塊:類加載時(shí)執(zhí)行,初始化靜態(tài)變量
    static {
        System.out.println("static代碼塊執(zhí)行");
        DB_URL = "jdbc:mysql://localhost:3306/test";
    }

    public static void main(String[] args) {
        // 首次訪問類,觸發(fā)類加載,執(zhí)行static代碼塊
        System.out.println(Config.DB_URL); // 輸出:static代碼塊執(zhí)行 + jdbc:mysql://localhost:3306/test
        // 再次創(chuàng)建實(shí)例,static代碼塊不會(huì)重復(fù)執(zhí)行
        Config c1 = new Config();
        Config c2 = new Config();
    }
}

(4)static 內(nèi)部類

  • 屬于外部類本身,無需依賴外部類的實(shí)例即可創(chuàng)建。
  • 不能訪問外部類的非 static 成員(只能訪問 static 成員)。
public class OuterClass {
    private static String staticField = "靜態(tài)字段";
    private String nonStaticField = "非靜態(tài)字段";

    // static內(nèi)部類
    public static class StaticInnerClass {
        public void print() {
            // 可以訪問外部類的static成員
            System.out.println(staticField);
            // 錯(cuò)誤:不能訪問外部類的非static成員
            // System.out.println(nonStaticField);
        }
    }

    public static void main(String[] args) {
        // 創(chuàng)建static內(nèi)部類:無需外部類實(shí)例
        OuterClass.StaticInnerClass inner = new OuterClass.StaticInnerClass();
        inner.print(); // 輸出:靜態(tài)字段
    }
}

二、final(最終關(guān)鍵字)

1. 核心概念

final表示 “最終的、不可改變的”,修飾不同成員時(shí),含義略有差異,但核心都是 “不可修改”。

  • 比喻:刻在石碑上的文字(final 變量)無法修改;密封的箱子(final 方法)無法被打開重寫;絕版的書籍(final 類)無法再版(繼承)。

2. 常見用法及示例

(1)final 變量(常量)

  • 一旦賦值,不可修改(引用類型變量:引用不可變,但對(duì)象內(nèi)容可變)。
  • 初始化要求:
    • 局部 final 變量:聲明時(shí)或使用前賦值即可;
    • 成員 final 變量:必須在聲明時(shí)、構(gòu)造方法、初始化塊中賦值(三者選其一),且只能賦值一次。
  • 命名規(guī)范:final 常量(通常配合 static)全大寫,下劃線分隔(如PI、MAX_VALUE)。
public class FinalDemo {
    // 1. 成員final變量:聲明時(shí)直接賦值(推薦)
    private final String NAME = "張三";
    // 2. 成員final變量:構(gòu)造方法中賦值
    private final int AGE;
    // 3. static final常量(類級(jí)常量,最常用)
    public static final double PI = 3.1415926;

    public FinalDemo(int age) {
        this.AGE = age; // 構(gòu)造方法中初始化final變量
    }

    public static void main(String[] args) {
        FinalDemo demo = new FinalDemo(18);
        // 錯(cuò)誤:final變量不可修改
        // demo.NAME = "李四";
        // demo.AGE = 20;

        // 引用類型final變量:引用不可變,但對(duì)象內(nèi)容可變
        final StringBuilder sb = new StringBuilder("hello");
        sb.append(" world"); // 合法:修改對(duì)象內(nèi)容
        System.out.println(sb); // 輸出:hello world
        // 錯(cuò)誤:引用不可變
        // sb = new StringBuilder("new");

        // static final常量:類名訪問,不可修改
        System.out.println(FinalDemo.PI); // 輸出:3.1415926
    }
}

(2)final 方法

  • 不能被子類重寫(override),保證方法的邏輯穩(wěn)定(如父類的核心業(yè)務(wù)邏輯不允許子類修改)。
public class Parent {
    // final方法:子類不能重寫
    public final void sayHello() {
        System.out.println("Hello from Parent");
    }
}

public class Child extends Parent {
    // 錯(cuò)誤:無法重寫final方法
    // @Override
    // public void sayHello() {
    //     System.out.println("Hello from Child");
    // }

    public static void main(String[] args) {
        Child child = new Child();
        child.sayHello(); // 輸出:Hello from Parent
    }
}

(3)final 類

  • 不能被繼承(extend),保證類的完整性(如 Java 核心類String、MathInteger都是 final 類,避免被篡改)。
// final類:不能被繼承
public final class FinalClass {
    public void print() {
        System.out.println("這是final類的方法");
    }
}

// 錯(cuò)誤:無法繼承final類
// public class SubClass extends FinalClass {
// }

三、static final 組合使用(最常用)

static final修飾的變量是類級(jí)常量,具備兩大特性:

  • static:屬于類,內(nèi)存中只有 1 份,類加載時(shí)初始化;
  • final:一旦賦值,不可修改。
  • 典型場(chǎng)景:定義系統(tǒng)常量(如Math.PI、Integer.MAX_VALUE)。
public class Constants {
    // 數(shù)據(jù)庫連接常量
    public static final String DB_URL = "jdbc:mysql://localhost:3306/test";
    public static final String DB_USER = "root";
    public static final String DB_PWD = "123456";

    // 工具類:私有化構(gòu)造方法,避免創(chuàng)建實(shí)例
    private Constants() {}
}

總結(jié)

  • static 核心:屬于類而非實(shí)例,類加載時(shí)初始化,所有實(shí)例共享,可通過類名直接訪問;常用于工具方法、共享變量、靜態(tài)初始化。
  • final 核心:“不可變”,修飾變量則值 / 引用不可改,修飾方法則不可重寫,修飾類則不可繼承;常用于定義常量、保護(hù)核心邏輯 / 類結(jié)構(gòu)。
  • static final:類級(jí)常量,內(nèi)存唯一且不可修改,是 Java 中定義常量的標(biāo)準(zhǔn)方式。

到此這篇關(guān)于Java中static與final關(guān)鍵字的文章就介紹到這了,更多相關(guān)Java static與final關(guān)鍵字內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 微信小程序后端Java接口開發(fā)的詳細(xì)步驟

    微信小程序后端Java接口開發(fā)的詳細(xì)步驟

    現(xiàn)在微信小程序越來越火了,相信不少人都通過各種途徑學(xué)習(xí)過微信小程序或者嘗試開發(fā),本文就介紹了微信小程序后端Java接口開發(fā)的詳細(xì)步驟,感興趣的同學(xué)可以學(xué)習(xí)一下
    2021-11-11
  • 我對(duì)@RestController注解的理解

    我對(duì)@RestController注解的理解

    這篇文章主要介紹了我對(duì)@RestController注解的理解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • SpringCloud搭建netflix-eureka微服務(wù)集群的過程詳解

    SpringCloud搭建netflix-eureka微服務(wù)集群的過程詳解

    這篇文章主要介紹了SpringCloud搭建netflix-eureka微服務(wù)集群的過程詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • Spring框架實(shí)現(xiàn)文件上傳功能

    Spring框架實(shí)現(xiàn)文件上傳功能

    這篇文章主要為大家詳細(xì)介紹了Spring框架實(shí)現(xiàn)文件上傳功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • JDK1.8中的ConcurrentHashMap使用及場(chǎng)景分析

    JDK1.8中的ConcurrentHashMap使用及場(chǎng)景分析

    這篇文章主要介紹了JDK1.8中的ConcurrentHashMap使用及場(chǎng)景分析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • 如何把Spring Cloud Data Flow部署在Kubernetes上

    如何把Spring Cloud Data Flow部署在Kubernetes上

    這篇文章主要介紹了把Spring Cloud Data Flow部署在Kubernetes上,再跑個(gè)任務(wù)試試,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Hadoop Combiner使用方法詳解

    Hadoop Combiner使用方法詳解

    這篇文章主要介紹了 Hadoop Combiner使用方法詳解的相關(guān)資料,希望通過本文能幫助到大家讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • Java計(jì)算文件MD5值幾種實(shí)現(xiàn)方式(支持大文件)

    Java計(jì)算文件MD5值幾種實(shí)現(xiàn)方式(支持大文件)

    MD5是由Ron Rivest設(shè)計(jì)的一種加密哈希函數(shù),它能夠生成一個(gè)唯一的128位(16字節(jié))哈希值,這篇文章主要介紹了Java計(jì)算文件MD5值幾種實(shí)現(xiàn)方式(支持大文件)的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-09-09
  • java中刪除文件/文件夾的3種方法示例小結(jié)

    java中刪除文件/文件夾的3種方法示例小結(jié)

    這篇文章主要介紹了java中刪除文件/文件夾的3種方法示例小結(jié),第一種是通過io刪除文件,第二種是通過Files.walk刪除文件,第三種是通過 Files.walkFileTree刪除文件,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2023-10-10
  • Google Guava 緩存工具使用詳解

    Google Guava 緩存工具使用詳解

    這篇文章主要介紹了Guava自加載緩存LoadingCache使用指南,通過這些內(nèi)容介紹,了解了LoadingCache的基本原理和用法,包括如何創(chuàng)建和配置緩存,以及如何結(jié)合Java?8的特性來優(yōu)化代碼,需要的朋友可以參考下
    2023-12-12

最新評(píng)論

昭通市| 儋州市| 卓资县| 襄城县| 陵川县| 横峰县| 雷山县| 峨山| 江源县| 深州市| 湖北省| 巴塘县| 竹溪县| 阜新市| 花莲县| 正定县| 太谷县| 新巴尔虎右旗| 祁连县| 苗栗县| 务川| 页游| 秦皇岛市| 修水县| 长兴县| 西丰县| 锡林浩特市| 平谷区| 肇源县| 沙洋县| 育儿| 内乡县| 阜宁县| 内江市| 哈巴河县| 丰宁| 顺昌县| 昌黎县| 福建省| 阳高县| 浠水县|