首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

静态类、静态方法、静态变量的区别

引言 一直疑惑静态类、静态方法、静态变量的内存驻用情况。今天就写了个Demo来深入八一八他们的区别和注意点。...为了演示方便,方法名和变量名采取中文命名 先上结论 静态变量 只在类初始化时加载一次 静态方法和静态方法语法糖 实时加载里面的内容 只读属性 实时加载里面的内容 附有初始值的属性语法糖 只在类初始化时加载一次...(应该是set里面处理的,而不是get里面处理的) 静态有参方法 实时加载里面的内容 无图我还说什么?...------------------------普通 class----------------- TestCommonService.静态变量=111 TestCommonService.静态方法...---------------静态 class----------------- TestStaticService.静态变量=111 TestStaticService.静态方法()=111 TestStaticService

1.6K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    python实现静态变量

    在类中定义在函数外面的变量是类变量,不属于类的实例。利用它可以实现静态变量。 1. 意料之外的静态变量 在使用类变量的时候一定要小心,否则会得到意料之外的结果。...2. python动态语言特性 我们来看以下代码就明白了: class test(object): pass t = test() print(t.count) # 会出错,因为count不存在...= num f1 = Foo() f2 = Foo() Foo.set_count(1) print(f1.get_count(), f2.get_count()) # 结果: 1 1 为了支持在类的实例中操作静态变量...,此时__count是属于类Foo的私有变量,在类的外部无法访问私有变量__count,即使在类的内部也无法通过普通函数访问,甚至无法通过Foo....一种是实现一个property的子类,然后修改其 __get__ 方法。 另一种方式是使用元类 (__metaclass__)。

    4K10

    Java学习笔记之静态方法,非静态方法,静态变量,非静态变量四者之间的关系

    Java学习笔记之静态方法,非静态方法,静态变量,非静态变量四者之间的关系 首先明白这几个名词的意思: 静态方法:即类方法,在类之中,以static关键字申明的方法。...静态变量:即类变量,在类之中,方法之外,以static关键字申明的变量,它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。 使用方法:直接使用类名.类变量名来进行访问。...这四者之间的关系 静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员。...静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量 静态方法中可以通过类名.静态方法名来调用,但不能直接调用非静态方法,需要通过对象来访问非静态方法 非静态方法中可以通过类名....静态方法名来调用,但不能直接调用非静态方法,需要通过对象来访问非静态方法 以上是我在学习Java的过程觉得容易被弄晕的地方,所以总结了一下,如果有什么不对的地方,欢迎指出。

    70820

    Python函数 & 变量

    python 函数表示一个功能,函数定义者是提供功能的人,函数调用者是使用功能的人print(数据) 作用:将括号中的内容显示在控制台中变量 = input("需要显示的内容") 作用:将用户输入的内容赋值给变量...1.掌握函数的定义与调用;2.掌握函数实参和形参的使用方法;3.了解函数的返回值;4.掌握缺省参数的使用方法;1....所以要把因为需求而改变的代码放到函数之外,函数之内代码函数定义完不改变●有时候,函数并不是要显示什么内容,而是要把一个值返回给调用者, 比如python自带的len函数就是这样的●函数内容通过return...返回给调用者一个值●return后面可以是常量,也可以是表达式# # 对于没有返回值的函数,调用方法,直接函数名(参数)# print("hello python")# 对于没有返回值的函数,调用方法。...直接函数名(参数)# len函数是有返回值的函数a = len("hello python") # 会把一个值返回个调用者print(a)print(len("hello python"))在程序开发中

    23510

    Python查看模块(变量、函数、类)方法

    查看已导入模块(包)中包含的成员,本节给大家介绍 2 种方法。 查看模块成员:dir()函数 事实上,在前面章节的学习中,曾多次使用 dir() 函数。...通过 dir() 函数,我们可以查看某指定模块包含的全部成员(包括变量、函数和类)。...因此,这里给读者推荐一种可以忽略显示 dir() 函数输出的特殊成员的方法。...查看模块成员:__all__变量 除了使用 dir() 函数之外,还可以使用 __all__ 变量,借助该变量也可以查看模块(包)内包含的所有成员。...不过需要注意的是,并非所有的模块都支持使用 __all__ 变量,因此对于获取有些模块的成员,就只能使用 dir() 函数。

    1.1K00

    java 静态变量 存储_Java中存储的静态方法和静态变量在哪里?「建议收藏」

    大家好,又见面了,我是你们的朋友全栈君。 静态方法(实际上所有方法)以及静态变量都存储在PermGen部分,因为它们是反射数据的一部分(类相关数据,而不是与实例相关的)。...需要澄清的最新情况: 注意,只有变量及其技术值(原语或引用)存储在PermGen空间中。 如果静态变量是对象的引用,则该对象本身存储在堆的正常部分(年轻/旧代或幸存者空间)。...当然,您可以将静态变量设置为NULL,从而删除对堆上对象的引用,但这并不意味着垃圾回收器将要收集它(即使没有更多的参考资料)。...最后注意事项代码、运行时数据等的存储方式取决于所使用的JVM,即HotSpot可能与JRockit不同,甚至在相同JVM的不同版本之间也可能有所不同。...上面的内容是基于HotsforJava 5和6的(它们基本上是相同的),因为在回答时,我想说大多数人都使用这些JVM。

    2.7K10

    javascript——函数、变量和方法

    当代码出现有规律的重复之后,可以利用函数,定义变量,调用方法,不用去重复的改动代码,只需要进行函数的修改。...; } return area; } 二、变量和作用域 1.声明变量 在js中,通常使用var来生声明变量,而声明的变量实际上是有作用域的 在函数体内声明的变量,只能在函数体内生效,在函数体外是无法识别的...,我们在声明变量的时候,要将其统一放置在函数的起始位置,严格遵守在函数内部首先声明所有变量的原则 3.全局作用域 不再任何函数内部定义的变量就叫做全局变量,也就是window下,他也被称作全局作用域,全局作用域下的变量实际上被绑定到...; [a, b] = [b, a] 四、对象的方法 绑定到对象上的函数被称为方法 在一个对象中绑定函数,称为这个对象的方法 1.this 下面段代码返回的是(今年的年份-出生年份) var xm = {...age() xm.age(); // 22 这里引入了一个新的关键词this 在方法内部,this是一个特殊的变量,它始终指向当前对象,也就是xm这个变量 所以this.birth指的就是变量xm的

    1.2K20

    java静态全局变量和全局变量的区别_java静态全局变量

    许多编程语言都具有用于声明全局变量的特殊语法,例如,Python使我们可以使用global关键字: global a_variable = 5 C通过简单地在函数外部声明变量来创建全局变量。...假设打印语句引用局部变量。 假定print语句引用局部变量,除非使用特殊语法引用全局变量。 第三种方法是当方法参数使用相同名称时Java如何处理实例变量。...通过纯粹面向对象,鼓励开发人员将相关的变量和函数保持在一起,从而使程序整体上更有条理。这也可以帮助确定文档记录不充分的目的。...使用Reference该类的一种更好的方法是将所有变量都视为私有变量,并使用getter方法控制对值的所有访问。对于在程序运行时不应更改的数据,使用常量而不是变量也是明智的。...这些开发人员通常认为,全局变量使代码难以维护。但是,在某些情况下,只要全局变量良好地组织并清楚地标识它们,它们就很有用。 最终,使用它们的决定权在您或开发团队的高级成员身上。

    4.5K40

    变量,常量,静态变量存储的位置

    大家好,又见面了,我是你们的朋友全栈君。 常见的存储区域可分为: 1、栈 由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。...4、全局/静态存储区 全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有这个区分了,他们共同占用同一块内存区。...BSS段属于静态存储区。 例2:static全局变量与普通全局变量有什么区别?...答:static全局变量和普通全局变量存储区域相同,不同的是: static全局变量只在声明此static全局变量的文件中有效; 普通全局变量对整个源程序都有效,当此源程序包含多于一个文件的程序时,对其他文件依然有效...答:static局部变量的存储区为静态存储区,普通局部变量的存储区为栈; static局部变量生存周期为整个源程序,但是只能在声明其的函数中调用,并且其值与上一次的结果有关;而普通局部变量的生存周期为声明其函数的周期

    1.3K10

    C++静态成员变量和静态成员函数小结

    静态类成员包括静态数据成员和静态函数成员两部分。 一 静态数据成员: 类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员。...静态数据成员实际上是类域中的全局变量。所以,静态数据成员需要在类外定义(初始化),而不应该被放在类声明中。 原因是类声明中只是描述如果分配内存并不会真正的分配内存,而定义是一定要分配内存的。...静态成员是“类级别”的,也就是它和类的地位等同,而普通成员是“对象(实例)级别”的。类级别的成员,先于该类任何对象的存在而存在,它被该类所有的对象共享。 其定义方式与全局变量相同。..._num<<endl; } // 结果为1,2;可见派生类与基类共用一个静态数据成员。 3.静态数据成员可以成为成员函数的可选参数,而普通数据成员则不可以。...1.静态成员函数的地址可用普通函数指针储存,而普通成员函数地址需要用 类成员函数指针来储存。

    1.9K50

    java static 变量存在哪_Java中的静态方法和静态变量存储在哪里?

    大家好,又见面了,我是你们的朋友全栈君。 小编典典 静态方法(实际上是所有方法)以及静态变量都存储在PermGen堆的部分中,因为它们是反射数据(与类相关的数据,而不与实例相关的数据)的一部分。...更新说明: 请注意,只有变量及其技术值(原始或引用)存储在PermGen空间中。 如果你的静态变量是对对象的引用,则对象本身存储在堆的常规部分(青年/旧世代或幸存者空间)中。...当然,你可以将静态变量设置为null,从而删除对堆上对象的引用,但这并不意味着垃圾收集器将收集它(即使没有更多引用了)。...最后要注意的是:如何存储代码,运行时数据等取决于所使用的JVM,即HotSpot可能与JRockit不同,并且在同一JVM版本之间甚至可能有所不同。...上面的内容基于Java 5和6的HotSpot(基本上是相同的),因为在回答之时,我会说大多数人都使用了这些JVM。

    2K30

    静态变量和成员变量的区别 && 成员变量和局部变量的区别

    成员变量:属于对象,也称为对象变量或实例变量。 (2):在内存中的位置不同:     静态变量:存储于方法区的静态区。     成员变量:存储于堆内存。...(3):生命周期不同:     静态变量:静态变量是随着类的加载而加载,随着类的消失而消失。     成员变量:成员变量是随着对象的创建而存在,随着对象的消失而消失。...局部变量:在方法定义中或者方法声明上(即形参)。 (2)在内存中的位置不同:     成员变量:在堆中。     局部变量:在栈中。...(3)生命周期不同:     成员变量:随着对象的创建而存在,随着对象的消失而消失。     局部变量:随着方法的调用而存在,随着方法的调用完毕而消失。...(5)注意事项:     1.局部变量名称可以和成员变量名称一样,但是在方法中使用该变量的时候,采用的是就近原则(即先找小范围,再找大范围)。

    1.6K20

    方法区(Method Area)存储的静态变量

    1:方法区(Method Area)存储的静态变量 静态变量又称为类变量,类中被static修饰的成员变量都是静态变量(类变量) 静态变量之所以又称为类变量,是因为静态变量和类关联在一起,随着类的加载而存在于方法区...(而不是堆中) 八种基本数据类型(byte、short、int、long、float、double、char、boolean)的静态变量会在方法区开辟空间,并将对应的值存储在方法方法区,对于引用类型的静态变量如果未用...new关键字为引用类型的静态变量分配对象(如:static Object obj;)那么对象的引用obj会存储在方法区中,并为其指定默认值null;若,对于引用类型的静态变量如果用new关键字为引用类型的静态变量分配对象...(如:static Person person = new Person();),那么对象的引用person 会存储在方法区中,并且该对象在堆中的地址也会存储在方法区中(注意此时静态变量只存储了对象的堆地址...静态初始化块主要用来初始化类变量 类变量可以在构造函数中初始化为啥还要定义静态初始化块呢?

    40310

    使用 Apollo 为静态变量赋值的方法

    但是,在使用 Apollo 的时候,我们可能会遇到这样的场景: 在类中,想要为静态属性赋值。 我们且不考虑什么时候会出现这样的需求,仅考虑如果有这样的需求,我们应该怎么处理?...实际上,Apollo 仅支持直接为非静态属性赋值,因此当我们有这样的需求的时候,就需要我们变通一下,通过一些小技巧,来达成我们的目的了。...而对于静态属性address,我们直接使用@Value注解是不生效的,但是我们可以将@Value("${csdn.address:NONE}")注解添加到非静态方法setAddress(String param...)上面,通过参数注入的时候,将 Apollo 配置的值传递给静态属性address,然后我们在通过静态方法getAddress(),获取静态属性address的值。...值得注意的是,上面例子中使用的方法名是自定义的,不一定非得和参数名一致,根据需要自定义即可。

    2.8K10
    领券