日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于static方法

發布時間:2025/3/15 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于static方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

方法的多態static理解
要強調的是,,多態性只發生于方法,而不發生于域.并且,對于方法,只有那些非static與非final方法才具有多態性.

這里討論的是static方法不能發生多態.值得注意的是, 所謂的static方法不能多態指的是:override的方法本身是不是static的,而不是指調用override方法的方法是不是static 的!比如以下程序:
class Father {
public void act() {
System.out.println("Father.act()");
}
}

class Son extends Father {
public void act() {
System.out.println("Son.act()");
}
}
public??? class??? Test {
public static??? void test(Father i) {??? //static方法
i.act();
}
public static void main(String[] a)??? {
Son son = new Son();
test(son);

}
}??? //輸出結果為:Son.act(),如果static不能多態,那結果不就應該是Father.act()嗎?

其實,就象上面說的.我們要考慮的是 的act()方法是不是static,有沒有多態,而不是調用的方法(test())是不是static的
這跟test方法是否static無關,若把兩個act方法都修改成static,則輸出結果就是 Father.act(),因為static 方法不能多態
static方法(與隱式static方法)

??????? static方法就是沒有this的方法.在static方法的內部不能調用非靜態方法,反過來,非靜態方法倒是可以調用static方法.
????? !!! 值得注意的是:這里說的是在static方法內部,不能直接調用非static方法,但可以通過生成對象來調用非靜態方法.
??????? 在static方法內部,也不可以調用非static變量,其實道理很簡單,因為static是面向全局的,相當于全局方法,不可能只針對某個類中的一般變量而使用.

??????? 在static與非static方法內部都不能聲明static變量.(全局變量),因為,在方法內聲明的變量都是局部變量,不可能在里面定義一個全局變量.

=====了解上面的知識后,你可能會發現有一個特例:在編程思想第四版P157上,(還有很多地方都曾經說過)構造器隱式的就是static的!然而在構造器內部為什么可以直接調用非靜態方法??
??????????? static方法就是沒有this的方法.在static方法的內部不能調用非靜態方法,反過來,非靜態方法倒是可以調用static方法.
???? !!! 值得注意的是:這里說的是在static方法內部,不能直接調用非static方法,但可以通過生成對象來調用非靜態方法.
?????? 在static方法內部,也不可以調用非static變量,其實道理很簡單,因為static是面向全局的,相當于全局方法,不可能只針對某個類中的一般變量而使用.

?????? 在static與非static方法內部都不能聲明static變量.(全局變量),因為,在方法內聲明的變量都是局部變量,不可能在里面定義一個全局變量.

=====了解上面的知識后,你可能會發現有一個特例:在編程思想第四版P157上,(還有很多地方都曾經說過)構造器隱式的就是static的!然而在構造器內部為什么可以直接調用非靜態方法??
????? 所謂顯式隱式static,是指類在實例化時,系統會執行的代碼
比如
public class StaticTest {
?????
????? { //這樣沒有static關鍵字的,叫隱式static,系統執行完顯式static后會接著執行隱式static的代碼
????????? System.out.println("hide static");
????????? show(); // 這個方法不是static的,但是在這里不會出錯
????? }
?????
????? static { //這樣有static關鍵字的叫顯式static,系統會先執行顯式static的代碼
????????? System.out.println("static");
????????? //show(); //這個方法不是static的,所以會出錯
????????? }
?????
????? public StaticTest() { //執行完顯式和隱式static后,系統會執行構造器的代碼,因為構造器沒有static,但也會被執行,跟隱式static一樣,所以書上就把它說成隱式static了
????????? System.out.println("constuctor");
????? }
?????
????? public void show() {
????????? System.out.println("show");
????? }
?????
????? public static void main(String[] args) {
????????? new StaticTest();
????? }
?????
}

所以所謂顯式隱式static,只是對于類實例化執行代碼的先后順序而言的,從某種意義上說,不帶static的都可以叫隱式static,隱式static可以調用隱式static

轉載于:https://www.cnblogs.com/lianglee/archive/2010/06/14/1758164.html

總結

以上是生活随笔為你收集整理的关于static方法的全部內容,希望文章能夠幫你解決所遇到的問題。

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