实验四Java_《Java实验四》
實驗4--附錄三代碼/*問題如下:
編譯如下代碼,分析結果;將“注釋這行”所在的行注釋,再將
注釋的call2方法和main方法中的“StaticTest.call2(obj);”方
去掉注釋,再次編譯,觀察結果分析其原因。
回答如下:
(1)在沒有去掉注釋之前進行編譯,會發生如下錯誤:
========================================================================
StaticTest.java:13: 錯誤: 無法從靜態上下文中引用非靜態 方法 nonstaticmethod()
nonstaticmethod();//注釋這行.
^
1 個錯誤
===========================================================================
這個錯誤說明:在用類名直接調用靜態方法時可以的,但在此例中(沒有去掉代碼中的注釋),
直接用類名調用了call1方法(StaticTest.call1();)但是在call1方法中有調用到了靜態的
staticmethod()方法,這是沒錯的,但是在call1方法中又調用了非靜態的nonstaticmethod
方法。此時編譯器出現報錯提示如上。
從而也就是說:靜態的方法可以有類名直接調用,非靜態的方法不能有類名調用。
(2)按照題目要求的做法后,在編譯不會出現問題;
運行結果是:
靜態方法被調用
非靜態方法被調用
非靜態方法被調用
分析運行結果如下:
首先在主函數中創建了一個StaticTest類的對象obj,然互直接由類名調用靜態方法
call1,在call1方法中又調用到了靜態的staticmethod方法,然后輸出(1)“靜態方法被調用”。
接著用類名直接調用了靜態的方法call2,并把對象obj傳遞給靜態方法的形式參數o1.在
靜態的call2方法中,傳遞過來的對象調用了非靜態的方法nonstaticmethod,此時便打印輸出
了(2)“非靜態方法被調用”,緊接著又在靜態的call2方法中創建了一個本類對象o2,然后用o2對象
也調用了非靜態的方法nonstaticmethod.便輸出了(3)“非靜態方法被調用”
從以上分析(和自己在代碼中的測試)來看:可以總結的是,靜態方法可以由類名直接調用,
也可以由對象調用,而非靜態的方法只能由對象調用*/
public classStaticTest
{public static voidcall1()
{
staticmethod();//nonstaticmethod();//注釋這行.
}public static voidcall2(StaticTest o1)
{
o1.nonstaticmethod();/**o1.staticmethod();
*這一句是測試用的,是用于測試靜態的方法也能由對象直接調用
*如果加上這一句,編譯運行都沒有錯,運行的結果是:
* 靜態方法被調用
* 非靜態方法被調用
* 靜態方法被調用
* 非靜態方法被調用
*則說明了靜態的方法也能被對象直接調用。*/StaticTest o2= newStaticTest();
o2.nonstaticmethod();
}public voidnonstaticmethod()
{
System.out.println("非靜態方法被調用");
}public static voidstaticmethod()
{
System.out.println("靜態方法被調用");
}public static voidmain(String[] args)
{
StaticTest obj= newStaticTest();
StaticTest.call1();
StaticTest.call2(obj);
}
}
總結
以上是生活随笔為你收集整理的实验四Java_《Java实验四》的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: excel导出经验
- 下一篇: [前台]---js中去掉双引号或者单引号