• 081 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 06 new关键字


    081 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 06 new关键字

    本文知识点:new关键字

    说明:因为时间紧张,本人写博客过程中只是对知识点的关键步骤进行了截图记录,没有对截图步骤进行详细的文字说明(后面博主时间充裕了,会对目前的博客编辑修改,补充上详细的文字说明);有些步骤和相关知识点缺乏文字描述,可能会难以理解。读者如有不明之处,欢迎博客私信或者微信(本人微信在博客下方的“关于博主”处)与本人交流,共同进步

    new关键字

    对象的实例化操作就是对象创建的过程
    mark

    而在对象实例化的代码编译执行的过程中,实际上进行了2个部分的操作:
    1、声明对象
    2、实例化对象
    mark

    声明对象

    声明对象的代码相当于在内存的栈空间,开辟了一块空间,并进行了命名。
    mark
    声明对象后,还不是一个真正意义上的对象,因为one的空间是空的,只是一个空盒子。
    所以,如果这时候用one来调用属性和方法,是不被允许的。

    注释单行代码的快捷键
    mark

    mark
    mark
    mark

    实例化对象

    实例化对象的代码,相当于在内存的堆空间里开辟了一块空间,完成了对象相关信息的初始化操作。
    mark

    声明对象和实例化对象是在内存中的两个不同区域完成的。
    声明对象在栈中,实例化对象在堆中
    栈和堆是两个不同的空间。那这两个空间是怎样关联起来的呢?
    mark

    就是通过赋值符号 “=”将新的堆空间的内存地址存放到了栈空间的one里面。
    类似把新房子的钥匙交到了one手里。
    mark
    mark

    1、声明:

    Cat one

    2、实例化:

    new Cat();

    3、然后,通过赋值符号,将声明的对象指向实例化的具体的空间。

    Cat one = new Cat();

    mark

    在Java中,每次使用new关键字,都代表new在堆中开辟了一块新的内存空间,即使它们的内容是完全相同的

    mark

    两只猫one与two的相关信息一模一样
    mark

    但是,请注意,one与two分别通过new关键字进行的对象实例化,它们实际上指向的是堆内存中的两块不同的空间
    mark

    所以,修改two的信息,不会影响到one,反之亦然。
    mark

    mark

    好比老王和老张分别买了一套房子,这两套房子一模一样。
    mark
    但它们仍然是两套房子,有2把不同的钥匙,对任何一套房子的重新装修都不会影响另外一家。
    mark

    以上,就是new关键字的作用:开辟新的对象空间(堆空间)

    实例化对象是否只有new这一种实现方式呢?

    mark

    实例化对象是否只有new这一种实现方式呢?有没有其他方式,一套房,两把钥匙那种?
    mark

    实例化对象还有其他的实现方式,如下:给新的对象赋值为已经通过new关键字实例化过的对象。
    比如:

    Cat one = new Cat();
    cat two = one;
    

    重点:

    Cat two = one;
    

    mark

    one赋值给two表示什么?one中有什么?
    one中存储的是:堆当中新开辟的内存空间的地址。好比房间的钥匙。
    mark
    现在把one赋值给two,好比把one中存储的房间的钥匙给了two。
    mark

    就代表着,one和two同时拥有了同一个房间的钥匙(2把)
    mark
    相当于,以前one一个人住这套房,现在one与two两人一起住这套房,都有这套房的钥匙。
    mark

    这样的情况下,无论是one对房间的修改还是two对房间的修改,都会对房间产生影响。
    mark

    第二次操作覆盖第一次操作的信息。
    mark
    mark

    总结

    栈当中的对象名存储的是堆中的地址的引用,即对象引用的概念
    mark
    new关键字表示在堆中开辟一块新的空间
    当2个对象指向同一块空间的时候,任何一个对象对空间的修改,都将会影响另外一个对象。
    mark
    所以,在对象进行实例化操作的时候,请大家根据实际的需求,进行合理的操作选择。

  • 相关阅读:
    关于lua扩展库lpack的使用指南
    mac下安装LuaSocket
    lua_の_进阶总结之基础篇
    minicap_工具使用
    AutoSense脚本日志总结(微信搜索【水勺子】公众号获取详情)
    六:Spring Security 中使用 JWT
    五:Spring Security 中的角色继承问题
    四:Spring Security 登录使用 JSON 格式数据
    二:整合Spring Security
    三:Spring Security 登录添加验证码
  • 原文地址:https://www.cnblogs.com/xlfcjx/p/13719143.html
Copyright © 2020-2023  润新知