亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

關于靜態方法不能調用非靜態方法的問題

基本前提:靜態方法不能調用非靜態成員(成員方法與成員變量)

代碼:一個main方法可以這么寫:

class?Demo{
????public?static?void?main(String[]?args){
????????Demo?d?=?new?Demo();
????????}
????}

解釋:這里用的是Demo的內置無參構造函數,構造函數也是一個普通函數,也沒有被static修飾,所以從這里理解構造函數只是一個成員函數

問題:那么,作為靜態函數的main,是如何調用作為成員函數的構造函數的?

正在回答

5 回答

這里是創建一個對象,不僅僅是調用構造函數,如果說連對象都不能創建了,還談什么寫程序了
0 回復 有任何疑惑可以回復我~
#1

Antique 提問者

這個我是理解的。只是邏輯上搞不通,實在是難受
2017-08-27 回復 有任何疑惑可以回復我~
#2

Antique 提問者

創建對象要不就是通過構造函數要不就是靜態工廠方法,實際上最后用的還是構造函數,構造函數也是普通函數而已啊
2017-08-27 回復 有任何疑惑可以回復我~
#3

Antique 提問者

非常感謝!
2017-09-05 回復 有任何疑惑可以回復我~
#4

Antique 提問者

這個問題我已經找到正確答案了,麻煩看下問題最下面我的回答
2017-09-05 回復 有任何疑惑可以回復我~
查看1條回復

這個問題我算是終于找到正確答案了,如下:

參考鏈接:http://rednaxelafx.iteye.com/blog/652719

準確來說,構造方法(Constructor)實際上與普通方法(Method)是兩個東西,大概翻譯過來的時候為了大家容易上手就說是構造方法了。其實這有點混淆了。

從JVM上看,靜態static方法與構造方法(constructor)在內聯優化的時候,效果是一樣的,不過這不能說構造方法就是static。

其實最后還是不太清楚,JVM原理還是不太清楚,不過基本可以理解。

0 回復 有任何疑惑可以回復我~

靜態屬性調用的時候不能創建實例,非靜態屬性必須通過創建的實例才能調用

0 回復 有任何疑惑可以回復我~

為排除main程序的特殊性,再貼一段非main函數Demo:如下:

package?com.antique;

public?class?test?{
????public?static?void?main(String[]?args){
????????callDemo();???????????//?靜態方法調用靜態方法
????}

????public?static?void?callDemo(){
????????Demo?d?=?new?Demo();??????????//靜態方法調用別人的構造函數
????}

}

class?Demo?{

????public?Demo(){??????????//構造函數?普通成員函數
????????System.out.println("Constructor?is?called");
????}

}


0 回復 有任何疑惑可以回復我~

這是main函數,不一樣

0 回復 有任何疑惑可以回復我~
#1

Antique 提問者

我下面貼了另外一段不是main的,也是可以的
2017-08-27 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

關于靜態方法不能調用非靜態方法的問題

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號