JavaRush /Java Blog /Random-TW /喝咖啡休息#142。Java中static關鍵字有什麼作用?

喝咖啡休息#142。Java中static關鍵字有什麼作用?

在 Random-TW 群組發布
來源:FreeCodeCamp static關鍵字可以用在 Java 程式碼的不同部分,例如變數、方法和靜態區塊。今天我們就來具體了解如何將其應用到實務上。 Java中使用static喝咖啡休息#142。 Java中static關鍵字有什麼作用? - 1關鍵字的主要目的是節省記憶體。當我們在一個類別中建立一個將被其他類別存取的變數時,我們必須先建立該類別的一個實例,然後為該變數的每個實例指派一個新值。這是必要的,以便所有新類別/物件的新變數的值都相同。但是當我們創建靜態變數時,它們的值在所有其他類別中保持不變,我們不需要建立實例來使用該變數。這樣我們就創建了一次變量,因此記憶體只分配了一次。透過本文中的一些範例,您將更好地理解這一點。

如何在Java中建立靜態變數

為了了解如何在建立變數時使用static關鍵字,讓我們看看建立由類別的每個實例共享的變數的常用方法。
class Student {
    String studentName;
    String course;
    String school;

    public static void main(String[] args) {
        Student Student1 = new Student();
        Student Student2 = new Student();

        Student1.studentName = "Ihechikara";
        Student1.course = "Data Visualization";
        Student1.school = "freeCodeCamp";

        Student2.studentName = "John";
        Student2.course = "Data Analysis with Python";
        Student2.school = "freeCodeCamp";

        System.out.println(Student1.studentName + " " + Student1.course + " " + Student1.school + "\n");
        // Ihechikara Data Visualization freeCodeCamp
        System.out.println(Student2.studentName + " " + Student2.course + " " + Student2.school);
        // John Data Analysis with Python freeCodeCamp
    }
}
我將逐步解釋上面程式碼中發生的事情。我們創建了一個包含三個變數的Student類別—studentNamecourseschool。然後我們創建了Student類別的兩個實例:
Student Student1 = new Student();
Student Student2 = new Student();
第一個實例是Student1,它可以存取在其類別中建立的變量,具有以下值:
Student1.studentName = "Ihechikara";
Student1.course = "Data Visualization";
Student1.school = "freeCodeCamp";
第二個實例的意思如下:
Student2.studentName = "John";
Student2.course = "Data Analysis with Python";
Student2.school = "freeCodeCamp";
如果你仔細觀察,你會發現兩個學生都有相同的學校名稱—「freeCodeCamp」。但如果我們必須為同一所學校創造 100 名學生呢?這意味著我們將使用相同的值初始化變數 100 次,每次都分配新的記憶體。對某些人來說這可能不是問題,但在大型程式碼庫中它會顯著減慢程式速度。為了解決這個問題,我們將使用 static 關鍵字來建立school變數。此後,該類別的所有實例都可以使用該變數。像這樣的東西:
class Student {
    String studentName;
    String course;
    static String school;

    public static void main(String[] args) {
        Student Student1 = new Student();
        Student Student2 = new Student();


        Student1.studentName = "Ihechikara";
        Student1.course = "Data Visualization";
        Student1.school = "freeCodeCamp";


        Student2.studentName = "John";
        Student2.course = "Data Analysis with Python";

        System.out.println(Student1.studentName + " " + Student1.course + " " + Student1.school + "\n");
        // Ihechikara Data Visualization freeCodeCamp
        System.out.println(Student2.studentName + " " + Student2.course + " " + Student2.school);
        // John Data Analysis with Python freeCodeCamp
    }
}
在此程式碼中,我們建立了一個名為school的靜態變數。請注意,static 關鍵字位於資料類型和變數名稱之前:static String school = "freeCodeCamp"; 。現在,當我們建立類別的新實例時,我們不需要為每個實例初始化school變數。在我們的程式碼中,我們只在第一個實例中為變數賦值,然後它被下一個實例繼承。請注意,在程式碼中任何位置更改靜態變數的值都會覆蓋先前聲明它的程式碼其他部分中的值。因此,您應該只對要在程式中保持不變的變數使用static關鍵字。您也可以在建立變數時為變數賦值,這樣實例化類別時就不必再聲明它:static String school = "freeCodeCamp"; 。如果您使用此方法,您將得到以下結果:
class Student {
    String studentName;
    String course;
    static String school = "freeCodeCamp";

    public static void main(String[] args) {
        Student Student1 = new Student();
        Student Student2 = new Student();


        Student1.studentName = "Ihechikara";
        Student1.course = "Data Visualization";

        Student2.studentName = "John";
        Student2.course = "Data Analysis with Python";

        System.out.println(Student1.studentName + " " + Student1.course + " " + Student1.school + "\n");
        // Ihechikara Data Visualization freeCodeCamp
        System.out.println(Student2.studentName + " " + Student2.course + " " + Student2.school);
        // John Data Analysis with Python freeCodeCamp
    }
}
現在您將了解如何使用靜態區塊初始化靜態變數。

如何在Java中建立靜態方法

在查看範例之前,您需要了解有關 Java 中靜態方法的一些知識:
  • 靜態方法只能存取和修改靜態變數。
  • 無需建立類別的實例即可呼叫/使用靜態方法。
這是一個幫助您理解這一點的範例:
class EvenNumber {

    static int evenNumber;

    static void incrementBy2(){
        evenNumber = evenNumber + 2;
        System.out.println(evenNumber);
    }

    public static void main(String[] args) {
        incrementBy2(); // 2
        incrementBy2(); // 4
        incrementBy2(); // 6
        incrementBy2(); // 8
    }
}
在上面的程式碼中,我們在名為EvenNumber的類別中 建立了一個整數 ( EvenNumber ) 。我們的靜態方法稱為incrementBy2()此方法增加整數EvenNumber的值並列印其值。無需建立該類別的實例,我們就可以在程式的main方法中呼叫incrementBy2()方法。每次呼叫該方法時,evenNumber都會增加 2 並列印出來。您也可以在呼叫方法時使用點表示法將類別名稱附加到方法中:EvenNumber.incrementBy2(); 。每個靜態方法都屬於該類,而不屬於該類的實例。

如何在Java中建立靜態區塊

Java 中的靜態區塊類似建構函式。我們可以使用它們來初始化靜態變量,它們由編譯器在main方法之前執行。
class Block {

    static int year;

    static {
        year = 2022;
        System.out.println("This code block got executed first");
    }

    public static void main(String[] args) {

        System.out.println("Hello World");
        System.out.println(year);
    }
}
在上面的程式碼中,我們建立了一個靜態整數變數year。然後我們在靜態塊中初始化它:
static {
        year = 2022;
        System.out.println("This code block got executed first");
    }
正如您所看到的,可以使用 static 關鍵字後面跟著大括號來建立靜態區塊。在程式碼的靜態區塊中,我們用值 2022初始化了年份變數。我們還列印了一些文字 - “此程式碼區塊首先執行。” main方法中,我們列印了「Hello World」和一個靜態變數year。在控制台中,程式碼將按以下順序執行:
該程式碼區塊首先執行 Hello World 2022
這清楚地演示了靜態區塊中的程式碼如何在main方法之前首先執行。

結論

在這篇文章中,我們討論了Java中的static關鍵字。這個關鍵字基本上可以幫助我們優化 Java 編寫的程式中的記憶體。我們也透過範例了解如何建立靜態變數和方法。最後,我們討論了靜態區塊,它可以用來初始化靜態變數。靜態區塊在 main 方法之前執行。快樂編碼!
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION