Java创建对象过程中,内存的分配

来源:互联网 发布:广联达造价软件价格 编辑:程序博客网 时间:2024/05/21 17:56

对象的内存分配

我们都知道,要使用类,就一定要为其创建对象。那么,在创建对象过程中,内存是如何分配的呢?
类的本质是一种引用数据类型,这与数组是一样的。比如本文提供的简单例子程序中的Person类,它有两个属性,name和age,而属性是需要内存来存储的。我们以person对象来讲解。执行Person person=null; 时,Java系统会在栈内存开辟一个空间给对象person,程序继续向下执行到person=new Person(); 时,Java系统会在堆内存开辟空间保存对象person属性(注意是属性)的内容。person变量本身存储的只是一个地址值,没有存储任何实际数据,但是它指向了Person类。所以当访问person对象的属性和方法时,实际上访问的是person所引用对象的属性和方法。

堆内存中的变量可以有多个引用,但是它们实际引用的是同一个类,如果对其中一个对象进行修改,那么其他对象的属性也会发生变化,因为它们指向同一个类。
可以这么说,对象的名称保存在栈内存中,而对象的属性保存在以new为关键字才能开辟的堆内存中。在Java中,当为类创建一个对象时,编译器会为对象的各个类型的成员变量进行初始化,无论是基本数据类型还是引用数据类型。
注意:对象在使用前一定要实例化,如果对象没有实例化而直接使用,那么中编译时就会出现空指针异常
本文例程代码:

public class hello {    public static void main(String[] args) {        Person person=null;        person=new Person();        person.say();    }}class Person{    String name="Ters";    int age=18;    public void say() {        System.out.println(name+" "+age);    }}

匿名对象

匿名对象是指没有栈空间的对象,即没有明确的名字给出对象。匿名对象使用的是堆内存,是通过关键字new进行开辟,因为没有对应的栈内存空间引用,所以对象只能使用一次。

new Person().say();
0 0
原创粉丝点击