阅读java编程思想之一切都是对象
温故而知新---
1. 用句柄操作对象
现实生活中,我们可以把遥控器当作句柄,电视机当作对象。当我们拿到句柄(遥控器)的时候,我们是可以控制对象的(电视机)。比如说调节音量大小,色彩等。那么在程序里,也是一样的道理,因为程序源于生活嘛!
public class Tv {
/**
* 调节电视音量大小
*/
public void setSound(){
System.out.println("调节音量大小");
}
public void setChannel(){
System.out.println("调电视频道");
}
public static void main(String[] args) {
// 通过new获取到句柄t
Tv t = new Tv();
// 通过句柄t去操作电视机
// 调频道
t.setChannel();
// 调音量
t.setSound();
}
}
以上代码就是通过句柄去操作对象的一个实例,假设有一个电视Tv的类,它有两个方法(行为,我们能换电视频道,调音量)。我们通过new Tv()获取到句柄。然后通过句柄去操作Tv类(遥控去操作电视)。
2. 所有对象都必须创建(new)
当我们用new创建一个对象得到对象的句柄之后,我们才能去操作对象的方法。如果不用new去创建的话,即使得到句柄(遥控器),但是并没有对象(电视机)。这个时候去用句柄去操作对象的话就会报错。

从上面图片我们可以看到,当没有用new去创建对象而直接去调用对象方法的时候,就会报一个句柄没有初始化。
2.1 对象保存到什么地方(图片来源https://blog.csdn.net/aijiudu/article/details/72991993)

寄存器:是最快的保存区域,位于处理器内部,但是因为数量十分有限,所以寄存器是根据需要又编译器分配,我们对它没有直接的控制权,也不可能在自己的程序里找到寄存器存在的任何痕迹。
方法区(静态存储):所有类级别数据将被存储在这里(包括类的名称、方法信息、字段信息)、静态变量、常量以及编译器编译后的代码等,每个JVM只有一个方法区,它是一个共享的资源。
堆:(在堆里分配存储空间时会花掉更长的时间)所有的对象和它们相应的实例变量以及数组将被存储在这里,每个JVM同样只有一个堆区。由于方法区和堆区的内存由多个线程共享,所以存储的数据不是线程安全的。
栈区:对每个线程会单独创建一个运行时栈。对每个函数呼叫会在栈内存生成一个栈帧(Stack Frame)。所有的局部变量将在栈内存中创建。栈区是线程安全的,因为它不是一个共享资源。所以句柄存在栈区里,而java对象并不放在其中。
本地方法栈:本地方法栈与Java栈的作用和原理非常相似。区别只不过是Java栈是为执行Java方法服务的,而本地方法栈则是为执行本地方法(Native Method)服务的。在JVM规范中,并没有对本地方发展的具体实现方法以及数据结构作强制规定,虚拟机可以自由实现它。在HotSopt虚拟机中直接就把本地方法栈和Java栈合二为一。
阅读java编程思想之一切都是对象的更多相关文章
- 《java编程思想》一切都是对象
1. 用引用操纵对象 在Java中一切皆对象,我们平常在对java中的类进行操作时,其实操作的不是对象本身而是对象的引用.我们可以将这想象成用遥控器(引用)操作电视机(对象),只要握住这个遥控器,就能 ...
- JAVA编程思想(1) - 一切都是对象
-"假设我们说还有一种不用的语言,那么我们就会发觉一个有些不同的世界" 1. 用引用操纵对象 每种编程语言都有自己的数据处理方式. 有些时候,程序猿必须时刻留意准备 ...
- Java程序员的日常——《编程思想》一切都是对象
今天终于看完了第一章,哈哈,万事开头难....刚开始被编程思想的第一章给蒙住了,讲一堆理论,没什么意思.从第二章开始,真正的开始讲解Java相关的内容,有了一定的开发经验后,再次阅读起来,感觉收获良多 ...
- 阅读java编程思想的总结(一)
学而不思则罔,思而不学则殆 一.对象(Object) 1.机器模型(方案空间),实际解决问题的问题模型(问题空间). 2.我们将问题空间中的元素以及它们在方案空间的表示物称为“对象”(Object). ...
- Java编程思想 4th 第1章 对象导论
所有编程语言都提供抽象机制. 面向对象编程似乎是一种很好的编程思想和方式,面向对象编程中的对象简洁描述是:对象具有状态.行为和标识.状态指的是数据存储,存储的数据能反应状态:行为指的是方法,方法表示对 ...
- 《Java编程思想》笔记 第一章 对象导论
1.抽象过程 Q:什么是对象??? A: 1) 万物皆对象 --- 对象具有状态,行为和标识 2)程序是对象的集合,他们通过发送消息来告诉彼此要做的 3)通过创建包含现有对象的包的方式来创建新类型 ...
- Java编程思想 - 第11章 持有对象
· 大量笔记存放在Github Java文件中,请移步查看:https://github.com/iGuure/AndroidCodeHub/tree/master/Java%20pratice/Th ...
- Java编程思想读书笔记 第一章 对象导论
抽象过程 纯粹的面向对象程序设计方式: 万物皆为对象: 对象可以存储数据,还可以在其自身执行操作 程序是对象的集合: 通过发送消息告诉彼此要做的 每个对象都有自己的由其它对象构成的存储:可以在程序中构 ...
- Java编程思想阅读收获
15年8月份买了一本Java编程思想第四版中文版.之所以买中文版是因为我试读了同事的英文版发现自己英语水平还是有限,单词虽然认识,但对很多句子把握不准,这样看书太慢了,要理解英文还要理解技术有些hol ...
随机推荐
- 聊聊Java 虚拟机的“那点事”
本文的使用方法: 这篇文章是一个总结性质的文章,是我在看完<深入理解 Java 虚拟机>后写的(里面可能会有些不准确的地方,欢迎大家指出),本文从头读到尾就是一个虚拟机大部分知识点的框架, ...
- Ubuntu18.04 安装 Mysql 5.7 问题
在安装完Mysql5.7后 没有让你输入的密码的时候,便会生成一个默认的密码. 生成的密码在debian.cnf 文件中 记住用户名和密码.然后去登陆 mysql -udebian-sys-maint ...
- python 错误、调试、单元测试、文档测试
错误分为程序的错误和由用户错误的输入引起的错误,此外还有因为各种各样意外的情况导致的错误,比如在磁盘满的时候写入.从网络爬取东西的时候,网络断了.这类错误称为异常 错误处理 参考链接:https:// ...
- 用maven对ssm进行整合
网上有很多ssm整合的教程,这里给像我这样的初学的新手提供一个整合方法,同时也记录一下自己的学习进度. 同时推荐观看相关视频 https://www.bilibili.com/video/av536 ...
- sql server 安装出现需要sqlncli.msi文件,错误为 microsoft sql server 2012 native client
在安装sql server 2017 时出现 弹框标题为 microsoft sql server 2012 native client 内容为需要sqlncli.msi文件 去本地目录找本身的那 ...
- python中优雅的杀死线程
上一篇博客中,杀死线程采用的方法是在线程中抛出异常 https://www.cnblogs.com/lucky-heng/p/11986091.html, 这种方法是强制杀死线程,但是如果线程中涉 ...
- openstack连接报错net_mlx5: cannot load glue library: libibverbs.so.1
部署openstack controller节点,第二天登录主机提示错误信息 Connecting to 10.1.10.151:22...Connection established.To esca ...
- 其他综合-CentOS 7 rsync+nginx实现公网yum源
CentOS 7 rsync+nginx实现公网yum源 1.实验描述 镜像同步公网 yum 源上游 yum 源必须要支持 rsync 协议,否则不能使用 rsync 进行同步.CentOS 7.6 ...
- jetbrains 系列编辑器
下载 webstorm下载地址:https://www.jetbrains.com/webstorm/download/previous.html idea下载地址:https://www.jetbr ...
- vmworkstation pro安装
runtime dll安装程序未能完成安装 解决方法: 1.出现这个问题的时候不要点确定(如果点了确定,会找不到步骤4中的文件夹) 2.win+R调出 '运行' 3.输入%temp%,进入C:\Use ...