java爲什麼要設計靜態方法?這樣設計的目的是什麼?

JoJo撒哇滴卡


我的理解是,如果不用static方法,那麼在調用的時候,是對象引用.f。如果使用static方法,就是類名.f。前者會把對象引用作為參數傳遞給方法,等價於f(參數1,參數2,...,對象引用),f方法內部會對對象引用,也就是this,指向的對象進行某些操作。但是並不是每個方法都需要對象引用指向的對象進行操作,這時候用static方法就更合適,節約一點堆內存,何樂不為。


KOJJ


1.靜態方法:整個類所共有的東西,就像一個家族都姓一個姓,

java類可以直接用類名點靜態方法名調用

2.實例方法:是類創建的對象特有的,就像你們家有多少錢,你叔叔家有多少錢

java類要new創建對象點方法名調用

3.Stastic為靜態變量,在一個類中的任何地方都可以調用,而final表示這個變量不能被修改。

靜態方法屬於類,和對象無關,也就是說不需要實例化可以直接使用。靜態方法更像是工具類提供的工具方法,對給定參數執行固定操作,平時用的系統方法可以直接使用的就是靜態方法,而scanner一類就需要自己來實例化才能使用

1 支持main函數這種機制,當然你也可以設想一個語言,沒有main函數,而是你通過一個類啟動,程序啟動時booter默認建立這個類的一個唯一實例,然後調用其run方法,也是可以的,或者說你也可以將整個jvm的運行看做是一個唯一的對象,形式問題

2 有些東東其實並不適合用面向對象的方式搞,比如開平方,Math.sqrt(x),你可以弄成x.sqrt()這種形式,但是如果要加一個開立方方法,是不是要將所有可能輸入的x都加上這個方法,那對現有庫的入侵性太強,不如做成函數,把x作為輸入,然後函數內部再根據x提供的接口來實現這個功能

3 和類綁定,這樣每次調用就不需要new對象。Scala裡面就沒有靜態這個概念,但是可與用object來代替

混在新時代


靜態方法是屬於類的,普通方法是屬於對象的,外部調用靜態方法可以直接用類名.方法名方式,不需要創建對象,而調用普通方法需要對象.方法名的方式,我認為這樣設計的目的是程序能夠更方便的調用方法,如果程序在多個地方多次調用共同的方法,就不用new很多對象了,多用於工具類。


不愛寫代碼的碼農


最簡單的一個思考:如果你每次都要有NEW一個對象然後才能調用方法,你想想反覆調用的情況下你是不是寫多了很多代碼?

靜態方法的存在說得簡單點就是為了讓人方法編程的。

其實從另一個角度看,別人寫好的API肯定不希望由你來創建對象,而是提供接口方法給你調用就行了。


分享到:


相關文章: