首页 > Java > Java入门 > 正文

java中静态和非静态有什么区别

王林
发布: 2020-06-10 16:18:10
转载
3206 人浏览过

java中静态和非静态有什么区别

首先我们先来说说jvm内存模型:

jvm内存分为:方法区、堆、栈和程序计数器。

下面我们来简单的说说方法区、栈和堆:

方法区:是各个线程共享的区域,存放类信息/常量/静态变量;

栈:其实每个线程都会分配一个栈,其生命周期与线程一样,其执行一个方法就会生成一个栈帧,栈帧包含了方法中的局部变量。

堆:所有类的实例化都存放在堆里面。

(视频教程推荐:java视频教程

1、从内存的角度分析用静态和非静态的区别

static修饰成员变量和成员方法,其值存放的地址是方法区的常量池,其执行的顺序为在加载类的时候就将static修饰的变量名或者方法存放到常量池了。

非静态修饰的变量可以是成员变量和局部变量。

成员变量随对象存放的地址一样,因为它属于类的一部分,其地址在堆中。

局部变量一般情况下在方法中声明,其存放的地址在栈中。

二、从运行的机制分析

在源码被编译器编译成.class字节码文件的时候,一旦类被加载,用了static修饰的块/变量/方法就会马上存放到方法区,与此同时非静态的块/变量/方法还没有编译,一旦将非静态的变量存放到静态方法里面,程序计数器指示到局部变量的时候就会报错,因为这个时候根本还没有编译到局部变量这一块。

推荐教程:java入门程序

以上是java中静态和非静态有什么区别的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:csdn.net
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!