靜態方法不能呼叫非靜態方法的原因
1.靜態方法優先於物件被建立
2.非靜態方法通過物件建立
3.靜態方法在記憶體中建立後,還沒有建立物件,所以不能呼叫非靜態方法和變數。
//null 型別呼叫靜態方法,輸出什麼?
public class Test{
private static void Print(){
System.out.println("Print()");
}
public static void main(String[] args) {
((Test)null).Print();
}
}
問輸出什麼?
//輸出是Print()
因為:1.Print()是靜態方法,不用物件也可以呼叫,((Test)null).Print() 這種格式也可以。
2.null 可以轉換成任意引用型別
3.((Test)null).Print() 相當於 Test t = null; t.Print();
4.如果將Print()方法的修飾符去掉,執行時會報空指標異常,因為是在靜態方法中呼叫非靜態方法。
相關推薦
【PHP】靜態方法呼叫非靜態方法和靜態呼叫非靜態方法程式碼解讀
static 關鍵字用來修飾屬性、方法,稱這些屬性、方法為靜態屬性、靜態方法。 在類的靜態方法中是不能直接以$this->test()的方式呼叫非靜態方法的。還有框架中靜態的呼叫非靜態方法是怎麼回事??? 。。。 算了,不知道說啥 具體為啥看程式碼註釋: <?ph
Java靜態方法呼叫非靜態方法
靜態方法(static mehod)不能直接呼叫非靜態方法(non-static method),可以通過一個物件的引用傳入靜態方法中,再去呼叫該物件的非靜態方法。在主函式(static方法)中,經常建立某個類的例項,再利用其引用變數呼叫他的非靜態方法。 public cl
java 靜態方法呼叫非靜態內部類報錯
Error: No enclosing instance of type *** is accessible. Must qualify the allocation with an enclosing instance of type *** (e.g. x.new A
mfc中靜態函式呼叫非靜態成員
靜態函式中呼叫非靜態,首先要獲取到對話方塊指標,最簡單最不推薦的方法是定義個全域性變數儲存對話方塊指標,通用性最強的是把指標作為靜態函式的引數傳進來。取巧的方法,如果對話方塊是主對話方塊可以AfxGetApp->GetMainWnd獲取指標。如果靜態函式不是執行在主執行緒,不能直接呼叫Upda
C++Static 靜態函式呼叫非靜態函式
test.h class test : { public: test(void); ~test(void); public: //你的其他函式 ... ..
靜態方法不能呼叫非靜態方法的原因
1.靜態方法優先於物件被建立2.非靜態方法通過物件建立3.靜態方法在記憶體中建立後,還沒有建立物件,所以不能呼叫非靜態方法和變數。//null 型別呼叫靜態方法,輸出什麼?public class Test{private static void Print(){System
java靜態方法不能呼叫非靜態方法的原因
靜態方法是屬於類的,即靜態方法是隨著類的載入而載入的,在載入類時,程式就會為靜態方法分配記憶體,而非靜態方法是屬於物件的,物件是在類載入之後建立的,也就是說靜態方法先於物件存在,當你建立一個物件時,程式為其在堆中分配記憶體,一般是通過this指標來指向該物件。靜態方法不依
java中靜態方法為什麼不可以呼叫非靜態方法
重點:static關鍵字的修飾成員變數,成員方法和物件無關。 static修飾的內容是隨著類的載入而載入的,且只加載一次。 它儲存於一塊固定的記憶體區域(靜態區),所以,可以直接被類名呼叫。 它優先於物件存在,所以,可以被所有物件共享。 static可
java中靜態方法中為什麼不能使用this、super和直接呼叫非靜態方法
這個要從java的記憶體機制去分析,首先當你New 一個物件的時候,並不是先在堆中為物件開闢記憶體空間,而是先將類中的靜態方法(帶有static修飾的靜態函式)的程式碼載入到一個叫做方法區的地方,然後再在堆記憶體中建立物件。所以說靜態方法會隨著類的載入而被載入。當你new一個物件時,該物件存在於對
(23)物件呼叫非靜態方法執行過程、靜態方法呼叫記憶體執行過程
public class Person{ private String name; private int age; private static String country="cn
為什麼靜態方法無法呼叫非靜態成員(方法和變數)
當New 一個物件的時候,並不是先在堆中為物件開闢記憶體空間,而是先將類中的靜態方法(帶有static修飾的靜態函式)的程式碼載入到一個叫做方法區的地方,然後 再在堆記憶體中建立物件。所以說靜態方法會隨著類的載入而被載入。當你new一個物件時,該物件存在於對記憶體中,this
Qt for android如何在靜態java類中呼叫非靜態方法
一般正常情況開發下,在java的靜態類方法中,呼叫一個非靜態方法是會報錯,編譯不通過的,但是在Qt呼叫Java正常函式會不生效,不會出現任何異常提示,反正呼叫了就跟沒呼叫一樣,這個是我再Qt5.6中測試過的效果,現在Qt5.9不知道修復了這個問題沒有,反正現在
為什麼從靜態方法裡不能呼叫非靜態的方法和變數
非靜態的方法可以呼叫靜態的方法,但是靜態的方法不可以呼叫非靜態的方法。 類的靜態成員(變數和方法)屬於類本身,在類載入的時候就會分配記憶體,可以通過類名直接去訪問;非靜態成員(變數和方法)屬於類的物件,所以只有在類的物件產生(建立類的例項)時才會分配記憶體,然後通過類的物件(例項)去訪問。 在一個類的靜態成
C++ 靜態成員函式呼叫非靜態成員函式方法
#include <stdio.h> #include <windows.h> class Class; typedef struct { Class *pClass; int x; int y; }ParaNode; class Cl
為什麼不能從靜態的方法裡面呼叫非靜態方法,或變數?
程式最終都將在記憶體中執行,變數只有在記憶體中佔有一席之地時才能被訪問。類的靜態成員(變數和方法)屬於類本身,在類載入的時候就會分配記憶體,可以通過類名直接去訪問;非靜態成員(變數和方法)屬於類的物件,所以只有在類的物件產生(建立類的例項)時才會分配記憶體,然後通過類
靜態方法中呼叫非靜態方法
我們都知道,靜態static方法中不能呼叫非靜態non-static方法,準確地說是不能直接呼叫non-static方法。但是可以通過將一個物件的引用傳入static方法中,再去呼叫該物件的non-static方法。 其實這個事實的應用很經常,以至於我
Java靜態方法 與 非靜態方法(實例方法)的區別
外部類 允許 靜態成員 靜態 成員 訪問 靜態成員變量 ava 實例方法 靜態方法與實例方法的異同 1.在外部類 調用靜態方法時,有兩種方式:(1)類名.靜態方法()(2)類的對象.靜態方法() ;也就是說調用靜態方法時可以不用創建對象。 調用實例
C#靜態方法與非靜態方法比較
使用 特殊 his 差異比較 method 分配內存 成員方法 關鍵字 ted c#靜態方法與非靜態方法比較: 一、靜態方法:使用static修改的方法就是靜態方法,否則就是非靜態方法。 二、差異比較: 第一:C#靜態成員:(1)靜態成員屬於類所有,非靜態成員屬於類的實
Java靜態屬性、靜態方法、非靜態屬性、非靜態方法的繼承問題簡單了解
java 靜態方法 靜態屬性 非靜態屬性 非靜態方法 package com.book.web.controller; /** * 父類 * @author liweihan * */ public class Parent { public String normalSt
構造方法的作用及靜態方法與非靜態方法的區別
margin mar 靜態方法 pro pfx doc rdl ref blank 可X7巧蛹勞5P3剄固巡久6http://shufang.docin.com/rgenh624 1品rleg9p頓慰恍http://shequ.docin.com/ibyrd96376 4C