类变量、成员变量、局部变量存放位置
一、实例变量
也叫成员变量、全局变量。
- 定义在类中、方法外,有默认初始值。
- 通过对象的引用来访问实例变量。
- 随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中。
二、类变量
也叫静态变量。
- 定义在类中、方法外,有关键字 static 修饰,有默认初始值。
- 可以通过对象调用,也可以通过类名调用。
- 生命周期与类共存亡。
- 对象的引用存放在方法区,如果用关键字 new 为引用类型的静态变量分配对象,该对象在堆中的地址也会存放在方法区。!但是对象本身仍在堆内存中。
三、局部变量
- 定义在方法中,或者方法的形参,没有初始化值。
- 生命周期与方法共存亡。
- 存放在栈中。局部的对象的引用所指对象在堆中的地址在存储在了栈中。
举例:
public class StaticObjTest {static class Test {static ObjectHolder staticObj = new ObjectHolder();//静态变量、类变量ObjectHolder instanceObj = new ObjectHolder();//实例变量、成员变量void foo() {ObjectHolder localObj = new ObjectHolder();//局部变量System.out.println("done");}}
}
- 静态变量staticObj 随着Test的类型信息存放在方法区
- 成员变量instance0bj 随着Test的对象实例存放在Java堆
- 局部变量localobj则是存放在foo() 方法栈帧的局部变量表中。
- 三个对象的数据在内存中的地址都落在Eden区范围内,所以结论:只要是对象实例 即new() 必然会在Java堆中分配。
再举个例子:
public class PersonDemo
{public static void main(String[] args) { //局部变量p和形参args都在main方法的栈帧中//new Person()对象在堆中分配空间Person p = new Person();//sum在栈中,new int[10]在堆中分配空间int[] sum = new int[10];}
}
class Person
{ //实例变量name和age在堆(Heap)中分配空间private String name;private int age;//类变量(引用类型)name1和"cn"都在方法区(Method Area)private static String name1 = "cn";//类变量(引用类型)name2在方法区(Method Area)//new String("cn")对象在堆(Heap)中分配空间private static String name2 = new String("cn");//num在堆中,new int[10]也在堆中private int[] num = new int[10];Person(String name,int age){ //this及形参name、age在构造方法被调用时//会在构造方法的栈帧中开辟空间this.name = name;this.age = age;}//setName()方法在方法区中public void setName(String name){this.name = name;}//speak()方法在方法区中public void speak(){System.out.println(this.name+"..."+this.age);}//showCountry()方法在方法区中public static void showCountry(){System.out.println("country="+country);}
}
类变量、成员变量、局部变量存放位置相关推荐
- JAVA中变量的存放位置
JAVA中变量的存放位置 一:在方法中声明的变量,即该变量是局部变量,每当程序调用方法时,系统都会为该方法建立一个方法栈,其所 在方法中声明的变量就放在方法栈中,当方法结束系统会释放方法栈,其对应在该 ...
- java成员变量/局部变量
成员变量/局部变量 1.定义位置不同,成员变量定义在类里,局部变量定义在类的方法里. 来自网络 2.成员变量中,其中类变量从该类的准备阶段起开始存在,直到系统完全销毁这个类,类变量的作用域与这个类的生 ...
- java 静态变量,成员变量,局部变量的默认值
java 静态变量,成员变量,局部变量的默认值 静态变量和成员变量的默认值 判断char是否被赋值 局部变量的默认值 静态变量和成员变量的默认值 静态变量和成员变量的默认值时一样的 public cl ...
- 成员变量 局部变量 类变量
成员变量和局部变量的区别 成员变量: 1.成员变量定义在类中,在整个类中都可以被访问. 2.成员变量随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中. 3.成员变量有默认初始化值. ...
- [ARM-assembly]-全局变量/静态全局变量/初始化/未初始化变量的存放位置分析
我们从汇编来看,各种变量在内存中的存放位置 1.使用交叉编译器将C语言转换成汇编 写一个C语言程序: static int x; static int y = 10; int z; int w = 2 ...
- Java变量(静态变量/成员变量/局部变量)初始化的问题
数组对象创建时,数组元素会自动初始化,然后再赋值 对象在堆内存创建时,对象中的成员变量的值会自动初始化 类的静态变量,在类加载进内存时自动初始化,静态变量在堆内存中的方法区中的静态区中 方法内的局部变 ...
- 成员变量的声明位置引起编译错误
常规的Objective-c的声明范例: @interface Sample:NSObject{@private int ID;}- (void)Done;+ (void)Finish;@end 声明 ...
- 7 面向对象(成员变量和局部变量的区别,类作为形式参数的问题,匿名对象,封装,private关键字,this关键字,构造方法,类的初始化过程,static关键字)
1:成员变量和局部变量的区别(理解) (1)在类中的位置不同 成员变量:类中方法外 局部变量:方法定义中或者方法声明上 (2)在内存中的位置不同 成员变量:在堆中 局部变量:在栈中 (3)生命周期不同 ...
- 【Java】5.3 成员变量和局部变量
目录 成员变量 局部变量 static的标志 变量: 成员变量和局部变量 成员变量: 有static修饰:类变量,属于类本身 无static修饰:实例变量,属于实例 局部变量: 方法块里的局部变量.仅 ...
最新文章
- 勒索软件层出不穷,Veeam “3-2-1-1-0”助力构建数据防护
- 二叉树 —— 创建二叉树 先序遍历 、中序遍历、后序遍历(递归方式、非递归方式)
- linux裸设备文件系统,Linux当中的文件系统
- view函数_数据科学系列:数据处理(6)字符串函数基于R(二)
- Flask-hello程序
- python 修饰器_python中用修饰器进行异常日志记录
- ArcGIS 10.7拆分多部件要素(Multipart Features)至单部件要素的两种方法
- 【bzoj1036】 ZJOI2008—树的统计Count
- c语言学习-自定义并调用两个函数,分别求两个整数的最大公约数和最小公倍数
- c语言字符类型强制换成内码,C语言实现不同汉字系统的内码转换方法
- SQL Server系统数据库– msdb数据库
- Redis 解决了哪些问题?
- part 8 App电量优化
- WebStorm2016.1.1免注册破解方法
- 【JY】如何利用python来编写GUI?
- 前端基础之《NodeJS(2)—模块化》
- 加密算法与大数据安全
- 马士兵 java 学习笔记_马士兵java教程笔记1
- springmvc执行过程源码分析
- repo forall -c命令
热门文章
- Ubuntu下安装配置TAU分析mpich和openmp程序性能
- 使用Excel制作甘特图
- 纹理分析以及结合深度学习来提升纹理分类效果
- Scrapy pycharm 爬取豆瓣排名前250信息
- HTML5+CSS3做一个有动画跳动发光的文字效果
- mac 钥匙串密码_从命令行获取钥匙串密码
- 暗影精灵2pro安装win10+ubuntu16.10双系统
- 大学计算机怎么开机,电脑开机卡logo,大学生没电脑玩急坏了,这到底是怎么回事?...
- 美国小学生作文:一篇让中国式教育震撼的文章
- 跳槽面试,外包履历能写在简历上吗?