日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

非静态方法可以访问Java中的静态变量/方法吗?

發布時間:2023/12/3 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 非静态方法可以访问Java中的静态变量/方法吗? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

“非靜態方法可以訪問靜態變量或調用靜態方法”是Java中有關靜態修飾符的常見問題之一,答案是, 是的 ,非靜態方法可以訪問靜態變量或調用靜態方法。 Java中的方法。 這沒有問題,因為有靜態成員,即靜態變量和靜態方法都屬于一個類,并且可以根據其訪問修飾符從任何位置調用。

例如,如果靜態變量是私有的 ,則只能從類本身訪問它,但是您可以從任何地方訪問公共靜態變量。 類似地,可以從同一類的非靜態方法中調用私有靜態方法,但是可以從任何地方調用公共靜態方法(例如main()) 。

這是一個代碼示例,用以證明我們的觀點:非靜態方法可以訪問Java中的靜態變量和方法:

public class StaticTest {public static int iStatic = 10;public void nonStatic() {System.out.println("can access static variable inside non-static method : "+ iStatic);main(new String[2]);}public static void main(String[] args) {System.out.println("Inside main method");}}

您可以看到該代碼可以正常編譯,沒有編譯時錯誤。 您甚至可以從非靜態方法訪問嵌套的靜態類 ,這絕對好。

但是,只要想一想,如果答案就是這么簡單,那么為什么在Java采訪和Java認證(如OCAJP或OCPJP )中經常問這個問題? 嗯,這個問題有些棘手,并且經常被問到困惑的候選人,因為事實并非如此,即您可以從非靜態上下文訪問靜態成員,但不能從 Java中的靜態方法訪問非靜態變量或方法 。

為什么您不能在Java中訪問非靜態變量或從靜態方法調用非靜態方法? 好吧,這是因為靜態方法形成了一個靜態上下文,在該上下文中只能訪問靜態成員,但是如果您需要更多說明,我建議您學習更全面的資源之一,例如Jim Wilson撰寫的Pluralsight的Core Java Fundamentals課程。

如前所述,代碼是最好的文檔。 嘗試通過編寫代碼來證明這一點,這就是我們在這里要做的。 以下是一個代碼示例,以證明上述觀點:無法從Java中的靜態方法訪問非靜態成員變量或方法:

class Hello {private static int aStaticVariable = 1;private int aNonStaticVariable = 2;private static void aStaticMethod() {System.out.println(aNonStaticVariable);aNonStaticMethod();}private void aNonStaticMethod() {System.out.println(aStaticVariable);}}

$ javac Hello.java

Hello.java:11: non-static variable aNonStaticVariable cannot be referenced from a static contextSystem.out.println(aNonStaticVariable);^Hello.java:12: non-static method aNonStaticMethod() cannot be referenced from a static contextaNonStaticMethod();^2 errors

您可以看到,即使您可以通過非靜態方法訪問靜態成員 ,但事實并非如此。 如果嘗試訪問非靜態變量或方法甚至嵌套類,則編譯器將引發錯誤“無法從靜態上下文引用非靜態方法XXXX” 。

因此,現在最大的問題是如何在Java中通過main()方法等靜態方法訪問非靜態變量或調用非靜態方法? 讓我們找出答案。

如何從Java中的靜態方法訪問非靜態變量/方法

嗯,有一種通過創建實例從Java靜態上下文訪問任何非靜態成員的合法方法。 您需要首先創建一個類的對象,該類的
您要訪問的非靜態成員 或非靜態方法 。 一旦這樣做,編譯器將不再打擾您,如以下示例所示:

public class Hello {private static int aStaticVariable = 1;private int aNonStaticVariable = 2;private static void aStaticMethod() {Hello object = new Hello();System.out.println(object.aNonStaticVariable);object.aNonStaticMethod();}private void aNonStaticMethod() {System.out.println(aStaticVariable);}}

$ javac Hello.java

您可以看到,使用Hello類的對象訪問非靜態變量和方法后,所有編譯時錯誤都消失了。 這是從靜態上下文(例如,靜態初始化程序塊,靜態方法或Java中的嵌套靜態類)訪問非靜態變量/方法的正確方法。 看到
Java:更多細節的核心平臺 。

這就是關于非靜態方法是否可以訪問Java中的靜態變量或方法的全部內容。 當然,它們可以,但事實并非如此,即您不能從靜態上下文(即靜態方法)訪問非靜態成員。 從靜態方法訪問非靜態變量的唯一方法是創建該變量所屬類的對象。

這種困惑是您在核心Java面試以及核心Java認證(例如OCAJP和OCPJP考試)上看到此問題的主要原因。 您將基于OCAJP上的靜態概念發現很多問題,因此,通過閱讀一本好的Java核心書籍(例如Mala Gupta的《 OCAJP學習指南》)來準備好該主題非常重要。 即使您沒有準備考試,這也是學習核心Java基礎知識的一本好書。

進階學習

Java基礎知識第1部分和第2部分

Head First Java第二版

Whizlabs Java 8考試模擬器

翻譯自: https://www.javacodegeeks.com/2017/10/can-non-static-method-access-static-variablemethod-java.html

總結

以上是生活随笔為你收集整理的非静态方法可以访问Java中的静态变量/方法吗?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。