public class Test {
public static Test get_instance() {
return new Test();
}
}
public class Test {
public static Test current;
public static Test get_instance() {
current = new Test();
return current ;
}
}
第一個例子里通過靜態方法直接回傳實體化,第二個例子里把先靜態類屬性存當前實體,再回傳這個靜態類屬性。
這兩種不同的實體化,對外層呼叫get_instance方法的程式來說獲取到的實體有什么區別么?
uj5u.com熱心網友回復:
對呼叫者來說是沒啥區別的,每次獲取的物件都是新的.但估計沒有人用第二種寫法,毫無意義的寫法,除非你還有其他用,不然那個靜態變數毫無意義.
uj5u.com熱心網友回復:
第二種實體化方式沒有什么意義,除非你本身想設計為單實體模式(但是你這里并不是單模式)至于第一種,也分情況,如果Test本身的構造方式為私有或者回傳的物件還有什么其它特殊的設定,那么用個方法來封裝是可以的;如果只是單純的new一個物件回傳,那意義也不到,呼叫者直接new就好了,沒必要多一層方法呼叫。
uj5u.com熱心網友回復:
沒啥區別,看你是不是想用單例模式,如果是就用一個方法包裝下進行回傳單例uj5u.com熱心網友回復:
就實體化本身是沒啥區別的,每次呼叫函式,都會生成新的物件。但是,第二種方法,由于存在一個public static 的 current 屬性,那么,如果你的程式邏輯不需要創建新物件的時候,可以直接訪問這個屬性物件。
uj5u.com熱心網友回復:
第二中有一個全域的current,可以不用每次new出來,用Test.currentuj5u.com熱心網友回復:
對呼叫者來說沒區別uj5u.com熱心網友回復:
那個靜態變數確實有其他用處,類似單例的效果,方便以后隨時拿到實體。
我想問的主要是第一種回傳創建出來的實體和第二種回傳靜態變數實體,實體是不是存在不同的地方(對記憶體底層不是太了解)。
第一種方法里實體創建出來的是個區域實體變數,方法結束后就銷毀了,第二種是關聯了靜態變數的,對方法呼叫者來說有沒有在改屬性值的時候需要注意的。
uj5u.com熱心網友回復:
一個一行代碼,簡單第二個2行代碼,但是容易。
uj5u.com熱心網友回復:
這么說吧,第一種你每次調函式都會新創建一個物件給你。第二種,你如果直接用current呢,顯然回NPE,但是當你先調一次get_instance后呢,你每次就只需要用current就好。這樣的話性能回好一些uj5u.com熱心網友回復:
物件都在堆上,但參考在不同的地方而已,第一種自然只存在堆疊記憶體中,用完就銷毀了,第二種靜態變數的參考在方法區,不存在銷毀一說,倒沒啥大的區別,還有這個靜態變數有用的話,如果實時性需求高的話,要考慮執行緒安全問題
uj5u.com熱心網友回復:
第二種方法,多了兩步操作,1、putstatic 2、getstatic這兩步操作會增加對jvm運算元堆疊的操作,先消費堆疊頂的一個資料,然后再壓入堆疊頂該值;而且這種才做在多執行緒并發情況下是執行緒不安全的
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/11243.html
標籤:Java EE
上一篇:使用maven打jar包為什么很小?網上設定pom都設定了
下一篇:求助
