最可怕的不是犯错而是一直都没发现错误,直到现在我才知道自己对类变量的理解有问题。
大概可能也许是因为不常用类变量的原因吧,一直没有发现这个问题**。最近在看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类变量以及类的成员变量相关推荐

  1. python中的类的成员变量以及property函数

    1 python类的各种变量 1.1 全局变量 在类外定义的变量. 1.2 类变量 定义在类里面,所有的函数外面的变量.这个变量只有一份,是所有的对象共有的.在类外用"类."来引用 ...

  2. java枚举类与成员变量的关系_深入理解枚举类

    深入理解枚举 最近刚学习完JVM相关知识,想到枚举既然这么异类,那就从字节码角度来分析一下它.有关枚举的讲解,很多博客已经很详细了,这里我们就从字节码的角度重新来认识一下它. 枚举类是一种特殊的类,它 ...

  3. java 访问类变量_如何访问类的成员变量和方法

    在Java应用程序中,经常需要访问类的成员变量和方法,以实现程序的功能,请问应该如何访问类的成员变量和方法?在Java中通过类的实例(即对象)点(.)运算符来访问类的成员变量和方法,今天百分网小编为大 ...

  4. java面试题2 牛客:定义类中成员变量时不可能用到的修饰是

    懵逼树上懵逼果,懵逼树下你和我 第二题 定义类中成员变量时不可能用到的修饰是() A final B void C protected D static 一看到这道题,有点慌了,直接选c,很显然,我又 ...

  5. java box类定义三变量_01.类的成员变量:\n设计一个立方体类Box,定义三个属性,分别是长,宽,高。定义二个方法,分别计...

    01.类的成员变量:\n设计一个立方体类Box,定义三个属性,分别是长,宽,高.定义二个方法,分别计算并输出立方体的体积和表面积 答:java.util.Scanner; public class B ...

  6. 重学Java(035)——Java基础知识(类作为成员变量、接口作为成员变量、接口作为方法参数和返回值类型)

    学习内容:三种引用类型用法 一.类作为成员变量 二.接口作为成员变量 三.接口作为方法参数和返回值类型 实际的开发中,引用类型的使用非常重要,也是非常普遍的.我们可以在理解基本类型的使用方式基础上,进 ...

  7. [转载] 面试题:说说Java中接口、类、成员变量、成员方法、构造方法有哪些访问修饰符和他们的作用范围

    参考链接: Java中的访问修饰符 * 问题:说说Java中接口.类.成员变量.成员方法.构造方法有哪些访问修饰符和他们的作用范围 * 答:接口的访问修饰符只有public 1个 *    类的访问修 ...

  8. Java为枚举类创建成员变量_Java学习——枚举类

    Java学习--枚举类 摘要:本文主要介绍了Java的枚举类. 部分内容来自以下博客: https://www.cnblogs.com/sister/p/4700702.html https://bl ...

  9. java实验——设计复数类,成员变量包括实部和虚部,成员方法为实现复数相加。

    设计复数类,成员变量包括实部和虚部,成员方法为实现复数相加. package shiyan.shiyan8;import java.util.*;public class ComplexTest{st ...

最新文章

  1. MySQL 性能优化,优化设计及设计原则解读
  2. 深度学习和目标检测系列教程 6-300:目标检测Fast-RCNN架构
  3. 如何搭建一个内部组件共享平台
  4. java 解析 csv_在Java中将数据从CSV解析到数组
  5. 去授权美化版LM在线表白网页制作PHP源码
  6. 两个有序链表序列的交集
  7. 转载 用Python实现设计模式——工厂模式
  8. 关于sts与eclipse版本对应的插件图
  9. xshell5 Xshell6 商业版的破解版
  10. nginx工作原理与配置
  11. 幻读Java_关于幻读 - hellopretty - 博客园
  12. R语言-混合型数据聚类
  13. Java - MyBatis中的动态SQL是什么意思?
  14. 天锋w2019_华强北神机天锋W2019堪比真机,一不小心就被套路
  15. 【AGC001E】BBQ Hard(图论,dp)
  16. 端口映射工具 porttunnel
  17. 大浪淘金——下半年经济与资本市场展望(姜超6月25日于海通深圳策略会)
  18. 2 位谷歌顶级程序员的激荡人生,曾共用 1 台电脑写代码
  19. neo4j图形数据库第七弹——整合vis.js实现数据可视化
  20. 2020CCPC长春站后记

热门文章

  1. 现实版“神笔马良”!“90后”小伙把贫困村画成网红景点,网友:一个人带动整个村GDP...
  2. 引争议!硕导提议高校教师应多配偶,这样就能多生娃!高校的处理通报来了...
  3. 火星无人机「机智号」代码开源,1.2w人参与贡献
  4. 强烈推荐几个好玩的深度学习github项目分享!
  5. MATLAB_图形学_形态学课程_有川字的车牌牌扣出‘川’字以及车牌号码
  6. 如何使用OpenCV实现图像均衡???
  7. 技巧 | OpenCV中如何绘制与填充多边形
  8. AI技术在图像水印处理中的应用
  9. 草根seo站长利用网站赚钱的方法
  10. 为增进理解力而奋斗终身