081 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 06 new关键字
本文知识点:new关键字
说明:因为时间紧张,本人写博客过程中只是对知识点的关键步骤进行了截图记录,没有对截图步骤进行详细的文字说明(后面博主时间充裕了,会对目前的博客编辑修改,补充上详细的文字说明);有些步骤和相关知识点缺乏文字描述,可能会难以理解。读者如有不明之处,欢迎博客私信或者微信(本人微信在博客下方的“关于博主”处)与本人交流,共同进步。
new关键字
对象的实例化操作就是对象创建的过程
而在对象实例化的代码编译执行的过程中,实际上进行了2个部分的操作:
1、声明对象
2、实例化对象
声明对象
声明对象的代码相当于在内存的栈空间,开辟了一块空间,并进行了命名。
声明对象后,还不是一个真正意义上的对象,因为one的空间是空的,只是一个空盒子。
所以,如果这时候用one来调用属性和方法,是不被允许的。
注释单行代码的快捷键:
实例化对象
实例化对象的代码,相当于在内存的堆空间里开辟了一块空间,完成了对象相关信息的初始化操作。
声明对象和实例化对象是在内存中的两个不同区域完成的。
声明对象在栈中,实例化对象在堆中。
栈和堆是两个不同的空间。那这两个空间是怎样关联起来的呢?
就是通过赋值符号 “=”将新的堆空间的内存地址存放到了栈空间的one里面。
类似把新房子的钥匙交到了one手里。
1、声明:
Cat one
2、实例化:
new Cat();
3、然后,通过赋值符号,将声明的对象指向实例化的具体的空间。
Cat one = new Cat();
在Java中,每次使用new关键字,都代表new在堆中开辟了一块新的内存空间,即使它们的内容是完全相同的。
两只猫one与two的相关信息一模一样
但是,请注意,one与two分别通过new关键字进行的对象实例化,它们实际上指向的是堆内存中的两块不同的空间。
所以,修改two的信息,不会影响到one,反之亦然。
好比老王和老张分别买了一套房子,这两套房子一模一样。
但它们仍然是两套房子,有2把不同的钥匙,对任何一套房子的重新装修都不会影响另外一家。
以上,就是new关键字的作用:开辟新的对象空间(堆空间)
实例化对象是否只有new这一种实现方式呢?
实例化对象是否只有new这一种实现方式呢?有没有其他方式,一套房,两把钥匙那种?
实例化对象还有其他的实现方式,如下:给新的对象赋值为已经通过new关键字实例化过的对象。
比如:
Cat one = new Cat();
cat two = one;
重点:
Cat two = one;
one赋值给two表示什么?one中有什么?
one中存储的是:堆当中新开辟的内存空间的地址。好比房间的钥匙。
现在把one赋值给two,好比把one中存储的房间的钥匙给了two。
就代表着,one和two同时拥有了同一个房间的钥匙(2把)
相当于,以前one一个人住这套房,现在one与two两人一起住这套房,都有这套房的钥匙。
这样的情况下,无论是one对房间的修改还是two对房间的修改,都会对房间产生影响。
第二次操作覆盖第一次操作的信息。
总结
栈当中的对象名存储的是堆中的地址的引用,即对象引用的概念
new关键字表示在堆中开辟一块新的空间
当2个对象指向同一块空间的时候,任何一个对象对空间的修改,都将会影响另外一个对象。
所以,在对象进行实例化操作的时候,请大家根据实际的需求,进行合理的操作选择。
081 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 06 new关键字的更多相关文章
-
# 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封装 ...
-
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封装 ...
-
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封装 ...
-
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封装 ...
-
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封装 ...
-
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封装 ...
-
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封装 ...
-
088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 02 封装的代码实现
088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 02 封装的代码实现 本文知识点:Java封装的代码实现 说明:因为时间紧张,本人写博客过程中只 ...
-
087 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 01 封装的概念和特点
087 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 01 封装的概念和特点 本文知识点:封装的概念和特点 说明:因为时间紧张,本人写博客过程中只是对 ...
随机推荐
-
解决“C:\Windows\System32\ntdll.dll”。无法查找或打开 PDB 文件问题
这些提示的问题完全没有必要去理会,因为一般情况下你点击本地windows调试,会报出这样问题很正常. 网上一些介绍什么要去选项卡栏勾选window连接器什么鬼,不建议用该方式,一旦你勾选那个方式虽然不 ...
-
A woman without arms
任吉美出生在中国烟台海阳一个极为普通的渔民家里.她先天残疾,没有胳膊和手. 小吉美注定要比别人生活得更艰难.她不能自己穿衣,不能自己端碗吃饭,也不能像兄弟姐妹们一样帮助妈妈干家务活,她觉得自己成了家里 ...
-
C#中的DllImport
大家在实际工作学习C#的时候,可能会问:为什么我们要为一些已经存在的功能(比如 Windows中的一些功能,C++中已经编写好的一些方法)要重新编写代码,C#有没有方法可以直接都用这些原本已经存在的功 ...
-
eclipse导入javax.servlet.*的方法
1.下载web应用服务器tomact,网址http://tomcat.apache.org/download-80.cgi 这个根据自己系统进行选择. 2.将其加压到电脑中 3.在eclipse中添加 ...
-
HDU 1710 Binary Tree Traversals
题意:给出一颗二叉树的前序遍历和中序遍历,输出其后续遍历 首先知道中序遍历是左子树根右子树递归遍历的,所以只要找到根节点,就能够拆分出左右子树 前序遍历是按照根左子树右子树递归遍历的,那么可以找出这颗 ...
-
mysql error笔记1
mysql视图问题: The user specified as a definer ('root'@'%') does not exist 原因:由于root用户对全局host无访问权限,给root ...
-
java String对象的创建(jvm).
本人目前也开始学习虚拟机,在java中,有很多种类型的虚拟机,其中就以sum公司(当然现在已经是oracle了)的虚拟机为例,介绍可能在面试的时候用到的,同时对自己了解String有很大帮助,这里仅仅 ...
-
goahead cgi 及出现的问题解决
1. route.txt 配置cgi路径 route uri=/cgi-bin dir=/web handler=cgi 2.交叉编译生成cgi goahead 源码路径下 ./test/c ...
-
django 表单提交 post 、get
介绍 : django项目开发必须懂的知识点,下面使用的数据库是mysql , models.py 数据库表结构, # -*- coding: utf-8 -*-from __future__ im ...
-
js怎么把数字转化为字母(A,B.....AA,AB,..)
function createCellPos( n ){ var ordA = 'A'.charCodeAt(0); var ordZ = 'Z'.charCodeAt(0); var len = o ...