理解java和python类变量以及类的成员变量
程序员文章站
2024-03-08 16:50:58
最可怕的不是犯错而是一直都没发现错误,直到现在我才知道自己对类变量的理解有问题。
大概可能也许是因为不常用类变量的原因吧,一直没有发现这个问题。最近在看c++时才知道了类...
最可怕的不是犯错而是一直都没发现错误,直到现在我才知道自己对类变量的理解有问题。
大概可能也许是因为不常用类变量的原因吧,一直没有发现这个问题。最近在看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"; //不同实例中的类变量值/地址相同 system.out.println(o1.s); system.out.println(o2.s); system.out.println(o1.s.hashcode()); system.out.println(o2.s.hashcode()); o1.s = "123"; system.out.println(o2.s);//更改类变量后影响了其他实例 system.out.println(o1.m.hashcode()); system.out.println(o2.m.hashcode());//nullpointerexception //成员变量具有不同的地址 } }
#!/bin/python class 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__() self.num = 0 def add(self): __class__.count += 1 self.num += 1 def print(self): print("count_id:%s,num_id:%s"%(id(__class__.count),id(self.num))) print("count:%d,num:%d"%(__class__.count,self.num)) i1 = c() i2 = c() i1.whoami() i2.whoami() #i1的成员变量增加了1次,i2的成员变量增加了2次,类变量共增加了3次 i1.add() i2.add() i2.add() i1.print() i2.print()
以上就是本文的全部内容,明天假期就结束了,希望大家积极地投入到工作中,继续关注小编为大家分享的文章。
推荐阅读
-
理解java和python类变量以及类的成员变量
-
python中类变量与成员变量的使用注意点总结
-
python中类变量与成员变量的使用注意点总结
-
基于java变量和作用域以及成员变量的默认初始化(详解)
-
对Python 获取类的成员变量及临时变量的方法详解
-
深入理解PHP内核(十四)类的成员变量及方法,深入理解内核_PHP教程
-
Java中变量之局部变量、本类成员变量、父类成员变量的访问方法
-
python类和函数中使用静态变量的方法
-
JavaEE基础day02 1.定义Java中的变量 四类八种 2.变量定义和使用的注意事项 3.数据类型的转换、强制数据类型转换4.算数运算符、比较运算符、逻辑运算符、赋值运算符、三元运算符
-
Java -- 父类和子类拥有同名的成员变量的情况