静态类和非静态类的区别java面试,java静态变量和非静态变量的区别
我们先来谈谈jvm内存模型:
jvm的内存分为:方法区、堆、栈、程序计数器。
先简单说一下方法区,栈,堆:
方法区:是所有线程共享的区域,存储类信息/常量/静态变量;
堆栈:实际上每个线程都会分配一个堆栈,它的生命周期和一个线程是一样的。当它执行一个方法时,它会生成一个堆栈帧,其中包含方法中的局部变量。
堆:所有类的实例都存储在堆中。
(视频教程推荐:java视频教程)
1、从内存的角度分析用静态和非静态的区别
Static修改成员变量和成员方法,存储它们的值的地址是方法区中的常量池。执行顺序是类加载时,静态修改的变量名或方法存储在常量池中。
非静态修饰变量可以是成员变量和局部变量。
变量存储在与对象相同的地址,因为它是类的一部分,它的地址在堆中。
一般来说,局部变量是在方法中声明的,它们的存储地址在堆栈中。
二、从运行的机制分析
当源代码被编译器编译成. class字节码文件时,一旦加载了类,用static修饰的块/变量/方法就会立即存储在方法区,而非static的块/变量/方法还没有被编译。一旦非静态变量存储在静态方法中,程序计数器在指示局部变量时会报错,因为此时局部变量根本没有编译过。
推荐教程:java入门。以上是java中静态和非静态区别的详细内容。请多关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。