转:https://blog.csdn.net/suneqing/article/details/37909811

1、按被声明的位置划分

局部变量:方法和语句块内定义的的变量。(在定义局部变量时,必须对其进行初始化。)

成员变量:方法外部,类的内部定义的变量。(成员变量可以是java语言中任何一种数据类型(包括基本类型和引用类型))

类由成员变量和成员方法构成。而成员变量又分为实例变量和类变量(被static修饰的变量)。

  使用static修饰的成员变量是类变量,属于该类本身;没有使用static修饰的成员变量是实例变量,属于该类的实例。

  在同一个JVM内,每个类只对应一个Class对象,但每个类可以创建多个Java对象。

  由于同一个JVM内每个类只对应一个Class对象,因此同一个JVM内的一个类的类变量只需一块内存空间;但对于实例变量而言,该类每创建一次实例,就需要为实例变量分配一块内存空间。也就是说,程序中有几个实例,实例变量就需要几块内存空间。

2、按所属的数据类型划分

基本数据类型

  内存分析。

  例如'int i=0;',在内存中只分配一个空间,名字是i,里面的值是0。只要使用了i这个名字就能找到其中的值。

引用数据类型:java中的对象是通过对其引用进行操作的。

  内存分析:引用类型占两块内存,引用变量占一块,new出来的对象占一块内存。

  例如:

  声明一个string类型的引用变量,但并没有指向一个对象。这时候它在内存中占一块内存。

  String s;

  

  使用new创建一个string类型对象,并通过s指向它,通过s对其进行操作。

  s=new String("hello world");

总之,如果按照声明位置划分的变量类型中,局部变量声明后必须要赋值以后才能使用;而成员变量声明后可以不赋值,系统有默认值。

如果按所属的数据类型划分,基本类型数据只占用内存中的一块内存;而引用类型占用的是两块内存,根据引用变量就可以在堆内存中找到它指向的对象。

3、例子

  • 1、对象主要存放在堆内存中;方法和属性主要存放在栈内存中。
  • 2、栈是运行时单位,用来解决程序运行时的问题,堆是存储单位,解决数据存储的问题。
  • 3、堆伴随着JVM的启动而创建。

最新文章

  1. C# 多重overide
  2. 转】MyEclipse10安装Log4E插件
  3. C++编程练习(14)-------“单例模式”的实现
  4. linux导入导出数据库方法 windows导入导出数据库方法
  5. 得到创建人Id
  6. PHP 错误提示
  7. eclipse使用Git插件
  8. 一行代码解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10(转载)
  9. 解析jQuery中extend方法--源码解析以及递归的过程《二》
  10. jmeter中文乱码及Unicode转中文
  11. 1、Netty 实战入门详解
  12. PCA(主成分分析)的简单理解
  13. javascript:控制一个元素高度始终等于浏览器高度
  14. P1091 合唱队形 DP 最长升序列维护
  15. css3 transform(变形)笔记
  16. jmeter-The JVM should have exitted but did not
  17. 【Git】Git使用小结
  18. jquery获取li里面的第一个a标签
  19. [06] 盒模型 + auto 居中 + 垂直合并
  20. Websocket教程SpringBoot+Maven整合

热门文章

  1. UVA 11468 AC 自动机
  2. Img转base64
  3. SQL基础教程(第2版)第7章 集合运算:7-1 表的加减法
  4. svnkit-常用api
  5. flask前后端数据交互
  6. MLP神经网络 隐含层节点数的设置】如何设置神经网络隐藏层 的神经元个数
  7. elasticsearch-logstash
  8. 异常依然执行{try..catch语句块..}的后续代码
  9. 洛谷 P1060开心的金明
  10. php分页代码。