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

时间:2022-11-10 16:21:05

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

本文知识点:new关键字

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

new关键字

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

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

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

1、声明对象

2、实例化对象

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

声明对象

声明对象的代码相当于在内存的栈空间,开辟了一块空间,并进行了命名。

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

声明对象后,还不是一个真正意义上的对象,因为one的空间是空的,只是一个空盒子。

所以,如果这时候用one来调用属性和方法,是不被允许的。

注释单行代码的快捷键

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

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

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

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

实例化对象

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

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

声明对象和实例化对象是在内存中的两个不同区域完成的。

声明对象在栈中,实例化对象在堆中

栈和堆是两个不同的空间。那这两个空间是怎样关联起来的呢?

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

就是通过赋值符号 “=”将新的堆空间的内存地址存放到了栈空间的one里面。

类似把新房子的钥匙交到了one手里。

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

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

1、声明:

Cat one

2、实例化:

new Cat();

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

Cat one = new Cat();

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

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

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

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

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

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

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

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

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

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

好比老王和老张分别买了一套房子,这两套房子一模一样。

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

但它们仍然是两套房子,有2把不同的钥匙,对任何一套房子的重新装修都不会影响另外一家。

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

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

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

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

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

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

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

比如:

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

重点:

Cat two = one;

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

one赋值给two表示什么?one中有什么?

one中存储的是:堆当中新开辟的内存空间的地址。好比房间的钥匙。

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

现在把one赋值给two,好比把one中存储的房间的钥匙给了two。

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

就代表着,one和two同时拥有了同一个房间的钥匙(2把)

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

相当于,以前one一个人住这套房,现在one与two两人一起住这套房,都有这套房的钥匙。

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

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

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

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

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

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

总结

栈当中的对象名存储的是堆中的地址的引用,即对象引用的概念

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

new关键字表示在堆中开辟一块新的空间

当2个对象指向同一块空间的时候,任何一个对象对空间的修改,都将会影响另外一个对象。

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

所以,在对象进行实例化操作的时候,请大家根据实际的需求,进行合理的操作选择。

081 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 06 new关键字的更多相关文章

  1. # 095 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 03 封装总结 01 封装知识点总结

    095 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

  2. 094 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 04 static关键字(续)

    094 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

  3. 093 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 03 static关键字(下)

    093 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

  4. 092 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 02 static关键字(中)

    092 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

  5. 091 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 01 static关键字(上)

    091 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

  6. 090 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 04 使用包进行类管理(2)——导入包

    090 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

  7. 089 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 使用包进行类管理(1)——创建包

    089 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

  8. 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 02 封装的代码实现

    088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 02 封装的代码实现 本文知识点:Java封装的代码实现 说明:因为时间紧张,本人写博客过程中只 ...

  9. 087 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 01 封装的概念和特点

    087 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 01 封装的概念和特点 本文知识点:封装的概念和特点 说明:因为时间紧张,本人写博客过程中只是对 ...

随机推荐

  1. 解决“C:\Windows\System32\ntdll.dll”。无法查找或打开 PDB 文件问题

    这些提示的问题完全没有必要去理会,因为一般情况下你点击本地windows调试,会报出这样问题很正常. 网上一些介绍什么要去选项卡栏勾选window连接器什么鬼,不建议用该方式,一旦你勾选那个方式虽然不 ...

  2. A woman without arms

    任吉美出生在中国烟台海阳一个极为普通的渔民家里.她先天残疾,没有胳膊和手. 小吉美注定要比别人生活得更艰难.她不能自己穿衣,不能自己端碗吃饭,也不能像兄弟姐妹们一样帮助妈妈干家务活,她觉得自己成了家里 ...

  3. C#中的DllImport

    大家在实际工作学习C#的时候,可能会问:为什么我们要为一些已经存在的功能(比如 Windows中的一些功能,C++中已经编写好的一些方法)要重新编写代码,C#有没有方法可以直接都用这些原本已经存在的功 ...

  4. eclipse导入javax.servlet.*的方法

    1.下载web应用服务器tomact,网址http://tomcat.apache.org/download-80.cgi 这个根据自己系统进行选择. 2.将其加压到电脑中 3.在eclipse中添加 ...

  5. HDU 1710 Binary Tree Traversals

    题意:给出一颗二叉树的前序遍历和中序遍历,输出其后续遍历 首先知道中序遍历是左子树根右子树递归遍历的,所以只要找到根节点,就能够拆分出左右子树 前序遍历是按照根左子树右子树递归遍历的,那么可以找出这颗 ...

  6. mysql error笔记1

    mysql视图问题: The user specified as a definer ('root'@'%') does not exist 原因:由于root用户对全局host无访问权限,给root ...

  7. java String对象的创建(jvm).

    本人目前也开始学习虚拟机,在java中,有很多种类型的虚拟机,其中就以sum公司(当然现在已经是oracle了)的虚拟机为例,介绍可能在面试的时候用到的,同时对自己了解String有很大帮助,这里仅仅 ...

  8. goahead cgi 及出现的问题解决

    1. route.txt    配置cgi路径 route uri=/cgi-bin dir=/web handler=cgi 2.交叉编译生成cgi goahead  源码路径下  ./test/c ...

  9. django 表单提交 post 、get

    介绍 : django项目开发必须懂的知识点,下面使用的数据库是mysql , models.py  数据库表结构, # -*- coding: utf-8 -*-from __future__ im ...

  10. js怎么把数字转化为字母(A,B.....AA,AB,..)

    function createCellPos( n ){ var ordA = 'A'.charCodeAt(0); var ordZ = 'Z'.charCodeAt(0); var len = o ...