理解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編程入門必備的知識
基礎知識是新手學習一門新技術的必須掌握的,下面內容由小編為大家介紹初學java編程入門必備的知識,供大家參考!01、Java編程出現的背景1991年Sun公司的JamesGosling等人開始開發名稱為Oak的語言。希望用於控制嵌入在有線電視交換盒、PDA等的微處理器,但卻沒有取得...
-
如何使用java
Java是一種可以撰寫跨平台應用程序的面向對象的`程序設計語言。以下是小編為大家搜索整理的如何使用java,希望能給大家帶來幫助!更多精彩內容請及時關注我們應屆畢業生考試網!...
-
jsp向cookie寫入中文亂碼的解決辦法
jsp在向cookie寫入中文亂碼大家是怎麼處理的呢?下面是小編給大家提供的解決辦法,大家可以參考閲讀,更多詳情請關注應屆畢業生考試網。在jsp中對中文的處理有一點不好就可能出現亂碼了,下面我來給大家介紹jsp中向cookie寫入中文實現程序有需要了解的`朋友可參考。Co...
-
java中反射機制
導語:Java是一門面向對象編程語言,不僅吸收了C++語言的各種優點,還摒棄了C++裏難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特徵。下面我們來看看java中反射機制,希望對大家有所幫助。Java中什麼是反射機制:(JavaReflactioninaction)Java反射...
相關文章
- Python和JavaScript語言轉換的常用工具
- java使用ConcurrentHashMap和計數器實現鎖的方法
- java與javascript之間json格式數據互轉詳解
- Java和Python有什麼區別
- Java Tomcat和激活MyEclips的深入理解
- Happy Dragon Boat Festival英語作文
- 中學英語have and eye on,have an eye to,have an eye for這三
- java如何利用java.net.URLConnection發送HTTP請求
- php和javascript之間變量的傳遞實現代碼
- java環境變量path和classpath的配置過程