如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
理解java和python类变量理解java和python类变量最可怕的不是犯错而是一直都没发现错误,直到现在我才知道自己对类变量的理解有问题。大概可能也许是因为不常用类变量的原因吧,一直没有发现这个问题。最近在看C++时才知道了类变量到底是什么?以前我一直觉得类变量和成员变量的唯一区别是类变量可以通过类名直接访问,是静态的。而成员变量需要实例化一个类后通过实例来访问。万万没想到忽视了类变量在一个类中只有一个,各个实例中的都是同一个的.,在一个实例中修改会影响其他实例中的类变量...(虽然平常也没有因为这个而引起什么bug,但是还是要补上认知的漏洞)。这里有用java和python写的2个例子:publicclassOO{publicstaticStrings;publicStringm;static{s="Ever";}publicstaticvoidmain(String[]args){OOo1=newOO();OOo2=newOO();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/pythonclassB:defwhoami(self):print("__class__:%s,self.__class__:%s"%(__class__,self.__class__))classC(B):count=0def__init__(self):super(C,self).__init__()self.num=0defadd(self):__class__.count+=1self.num+=1defprint(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()