关闭

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

标签: java对象内存
550人阅读 评论(0) 收藏 举报
分类:

对象的内存分配

我们都知道,要使用类,就一定要为其创建对象。那么,在创建对象过程中,内存是如何分配的呢?
类的本质是一种引用数据类型,这与数组是一样的。比如本文提供的简单例子程序中的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

猜你在找
【套餐】Hadoop生态系统零基础入门
【套餐】嵌入式Linux C编程基础
【套餐】2017软考系统集成项目——任铄
【套餐】Android 5.x顶级视频课程——李宁
【套餐】深度学习入门视频课程——唐宇迪
【直播】广义线性模型及其应用——李科
【直播】从0到1 区块链的概念到实践
【直播】计算机视觉原理及实战——屈教授
【直播】机器学习之凸优化——马博士
【直播】机器学习&数据挖掘7周实训--韦玮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:83064次
    • 积分:3597
    • 等级:
    • 排名:第9060名
    • 原创:288篇
    • 转载:4篇
    • 译文:0篇
    • 评论:2条
    博客专栏
    最新评论