类成员函数中定义的的static变量的内存是怎么分配的?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类成员函数中定义的的static变量的内存是怎么分配的?相关的知识,希望对你有一定的参考价值。

类的所有实体所使用的成员函数是共用一段内存。那么在成员函数中定义的Static的变量也是公用内存吗?

不是,static定义的变量在全局数据区,不在类所占用的内存内包括! 参考技术A 是的,他是被所有的类对象所共享的,并不只是某一个对象的成员 参考技术B 类的static变量 使用空间在类;
成员函数的static变量,只能在那个函数中使用。
两者都在程序的数据区生成,在全局变量区。追问

如果是用这个类定义了多个实体,那这几个实体使用的都是同一个变量?

追答

是的,所以static 变量 是共享变量,为所有类的对象共享。

追问

哇,竟然是这样,那以后得注意点了,不然好像很容易出错的样子,谢了哈~~

本回答被提问者和网友采纳
参考技术C 你好!
不是,static定义的变量在全局数据区,不在类所占用的内存内包括!
如果对你有帮助,望采纳。

静态static 总结

static:★★★ 关键字,是一个修饰符,用于修饰成员(成员变量和成员函数)。

特点:

1、static变量

 按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。两者的区别是:

 对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。

 对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。

2、静态方法

 静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。因为实例成员与特定的对象关联!这个需要去理解,想明白其中的道理,不是记忆!!!

 因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract。

3、static代码块

 static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。

4、static和final一块用表示什么

static final用来修饰成员变量和成员方法,可简单理解为"全局常量"!

对于变量,表示一旦给值就不可修改,并且通过类名可以访问。

对于方法,表示不可覆盖,并且可以通过类名直接访问。

 

备注:

1,有些数据是对象特有的数据,是不可以被静态修饰的。因为那样的话,特有数据会变成对象的共享数据。这样对事物的描述就出了问题。所以,在定义静态时,必须要明确,这个数据是否是被对象所共享的。

2,静态方法只能访问静态成员,不可以访问非静态成员。

(这句话是针对同一个类环境下的,比如说,一个类有多个成员(属性,方法,字段),静态方法A,那么可以访问同类名下其他静态成员,你如果访问非静态成员就不行)

因为静态方法加载时,优先于对象存在,所以没有办法访问对象中的成员。

3,静态方法中不能使用this,super关键字。

因为this代表对象,而静态在时,有可能没有对象,所以this无法使用。

4,主函数是静态的。

 

成员变量和静态变量的区别:

1,成员变量所属于对象。所以也称为实例变量。

静态变量所属于类。所以也称为类变量。

2,成员变量存在于堆内存中。

静态变量存在于方法区中。

3,成员变量随着对象创建而存在。随着对象被回收而消失。

静态变量随着类的加载而存在。随着类的消失而消失。

4,成员变量只能被对象所调用 。

静态变量可以被对象调用,也可以被类名调用。

所以,成员变量可以称为对象的特有数据,静态变量称为对象的共享数据。

 

静态代码块:就是一个有静态关键字标示的一个代码块区域。定义在类中。

作用:可以完成类的初始化。静态代码块随着类的加载而执行,而且只执行一次(new 多个对象就只执行一次)。如果和主函数在同一类中,优先于主函数执行。

 

以上是关于类成员函数中定义的的static变量的内存是怎么分配的?的主要内容,如果未能解决你的问题,请参考以下文章

静态成员和非静态成员的区别?

静态static 总结

对static静态成员的理解

静态函数Static

成员变量,局部变量,栈,堆的关系

静态修饰符static,类中的常量定义修饰符