頁:
[1]
有個java ,public and static 問題
本帖最後由 b2581167 於 2018-4-16 01:30 AM 編輯最近在學java因為之前已經學過c跟c++,
所以有先入為主的觀念,害我有點混淆
以下允許我用c的講法……
第一個問題是java每個函數都是被類別包著,
為什麼類別也可以定義static?
他有定義跟沒定義的差別是?
而且不只類別可以定義連函數也可以?
我知道在c裡面static 就很像全域的意思
但是在c裡面static只限用在變數上
我不了解java什麼都可以加static的差別在哪
一般來說控制類別中的函數能不能給外面使用
不是看public 或private 嗎?那加static 的意義是?
第二就是在c中有public private protected
但有聽說java中有四種 他們的差異是?
那他默認是哪一種?
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div> 首先,static 關鍵字的意義,Java 跟 C 很不一樣,所以你在 Java 裡面看見 static 的時候,先把 C 學到的東西忘掉吧。
Java 裡面有類別 Class 跟物件 Object 的概念,前幾天剛好有寫到:如果還不很清楚類別跟物件的差別,可以去想像紅龜粿的製作過程。class 就是那個模版,把麵糰塞進去敲一下就是一個物件(Object, 有時候叫實體 instance) 出來。
簡單來說 static 的變數跟著類別,非 static 的變數跟著物件。用上面的例子,static 的變數就是刻在模版上面class Foobar {
public static String sName = "Foobar";
public static String mName = "blah";
}
System.out.println(Foobar.sName); // "Foobar", 即使沒有產生任何 instance 也能直接拿這個類別的變數來用
Foobar a = new Foobar();
Foobar b = new Foobar();
a.mName = "A";
b.mName = "B"; System.out.println(a.sName); // "Foobar"
System.out.println(b.sName); // Foobar
System.out.println(a.mName); // "A"
System.out.println(b.mName); // "B"
a.sName = "AAA";
System.out.println(a.sName); // "AAA"
System.out.println(b.sName); // "AAA"public / private 用來修飾存取的權限,跟 static 與否是分開的概念。先把 static 的觀念釐清之後,對物件系統或類別繼承會比較清楚,這時候回頭看 public/protected/private 就會瞬間秒懂了。
「加 static 的差別在哪」大致上可以這麼回答:你如果覺得某個變數是某個類別,以及它所衍生出來的物件都要共有的,就把它加上 static 掛在類別上面。如果你覺得是每個衍生出來的徒子徒孫(物件)要分開區別的,就不要加上 static。
java 中的四種就是 public/protected/private/不寫用預設值,可以 google "Controlling Access to Members of a Class"
最後,在 inner/nested class 的情況下,才需要把它宣告成 static class。這已經是一個滿細微的議題了,我建議現在不要花時間理解這個 XD,我可以先說結論滿足好奇心:static class 的作用,跟一個獨立檔案的 class 檔是等價的,只是它寫的位置比較特別,寫在另外一個 class 檔案裡面而已。...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div> C, 有 static function. 可能只是你沒有用到.
不過, 與JAVA的static, 行為不同. 學到東西了!!謝謝分享~~ 兩個之間的差別,也可以參考這篇文章...
stackoverflow.com/questions/45560770/how-access-specifier-affect-static-methods<br><br><br><br><br><div></div>
頁:
[1]