理解java和python類變數
最可怕的不是犯錯而是一直都沒發現錯誤,直到現在我才知道自己對類變數的理解有問題。
大概可能也許是因為不常用類變數的原因吧,一直沒有發現這個問題。最近在看C++時才知道了類變數到底是什麼?
以前我一直覺得類變數和成員變數的`唯一區別是類變數可以通過類名直接訪問,是靜態的。而成員變數需要例項化一個類後通過例項來訪問。
萬萬沒想到忽視了類變數在一個類中只有一個,各個例項中的都是同一個的,在一個例項中修改會影響其他例項中的類變數...(雖然平常也沒有因為這個而引起什麼bug,但是還是要補上認知的漏洞)。
這裡有用java和python寫的2個例子:
public class OO{ public static String s; public String m; static{ s = "Ever"; } public static void main(String[] args){ OO o1 = new OO(); OO o2 = new OO(); o1.m = "Once"; //不同例項中的類變數值/地址相同 tln(o1.s); tln(o2.s); tln(Code()); tln(Code()); o1.s = "123"; tln(o2.s);//更改類變數後影響了其他例項 tln(Code()); tln(Code());//NullPointerException //成員變數具有不同的地址 }}
#!/bin/pythonclass B: def whoami(self): print("__class__:%s,self.__class__:%s"%(__class__,self.__class__))class C(B): count = 0 def __init__(self): super(C,self).__init__() = 0 def add(self): __class__t += 1 += 1 def print(self): print("Count_Id:%s,Num_Id:%s"%(id(__class__t),id())) print("Count:%d,Num:%d"%(__class__t,))i1 = C()i2 = C()mi()mi()#i1的成員變數增加了1次,i2的成員變數增加了2次,類變數共增加了3次()()()t()t()
-
編寫更好的Java單元測試的7個技巧
測試是開發的一個非常重要的方面,可以在很大程度上決定一個應用程式的命運。良好的測試可以在早期捕獲導致應用程式崩潰的問題,但較差的測試往往總是導致故障和停機。雖然有三種主要型別的軟體測試:單元測試,功能測試和整合測試,但是在這篇博文中,我們將討論開發人員...
-
Java語法基礎for語句練習
本文是本站小編搜尋整理的關於Java語法基礎for語句練習,供參考學習,希望對大家有所幫助!想了解更多相關資訊請持續關注我們應屆畢業生考試網!控制語句——for練習語句的巢狀應用累加求和,計數器迴圈巢狀一、語句的巢狀應用語句巢狀形式。其實就是語句中...
-
Java中的物件與引用知識詳解
在Java中,有一組名詞經常一起出現,它們就是“物件和物件引用”,很多朋友在初學Java的時候可能經常會混淆這2個概念,覺得它們是一回事,事實上則不然。今天我們就來一起了解一下物件和物件引用之間的區別和聯絡。以下僅供參考!1.何謂物件?在Java中有一句比較流行的話,叫...
-
Java 正則表示式
Java是一門程式語言,那麼大家知道Java正則表示式是怎樣的呢?下面一起來看看!Java正則表示式正則表示式定義了字串的模式。正則表示式可以用來搜尋、編輯或處理文字。正則表示式並不僅限於某一種語言,但是在每種語言中有細微的差別。正則表示式例項一個字串其...
相關文章
- Java和Python有什麼區別
- java使用ConcurrentHashMap和計數器實現鎖的方法
- Happy Dragon Boat Festival英語作文
- php和javascript之間變數的傳遞實現程式碼
- java環境變數path和classpath的配置過程
- Python和JavaScript語言轉換的常用工具
- 中學英語have and eye on,have an eye to,have an eye for這三
- java與javascript之間json格式資料互轉詳解
- java如何利用java.net.URLConnection傳送HTTP請求
- Java Tomcat和啟用MyEclips的深入理解