请问java里给成员变量赋值,那成员变量会在哪个内存空间里

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问java里给成员变量赋值,那成员变量会在哪个内存空间里相关的知识,希望对你有一定的参考价值。

jvm内存包括堆、栈和方法区,对象本身是被丢到堆里的,所以成员变量是跟着一起放到堆中,只有局部变量才会入栈区。追问

在没有被创建对象初始化时,直接在类里面给成员变量赋值,并且用静态方法static修饰。那赋的这个值 不开辟空间嘛?

追答

其实我也是网上查的,我之前也只是简单的了解过因为实际开发中确实很少用到。

据说静态成员变量是直接丢到方法区的,也就是在方法区开辟空间咯。

又看到一篇博客你也瞅瞅呗

手机上居然看不到连接,我刚把电脑关了,不知道你看不看得到这篇博客

参考技术A 根据变量类型,
基本类型(float,double,char,byte,short,int,long,boolean)值是放在方法区的常量池(方法区有一个数组,用来存放1,2,3,4, true,false,'a','b'这种基本类型值),变量本身放在栈,指向常量池的值。
引用变量实体是放在堆中(比如String,各种class等),变量放在栈,变量指向值的位置。

static修饰的值也会开辟空间,只不过加载顺序提前了,会在这个类被加载时一开始就被加载。而且static主要用途是静态,比如你class A中有一个变量a, 你设为static后,
你 new 两个 A的对象, A1 和 A2, 这两个对象的a是指向了同一个空间,也就是你A1.a = 1,那么A2.a 也会变成 1.

c++中静态成员变量和静态成员函数(笔试经历)

笔试经历

1 类中的静态变量不能通过构造函数参数列表来初始化,因为静态变量不属于哪个对象。同时静态变量在不初始化的情况下系统会自动为变量赋值,数值型赋值为零,字符型赋值为空。

非静态变量只有在定义时才会被分配内存,因此使用未声明的或者声明了未定义的变量程序都会运行失败。未声明时编译时失败,未定义是运行时失败。

2 静态成员数中的普通变量无论c还是java都是普通变量,需要定义后使用。

在c++中静态成员函数的访问方式为:

类名::函数名();

java中静态成员函数的访问方式:
类名.函数名();

以上是关于请问java里给成员变量赋值,那成员变量会在哪个内存空间里的主要内容,如果未能解决你的问题,请参考以下文章

C++ static 静态变量&静态成员函数

java中成员变量和局部变量的区别

JAVA中的成员变量不赋值默认是0吗?

c++中静态成员变量和静态成员函数(笔试经历)

Java中成员变量分配在哪个空间?

09day_Java面向对象