一、实例变量

也叫成员变量、全局变量。

  • 定义在类中、方法外,有默认初始值。
  • 通过对象的引用来访问实例变量。
  • 随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中。

二、类变量

也叫静态变量。

  • 定义在类中、方法外,有关键字 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);}
}

类变量、成员变量、局部变量存放位置相关推荐

  1. JAVA中变量的存放位置

    JAVA中变量的存放位置 一:在方法中声明的变量,即该变量是局部变量,每当程序调用方法时,系统都会为该方法建立一个方法栈,其所 在方法中声明的变量就放在方法栈中,当方法结束系统会释放方法栈,其对应在该 ...

  2. java成员变量/局部变量

    成员变量/局部变量 1.定义位置不同,成员变量定义在类里,局部变量定义在类的方法里. 来自网络 2.成员变量中,其中类变量从该类的准备阶段起开始存在,直到系统完全销毁这个类,类变量的作用域与这个类的生 ...

  3. java 静态变量,成员变量,局部变量的默认值

    java 静态变量,成员变量,局部变量的默认值 静态变量和成员变量的默认值 判断char是否被赋值 局部变量的默认值 静态变量和成员变量的默认值 静态变量和成员变量的默认值时一样的 public cl ...

  4. 成员变量 局部变量 类变量

    成员变量和局部变量的区别 成员变量: 1.成员变量定义在类中,在整个类中都可以被访问. 2.成员变量随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中. 3.成员变量有默认初始化值. ...

  5. [ARM-assembly]-全局变量/静态全局变量/初始化/未初始化变量的存放位置分析

    我们从汇编来看,各种变量在内存中的存放位置 1.使用交叉编译器将C语言转换成汇编 写一个C语言程序: static int x; static int y = 10; int z; int w = 2 ...

  6. Java变量(静态变量/成员变量/局部变量)初始化的问题

    数组对象创建时,数组元素会自动初始化,然后再赋值 对象在堆内存创建时,对象中的成员变量的值会自动初始化 类的静态变量,在类加载进内存时自动初始化,静态变量在堆内存中的方法区中的静态区中 方法内的局部变 ...

  7. 成员变量的声明位置引起编译错误

    常规的Objective-c的声明范例: @interface Sample:NSObject{@private int ID;}- (void)Done;+ (void)Finish;@end 声明 ...

  8. 7 面向对象(成员变量和局部变量的区别,类作为形式参数的问题,匿名对象,封装,private关键字,this关键字,构造方法,类的初始化过程,static关键字)

    1:成员变量和局部变量的区别(理解) (1)在类中的位置不同 成员变量:类中方法外 局部变量:方法定义中或者方法声明上 (2)在内存中的位置不同 成员变量:在堆中 局部变量:在栈中 (3)生命周期不同 ...

  9. 【Java】5.3 成员变量和局部变量

    目录 成员变量 局部变量 static的标志 变量: 成员变量和局部变量 成员变量: 有static修饰:类变量,属于类本身 无static修饰:实例变量,属于实例 局部变量: 方法块里的局部变量.仅 ...

最新文章

  1. 勒索软件层出不穷,Veeam “3-2-1-1-0”助力构建数据防护
  2. 二叉树 —— 创建二叉树 先序遍历 、中序遍历、后序遍历(递归方式、非递归方式)
  3. linux裸设备文件系统,Linux当中的文件系统
  4. view函数_数据科学系列:数据处理(6)字符串函数基于R(二)
  5. Flask-hello程序
  6. python 修饰器_python中用修饰器进行异常日志记录
  7. ArcGIS 10.7拆分多部件要素(Multipart Features)至单部件要素的两种方法
  8. 【bzoj1036】 ZJOI2008—树的统计Count
  9. c语言学习-自定义并调用两个函数,分别求两个整数的最大公约数和最小公倍数
  10. c语言字符类型强制换成内码,C语言实现不同汉字系统的内码转换方法
  11. SQL Server系统数据库– msdb数据库
  12. Redis 解决了哪些问题?
  13. part 8 App电量优化
  14. WebStorm2016.1.1免注册破解方法
  15. 【JY】如何利用python来编写GUI?
  16. 前端基础之《NodeJS(2)—模块化》
  17. 加密算法与大数据安全
  18. 马士兵 java 学习笔记_马士兵java教程笔记1
  19. springmvc执行过程源码分析
  20. repo forall -c命令

热门文章

  1. Ubuntu下安装配置TAU分析mpich和openmp程序性能
  2. 使用Excel制作甘特图
  3. 纹理分析以及结合深度学习来提升纹理分类效果
  4. Scrapy pycharm 爬取豆瓣排名前250信息
  5. HTML5+CSS3做一个有动画跳动发光的文字效果
  6. mac 钥匙串密码_从命令行获取钥匙串密码
  7. 暗影精灵2pro安装win10+ubuntu16.10双系统
  8. 大学计算机怎么开机,电脑开机卡logo,大学生没电脑玩急坏了,这到底是怎么回事?...
  9. 美国小学生作文:一篇让中国式教育震撼的文章
  10. 跳槽面试,外包履历能写在简历上吗?