java中静态与非静态的区别是什么
这篇文章给大家分享的是java中静态与非静态的区别。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。
在银川等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站设计、成都网站制作 网站设计制作定制网站建设,公司网站建设,企业网站建设,品牌网站建设,网络营销推广,成都外贸网站制作,银川网站建设费用合理。
首先我们先来说说jvm内存模型:
jvm内存分为:方法区、堆、栈和程序计数器。
下面我们来简单的说说方法区、栈和堆:
方法区:是各个线程共享的区域,存放类信息/常量/静态变量;
栈:其实每个线程都会分配一个栈,其生命周期与线程一样,其执行一个方法就会生成一个栈帧,栈帧包含了方法中的局部变量。
堆:所有类的实例化都存放在堆里面。
(视频教程推荐:java视频教程)
1、从内存的角度分析用静态和非静态的区别
static修饰成员变量和成员方法,其值存放的地址是方法区的常量池,其执行的顺序为在加载类的时候就将static修饰的变量名或者方法存放到常量池了。
非静态修饰的变量可以是成员变量和局部变量。
成员变量随对象存放的地址一样,因为它属于类的一部分,其地址在堆中。
局部变量一般情况下在方法中声明,其存放的地址在栈中。
二、从运行的机制分析
在源码被编译器编译成.class字节码文件的时候,一旦类被加载,用了static修饰的块/变量/方法就会马上存放到方法区,与此同时非静态的块/变量/方法还没有编译,一旦将非静态的变量存放到静态方法里面,程序计数器指示到局部变量的时候就会报错,因为这个时候根本还没有编译到局部变量这一块。
看完上述内容,你们对java中静态与非静态的区别有进一步的了解吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读。
分享题目:java中静态与非静态的区别是什么
浏览路径:http://scyanting.com/article/gspchs.html