1樓:匿名使用者
靜態的static屬於類的,可以直接用引用。類的class位元組碼檔案一載入到記憶體中就可以用了,但是非靜態的non-static是屬於物件的,必須用類申明瞭物件obj,才能用物件obj引用。你在靜態方法裡引用非靜態的方法,當然不行了,這個時候例項物件都無,怎麼引用?
要麼宣告物件,通過物件引用;要麼把引用的非靜態方法申明成static的。
2樓:
setselectedtile不是靜態方法,所以不能這樣引用呀。
「無法從靜態上下文中引用非靜態方法」這個問題怎麼解決?
3樓:小小辣椒
解決方法:可以去除一般方法的static關鍵字(如果是main方法,則不能去掉static)。另外一種方法就是把需要引用的方法也設定成靜態方法。
用static修飾的方法稱為靜態方法,修飾變數則為靜態變數,又分別叫做類方法或者類變數。
靜態方法中不能直接呼叫非靜態方法。
因為非靜態方法不是獨立存在的,它是依附於物件存在——即只有申明瞭物件,才能通過物件呼叫。而靜態方法則可以直接通過類名呼叫,而不需要申明物件。因此直接引用非靜態方法就會出錯。
比如常見的main方法都是靜態的,必須由static修飾,因此在main方法裡呼叫類的其他非靜態方法,都是需要先申明物件,才能用。否則就會出現引用非靜態方法的錯誤。
因為我們知道靜態的方法可以在沒有建立例項時使用,而申明為非靜態的成員變數是乙個物件屬性,它只有在物件存在時引用,因此如果在物件未建立例項時我們在靜態方法中呼叫了非靜態成員方法自然是非法的,所以編譯器會在這種時候給各錯誤。
簡單說來,靜態方法可以不用建立物件就呼叫,非靜態方法必須有了物件的例項才能呼叫。因此想在靜態方法中引用非靜態方法是不可能的,因為它究竟引用的是哪個物件的非靜態方法呢?編譯器不可能給出答案,因為沒有物件啊,所以要報錯。
關於j**a的無法從靜態上下文中引用非靜態 方法
4樓:葛善翦孤容
由於tostring()方法是非靜態的,故不能直接通過類名引用,上面的這句**:
5樓:好好學生不打架
main方法是靜態的只能引用靜態的方法,你把print改成靜態或者在main方法裡new testarrsy().print(b)
錯誤: 無法從靜態上下文中引用非靜態 變數 this
6樓:網友
this 是指向當前物件的引用,需要物件例項化以後才能賦值。而靜態成員都是類所屬的,不需要對例項化就可以使用,所以在靜態上下文中引用this時可能其還未賦值,所以應不能這樣使用。
7樓:網友
this只能在類中的非靜態方法中使用,靜態方法和靜態的**塊中絕對不能出現this。
理由:靜態方法只能呼叫靜態方法/靜態變數,而非靜態方法可以呼叫靜態和非靜態方法/變數。)
無法從靜態上下文中引用非靜態方法
8樓:網友
你可以將add定義為靜態方法。
public static int add(int i,int j)下面的double也是一樣前面加上public static這樣的話就可以在任何地方以類名。方法名來使用了。
為什麼會這樣呢,是因為main方法是乙個靜態方法,是給jvm呼叫的,而你的add是q5的乙個方法,必須要先例項化出乙個q5物件。即new q5()
新手求教,為什麼j**a編譯的時候出現錯誤:無法從靜態上下文中引用非靜態變數name
9樓:尚學堂科技****
static protecthome()是靜態的,而name屬性是非靜態的,所以報錯。
處理方式:1、name前面加static
2、把方法中的static去掉。
10樓:人生的真諦灬
static(靜態修飾符),由它修飾的方法 protecthome()是乙個靜態方法,你在這個靜態方法裡面呼叫了乙個屬性name,但是這個屬性name它不是靜態屬性,必須也把他變成靜態屬性,也要用static修飾一下它,上面應該這樣宣告:static string name;
無法從靜態上下文中引用非靜態 方法 a()什麼意思
11樓:
就是說,你在類裡無法引用物件裡的東西。
靜態方法是屬於類的,而非靜態方法則屬於類的例項,也就是物件的,屬於兩個範圍,所以不能直接引用。
具體到你的這段**,test1類裡的a(),b()方法要在main裡呼叫,應該先生成test1的乙個例項物件,也就是要先test1 t = new test1(),然後用,來呼叫。
或者你把這兩個方法也改成靜態方法就可以在main裡直接呼叫(在public void間加static)。
建議你補一下物件導向基礎知識。
12樓:網友
public static void main()是靜態函式,根據靜態函式的定義,靜態方法不再是針對於某個物件呼叫,所以不能訪問非靜態成員,而 public void a() 屬於非靜態方法,不能在main中呼叫,如果需要呼叫,可以給a()函式加上static 修飾符。
13樓:網友
你把a()方法和b()方法修改新增乙個static就能直接呼叫a()和b()了。
否則你只能用;和;
或者new這個物件呼叫也行。test1 t=new test1();
至於為什麼不能直接呼叫,就像樓上兩位說的。
安卓和ios程式設計需要什麼語言,安卓和ios程式設計需要什麼語言
安卓需要linux系統,ios需要macos 作業系統。android是一種基於linux的自由及開放源 的作業系統。linux是一套免費使用和自由傳播的類unix作業系統,是一個基於posix和unix的多使用者 多工 支援多執行緒和多cpu的作業系統。它能執行主要的unix工具軟體 應用程式和網...
安卓手機無法解除安裝應用,安卓手機如何解除安裝軟體?
1 先備份資料。2 然後恢復出廠設定試試,恢復方法 進入設定 通用 更多設定 恢復出廠設定 還原所有設定就可以了 還原所有設定會丟失手機中的所有資料 3 如果恢復後一樣,嘗試刷機。4 如果刷機後還不行,建議送到官方售後服務中心,由工程師幫助檢查處理。這種情況很可能是系統檔案缺失,建議重啟手機後,再試...
手機不能開機安卓系統,安卓手機無法開機還能刷機嗎?
應該是電池壞了吧,換塊新的試試吧 安卓手機無法開機還能刷機嗎?可以的,只要是能開機,就能刷回。我上次就是升級系統失敗後,能開機,但進入不了桌面,我是拿去外面,叫別人幫我刷回的。以線刷寶為例說明操作過程。1 電腦安裝線刷寶。2 開機,連線電腦。安卓手機開機故障,手機無法開機怎麼辦 vivo手機開不了機...