首頁 Java Java基礎 什麼是java靜態

什麼是java靜態

Nov 13, 2019 pm 01:39 PM
java 靜態

什麼是java靜態

什麼是java靜態

#java靜態包含靜態變數、靜態方法、靜態初始化區塊,以下是靜態的詳解。 (推薦教程:java教程

1. 什麼是靜態變數

大家都知道,我們可以基於一個類別創建多個該類別的對象,每個對像都有自己的成員,互相獨立。

然而在某些時候,我們更希望該類別所有的物件共享同一個成員。此時就是 static 大顯身手的時候了!

Java 中被 static 修飾的成員稱為靜態成員或類別成員。它屬於整個類別所有,而不是某個物件所有,也就是被類別的所有物件所共享。

靜態成員可以使用類別名稱直接訪問,也可以使用物件名稱進行存取。當然,鑑於他作用的特殊性更建議用類別名稱存取

使用 static 可以修飾變數、方法和程式碼區塊。

public class Test1 {
    // static修饰的变量为静态变量,所有类的对象共享hobby
    static String hobby = "Tedu";
    
    public static void main(String[] args) {
        // 静态变量可以直接使用类名来访问,无需创建对象
        System.out.println("通过类名访问hobby:" + Test1.hobby);
        // 创建类的对象
        Test1 t1 = new Test1();
        // 使用对象名访问静态变量
        System.out.println("使用对象名访hobby:" + t1.hobby);
        // 使用对象名的形式修改静态变量的值
        t1.hobby = "cjj";
        // 再次使用类名访问静态白变量,值已经被修改
        System.out.println("通过类名访问hobby:" + Test1.hobby);
    }
}
登入後複製

運行結果:

通过类名访问hobby:Tedu
使用对象名访hobby:Tedu
通过类名访问hobby:cjj
登入後複製

注意:

靜態成員屬於整個類,當系統第一次使用該類別時,就會為其分配記憶體空間直到該類別被卸載才會進行資源回收!

2. static 使用靜態方法

與靜態變數一樣,我們也可以使用 static 修飾方法,稱為靜態方法或類別方法。

其實之前我們一直寫的main 方法就是靜態方法

public class Test01 {
    //使用static关键字声明静态方法
    public static void print() {
        System.out.println("欢迎你:Cjj!");
    }
    
    public static void main(String[] args) {
        //直接使用类名调用静态方法
        Test01.print();
        //也可以通过对象名调用,当然更推荐使用类名调用
        Test01 t1 = new Test01();
        t1.print();
    }
}
登入後複製

複製程式碼

欢迎你:Cjj!
欢迎你:Cjj!
登入後複製

注意:

1、 靜態方法中可以直接呼叫同類中的靜態成員,但不能直接呼叫非靜態成員。如:

如果希望在靜態方法中呼叫非靜態變量,可以透過建立類別的對象,然後透過對象來存取非靜態變數。如:

2、 在普通成員方法中,則可以直接存取同類的非靜態變數和靜態變量,如:

3、 靜態方法中無法直接呼叫非靜態方法,需要透過物件來存取非靜態方法。如:

public class Test01 {
    String name = "Cjj"; //静态成员变量
    static String hobby = "study"; //非静态成员变量
    
    //普通成员方法
    public void print1() {
        System.out.println("普通成员方法~~~"); 
    }
    
    //静态成员方法
    public static void print2() {
        System.out.println("静态成员方法~~~");
    }
    
    public static void main(String[] args) {
        //普通成员方法必须通过对象来调用
        Test01 t1 = new Test01();
        t1.print1();
        //可以直接调用静态方法
        print2();
    }
}
登入後複製

3. static 使用靜態初始化區塊

Java 中可以透過初始化區塊進行資料賦值。如:

public class Test02 {
    String name; // 定义一个成员变量
    //通过初始化块为成员变量赋值
    {
        name = "cjj";
    }
}
登入後複製

依序執行這些程式碼區塊。如果使用 static 修飾初始化區塊,就稱為靜態初始化區塊。

注意:

靜態初始化區塊只在類別載入時執行,且只會執行一次,同時靜態初始化區塊只能給靜態變數賦值,不能初始化普通的成員變數。

我們來看一段程式碼:

public class Test02 {
    int num1;
    int num2;
    static int num3;
    public Test02() {// 构造方法
        num1 = 11;
        System.out.println("通过构造方法为变量num1赋值");
    }
    { // 初始化块
        num2 = 22;
        System.out.println("通过初始化块为变量num2赋值");
    }
    static {// 静态初始化块
        num3 = 33;
        System.out.println("通过静态初始化块为静态变量num3赋值");
    }
    
    public static void main(String[] args) {
        Test02 t1 = new Test02(); //创建对象
        System.out.println("num1:" + t1.num1);
        System.out.println("num2:" + t1.num2);
        System.out.println("num3:" + num3);
        
    }
}
登入後複製

運行結果:

通过静态初始化块为静态变量num3赋值
通过初始化块为变量num2赋值
通过构造方法为变量num1赋值
num1:11
num2:22
num3:33
登入後複製

透過輸出結果,我們可以看到,程式執行時靜態初始化區塊最先被執行,然後執行普通初始化塊,最後才執行構造方法。由於靜態初始化區塊只在類別載入時執行一次,所以當再次建立物件 hello2 時並未執行靜態初始化區塊。

類別是在第一次使用的時候才加載,加載之後就不會移除。

以上是什麼是java靜態的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Java 中的平方根 Java 中的平方根 Aug 30, 2024 pm 04:26 PM

Java 中的平方根

Java 中的完美數 Java 中的完美數 Aug 30, 2024 pm 04:28 PM

Java 中的完美數

Java 中的隨機數產生器 Java 中的隨機數產生器 Aug 30, 2024 pm 04:27 PM

Java 中的隨機數產生器

Java中的Weka Java中的Weka Aug 30, 2024 pm 04:28 PM

Java中的Weka

Java 中的阿姆斯壯數 Java 中的阿姆斯壯數 Aug 30, 2024 pm 04:26 PM

Java 中的阿姆斯壯數

Java 中的史密斯數 Java 中的史密斯數 Aug 30, 2024 pm 04:28 PM

Java 中的史密斯數

Java Spring 面試題 Java Spring 面試題 Aug 30, 2024 pm 04:29 PM

Java Spring 面試題

突破或從Java 8流返回? 突破或從Java 8流返回? Feb 07, 2025 pm 12:09 PM

突破或從Java 8流返回?

See all articles