Java程式檢查靜態方法對靜態變數的可訪問性


簡介

在Java中,我們可以將變數和方法定義為靜態的。靜態變數或方法屬於類本身,而不是類的單個物件。因此,我們可以使用類名訪問靜態變數或方法,而無需建立類的物件。

在本程式中,我們將探討如何檢查靜態方法對靜態變數的可訪問性。我們將定義一個包含靜態變數的類,以及一個訪問該變數的靜態方法。然後,我們將呼叫靜態方法以檢查它是否可以訪問靜態變數。

定義

靜態

static關鍵字在Java中用於建立實用程式方法或變數,這些方法或變數可以從多個類中訪問,而無需建立類的物件。它也用於跨類所有例項保持不變的常量值。但是,使用靜態變數和方法可能會導致潛在問題,例如執行緒安全和測試困難,因此應謹慎使用。

以下是Java中static的一些關鍵特性:

  • 靜態變數

  • 靜態方法

  • 靜態塊

  • 靜態巢狀類

靜態變數 - 靜態變數是類級變數,在類的所有例項之間共享。它使用關鍵字static定義,並且僅在類載入時初始化一次。靜態變數使用類名後跟點運算子進行訪問。

情況1:靜態變數對靜態方法的可訪問性

如果靜態方法以public訪問修飾符宣告,則任何其他類都可以訪問它,包括包含靜態變數的類。在這種情況下,如果靜態變數也以public訪問修飾符宣告,則靜態方法可以訪問它。

但是,如果靜態方法以private訪問修飾符宣告,則只能在同一類中訪問它。在這種情況下,即使靜態變數以public訪問修飾符宣告,靜態方法也無法訪問它。

方法

  • 使用“import”語句匯入必要的I/O庫。

  • 定義一個名為“Tutorialspoint”的Java類。

  • 宣告一個型別為int的靜態變數“i”,並將其賦值為100。

  • 定義main()方法,其簽名為public、static、void,並接受一個名為“args”的String陣列引數。

  • 在main()方法內部,使用System.out.println()方法在控制檯上顯示靜態變數“i”的值。

  • 將程式碼儲存在名為“Tutorialspoint.java”的Java檔案中。

  • 使用Java編譯器(如“javac”)編譯Java程式碼。

  • 使用“java”命令執行Java程式碼,該命令執行“main”方法並在控制檯上顯示輸出“Static Variable = 100”。

示例

import java.io.*;

public class Tutorialspoint {

   static int i = 100;

   public static void main(String[] args){
      System.out.println("Static Variable = " + i);
   }
}

在此示例中,定義了一個名為“Tutorialspoint”的類,其中包含一個名為“i”的整數型別靜態變數,並初始化為100。

類的main方法以public、static、void為簽名,並接受一個名為“args”的String陣列引數。

在main方法內部,使用System.out.println()方法列印靜態變數“i”的值。輸出語句包括一個字串“Static Variable =”,後面連線著靜態變數“i”的值。

執行此程式時,它將列印“Static Variable = 100”作為輸出,因為靜態變數“i”的值設定為100。

輸出

靜態變數是屬於類而不是類例項的變數。這意味著靜態變數只有一個副本由類的所有例項共享。換句話說,靜態變數是類級變數,可以在不建立類物件的情況下訪問。

Static Variable = 100

情況2:靜態方法對靜態變數的可訪問性

如果靜態變數以public訪問修飾符宣告,則任何其他類都可以訪問它,包括包含靜態方法的類。在這種情況下,如果靜態方法也以public訪問修飾符宣告,則它可以訪問靜態變數。

但是,如果靜態變數以private訪問修飾符宣告,則只能在同一類中訪問它。在這種情況下,即使靜態方法以public訪問修飾符宣告,它也無法訪問靜態變數。

在這種情況下,我們在一個類中聲明瞭一個靜態變數、一個靜態陣列和一個靜態方法。靜態方法訪問靜態變數和靜態陣列,並且在不建立類例項的情況下呼叫該方法。

由於靜態變數和靜態陣列都屬於類,而不是類的任何特定例項,因此即使在不建立類例項的情況下呼叫該方法,靜態方法也可以訪問它們。

方法

  • 建立一個新的Java類檔案,並將其命名為MyClass.java。

  • 在MyClass.java檔案中,宣告一個名為count的私有靜態整型變數,並將其初始化為0。

  • 宣告一個名為myArray的私有靜態整型陣列,並使用一些值初始化它,例如,myArray = new int[]{1, 2, 3, 4, 5};

  • 宣告一個名為myStaticMethod()的公共靜態方法,該方法執行以下操作:

    • 將count的值加1。

    • 使用System.out.println()將count的值列印到控制檯。

    • 迴圈遍歷myArray陣列,並使用System.out.println()將每個元素列印到控制檯。

  • 儲存MyClass.java檔案。

示例

public class MyClass {
   private static int count = 0;
   private static int[] myArray = new int[]{1, 2, 3, 4, 5};
       
   public static void myStaticMethod() {
      count++;

      System.out.println("Count: " + count);
              
      for (int i = 0; i < myArray.length; i++) {
         System.out.println(myArray[i]);
      }
   }
}
  • 建立一個新的Java類檔案,並將其命名為Main.java。

  • 在Main.java檔案中,新增main()方法。

  • 在main()方法中,透過使用類名後跟方法名和括號來呼叫MyClass類上的myStaticMethod()方法,例如,MyClass.myStaticMethod();。

  • 儲存Main.java檔案。

public class Main {
   public static void main(String[] args) {
      MyClass.myStaticMethod();
   }
}
  • 透過在命令提示符或終端中執行命令javac MyClass.java Main.java來編譯MyClass.java和Main.java檔案。

  • 透過在命令提示符或終端中執行命令java Main來執行程式。

在此示例中,我們有一個MyClass類,其中包含一個靜態變數count和一個靜態陣列myArray,以及一個靜態方法myStaticMethod()。myStaticMethod()方法將count的值加1,將count的值列印到控制檯,然後迴圈遍歷myArray陣列並將每個元素列印到控制檯。

輸出

在Main類中,我們透過使用類名後跟方法名和括號來呼叫MyClass類本身(而不是類的任何例項)上的myStaticMethod()方法。此方法呼叫將執行myStaticMethod()方法,並將以下內容輸出到控制檯:

Count: 1
1
2
3
4
5

結論

  • 在Java中,靜態變數和靜態方法與類本身相關聯,而不是與類的任何特定例項相關聯。這意味著靜態方法可以直接訪問靜態變數,只要該變數在與該方法相同的類中定義即可。

更新於: 2023年4月10日

249 次瀏覽

開啟你的 職業生涯

完成課程獲得認證

開始學習
廣告