JAVA变量及内存分配

JAVA变量的要素包括便变量名、类型、作用域。本质上讲,变量实际上是内存中的一块区域,使用变量名来访问这块区域。每个变量使用前必须要先声明,然后赋值才可以使用。

根据变量的声明位置,可以分成

①局部变量:声明在方法体内(包含方法的参数)或语句块内部的变量。

②成员变量:声明在方法体外,类内部的变量。成员变量可以使用任何一种数据类型,包括引用类型和基本类型(见下面),在定义成员变量时可以对他进行初始化,如果不对其进行初始化,JAVA将使用默认值进行初始化,如图(1) 
这里写图片描述

。成员变量的作用域是该成员变量所在的整个类体。注:类外面不能有方法的声明

如: public class Person{

    String name;//声明在类内部方法体外,所以是成员变量

    static int age;//声明在类内部方法体外,所以是成员变量

    public static void main(String[] args){

      int i;//声明在方法体内,是局部变量

            Person person=new Person();//person是局部变量,也是引用变量。

           System.out.println("age的值是"+age);//这个是正确的,因为JAVA已经对其进行了初始化,打印结果是0

           System.out.println("i的值是"+i);//这个是错误的,对于局部变量,系统不会自动初始化,必须要用户初始化(赋值)后才可以使用!
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

  }

     public void run(int m){  //m是方法的参数,是局部变量

               //函数体                                                                                                                                                                 图(1)

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

}

根据所属数据类型分为:基本数据类型和引用类型,如图(2)。

这里写图片描述

图(2)

基本类型和引用类型的内存分配方式是不一样的。基本类型只占一块内存,引用类型实质上是指针,占两块内存。

如 int i=0;在内存里面只分配了一块内存,里面存放的就是值0,使用i这个名字来访问这块内存。

又如 String s;//此时为引用变量s分配了一块内存,但是目前这个内存什么也没有存,因为此时s不指向任何一个对象,所以是null

s=new String(“hello”);//使用new创建了一个对象后,又分配一块内存(堆),这个对象的内容“hello”就存放在新分配的内存中。而之前给s分配的内存也有了内容,根据这个内容就可以找到第二块内存,使用其中的内容(“hello”).

这里顺便说一下程序执行过程中内存的分配,如图(3): 
这里写图片描述

图(3)

程序执行时都必须是在内存中。所以程序首先加载到内存,这时候程序代码就放在code segment这样的内存区域,然后找到main开始执行并如图所示为各种其他的变量、常量、对象等分配相应的内存。其中new出来的变量是放在堆中,局部变量是放在栈中的。例如上面代码示例中,Person person=new Person();person是一个局部变量,为它分配了栈内存,而person对象的实际内容如name和age的值是保存在堆中的,根据栈中存储的内容找到堆中person的具体内容,其内存分配情况参考下图(4)。此外,同一个类的每个对象有不同的成员变量存储空间,同一个类的每个对象共享方法,方法在执行的时候才会为其分配空间,不执行时候,就是一段代码。JAVA中进行函数调用传参时,基本类型传递的是该数值本身,引用类型传递的是对对象的引用,而不是对象本身。

这里写图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值