《java编程思想》一切都是对象
1. 用引用操纵对象
在Java中一切皆对象,我们平常在对java中的类进行操作时,其实操作的不是对象本身而是对象的引用。我们可以将这想象成用遥控器(引用)操作电视机(对象),只要握住这个遥控器,就能保持与电视机的连接,当想换频道时,实际操作的是遥控器(引用),然后再由遥控器操作电视机(对象)。如果想在房间里面走走,并且想操作电视机,这时候只需要带上遥控器(引用)就可以了,并不需要电视机(对象)。
此外,即使没有电视机,遥控器也可以单独存在,也就是说,你拥有一个引用,并不一定需要有一个对象与它关联。
如果想操作一个词或者句子,可以创建一个String引用,String s; tip: 这里创建的只是一个引用,并不是对象,如果现在向 S 发送一个消息,就会返回一个运行时错 误。
在使用任何引用前,必须为其指定一个对象,如果想使用还是一个 null 的引用,在运行时将会报错
2. 对象存储在什么地方
寄存器:这是最快的存储区,因为它位于不同于其他其他存储区的地方---处理器内部。但是寄存器的数量有限,所以寄存器根据需求进行分配。寄存器不能直接控制, 也不能在程序中感觉到任何存在的迹象
堆栈: 位于通用RAM(随机访问存储器)中,但通过堆栈指针可以从处理器那里获得支持。堆栈指针若向下移动,则分配新的内存,若向上移动,则释放那些内存,这是 一种快速有效的分配存储方式,仅次于寄存器。创建程序时,java系统必须知道存储在堆栈内所有项的确切声明周期,以便上下移动堆栈指针。这个约束限制了 程序的灵活性,所以虽然某些java数据存储在堆栈中,特别是对象引用,但java对象并不存储在堆栈中。
堆: 一种通用的内存池,用于存放所有的Java对象,堆不同于堆栈的好处是:编译器不需要知道存储的数据在堆里存活多长时间,因此,在堆里分配存储有很大的灵活 性。当需要 一个对象时,只需要用 new 写一行简单的代码,当执行这行代码时,会自动在堆里进行存储分配 。但是,用堆进行存储分配和清理可能比堆栈进行存 储分配需要更多的时间
常量存储: 常量池
3. 特例:基本类型
| 基本类型 | 大小 | 最小值 | 最大值 | 包装器类型 | 字节 |
| byte | 8 bits | -128 | 127 | Byte | 1 字节 |
| short | 16 bits | -2的15次方 | 2的15次方减1 | Short | 2字节 |
| int | 32 bits | -2的31次方 | 2的31次方减1 | Integer | 4字节 |
| long | 64 bits | -2的63次方 | 2的63次方减1 | Long | 8字节 |
| float | 32 bits | 2的-149次方 | 2的128次方减1 | Float | 4字节 |
| double | 64 bits | 2的-1074次方 | 2的1024次方减1 | Double | 8字节 |
| boolean | -- | -- | -- | Boolean | 1字节 |
| char | 16 bits | -- | -- | Character | 2字节 |
4. 永远不需要销毁对象
在java中由new创建的对象,只要需要就会一直存在,但是如果让对象继续存在,就会造成对象填满内存空间,进而影响程序的运行。所以在Java中有一个垃圾回收器,用来监视所有用new创建的对象,并识别出不再使用的对象,随后,释放这些对象的内存空间,供其他对象使用。
5. 创建新的数据类型:类
| 基本类型 | 默认值 |
| boolean | false |
| char | '\uooo'(null) |
| byte | (bye)0 |
| short | (short)0 |
| int | 0 |
| long | 0L |
| float | 0.0f |
| double | 0.0d |
当变量作为类的成员使用时,java会赋给基本类型一个默认值,确保他们会执行初始化。但是这个方法不适用于局部变量。如果在某个方法中定义了一个局部变量X; 那么X得到的可能是任意一个值,并且不会被自动初始化。所以在使用局部变量前,应该先赋予一个适当的值。
6. 方法、参数和返回值
方法的参数列表指定要传递给方法什么样的信息,这些信息像java中其他信息一样,采用的都是对象形式,因此在参数列表中必须指定每个所传递对象的类型和名字。 并且像java中任何传递对象的场合一样,这里传递的也是引用。
值传递:就是在方法调用的时候,实参是将自己的一份拷贝赋给形参,在方法内对参数的值进行修改不影响原来实参的值
引用传递:就是在方法调用的时候,实参将自己的地址传递给形参,在方法内对参数的修改实际上是对该实参的实际操作。
《java编程思想》一切都是对象的更多相关文章
- 2.JAVA编程思想——一切都是对象
一切都是对象 欢迎转载.转载请标明出处:http://blog.csdn.net/notbaron/article/details/51040221 虽然以C++为基础,但 Java 是一种更纯粹的面 ...
- java编程思想 一切都是对象
java是一种面向对象程序设计语言,一切都是对象,并且用引用操作对象,如一个电视机就是一个对象,而操作电视机的遥控器就是引用,引用可以单独存在,如遥控器可以单独存在. String s; 这里只是创建 ...
- <Java编程思想>读书笔记(1)-对象导论、一切都是对象
1.面向对象编程:OOP (Object-oriented Programming) 2.Alan Kay 总结的面向对象语言5个基本特性: 1) 万物皆为对象 2) 程序是对象的集合,他们通过发送消 ...
- Java编程思想(第一章 对象入门)总结
面向对象编程(oop) 1.1抽象的进步 所有编程语言的最终目的都是提供一种“抽象”方法. 难点是 在机器模型(位于“方案空间”)和实际解决问题模型(位于“问题空间”)之间,程序员必须建立起一种联 ...
- 《Java编程思想》读书笔记-对象导论
计算机是头脑延伸的工具,是一种不同类型的表达媒体.本文以背景性的和补充性的材料,介绍包括开发方法概述在内的面向对象程序设计(Object-oriented Programming,OOP)的基本概念. ...
- java编程思想(1)--对象导论
对象导论: 1.1 抽象过程 所有的语言都有抽象机制,抽象是解决复杂问题的根本方法.例如:汇编语言是对底层机器的轻微抽象.命令式语言(如:FORTRAN.BASIC.C)又是对汇编语言的抽象. jav ...
- Java编程思想之十一 持有对象
如果一个程序只包含固定数量的且其生命期都是已知的对象,那么这是一个非常简单的程序. 11.1 泛型和类型安全的容器 使用ArrayList:创建一个实例,用add()插入对象,然后用get()访问对象 ...
- Java编程思想阅读收获
15年8月份买了一本Java编程思想第四版中文版.之所以买中文版是因为我试读了同事的英文版发现自己英语水平还是有限,单词虽然认识,但对很多句子把握不准,这样看书太慢了,要理解英文还要理解技术有些hol ...
- Java编程思想 4th 第2章 一切都是对象
Java是基于C++的,但Java是一种更纯粹的面向对象程序设计语言,和C++不同的是,Java只支持面向对象编程,因此Java的编程风格也是纯OOP风格的,即一切都是类,所有事情通过类对象协作来完成 ...
- Java编程思想读书笔记(一)【对象导论】
2018年1月7日15:45:58 前言 作为学习Java语言的经典之作<Java编程思想>,常常被人提起.虽然这本书出版十年有余,但是内容还是很给力的.很多人说这本书不是很适合初学者,我 ...
随机推荐
- 搭建websocket消息推送服务,必须要考虑的几个问题
近年,不论是正在快速增长的直播,远程教育以及IM聊天场景,还是在常规企业级系统中用到的系统提醒,对websocket的需求越来越大,对websocket的要求也越来越高.从早期对websocket的应 ...
- Ios/Android h5 唤起本地APP
纠结两天(浏览器中唤起本地APP),一直找不到解决方案,今天总算基本搞定. ps:吐槽一下 魔窗那篇文章,为什么就不直接把js代码开源开源,混淆后的代码看得我好恼火 参考文章:魔窗解决方案.京东解决方 ...
- #AcWing系列课程Level-2笔记——5.高精度“+”算法
高精度"+"算法 编写高精度"+",记住下面的过程,代码也就游刃有余了! 1.首先我们要明白大整数是如何存储的? 2.其次存储完,如何运算? 高精度" ...
- VUE实现Studio管理后台(十):OptionBox,一个综合属性输入界面,可以级联重置
为了便于阅读代码,已经把测试数据分离出来,放在了mock目录下: 阅读代码的话,稍微留意一下就好.本次介绍RXEditor界面最重要的部分,属性输入组件,该组件可以显示是否有数据被修改,还可以批量重置 ...
- 02 layui 下载和搭建环境
Layui官方网站 官方网站:https://www.layui.com/ 下载地址:https://res.layui.com/static/download/layui/layui-v2.5.5. ...
- Core + Vue 后台管理基础框架2——认证
1.前言 这块儿当时在IdentityServer4和JWT之间犹豫了一下,后来考虑到现状,出于3个原因,暂时放弃了IdentityServer4选择了JWT: (1)目前这个前端框架更适配JWT: ...
- 一套代码同时支持.NET Framework和.NET Core
转自:https://www.cnblogs.com/tianqing/p/11614303.html 在.NET Core的迁移过程中,我们将原有的.NET Framework代码迁移到.NET C ...
- openwrt 为软件包添加服务
手动修改 rc.local 加入也可以实现自启动,缺点手动修改太麻烦,停止只能用 kill . 配置成服务最方便了,可以启用或禁用,启动,停止,重启非常方便. 在openwrt 中使用服务 servi ...
- ASP.NET Core 中jwt授权认证的流程原理
目录 1,快速实现授权验证 1.1 添加 JWT 服务配置 1.2 颁发 Token 1.3 添加 API访问 2,探究授权认证中间件 2.1 实现 Token 解析 2.2 实现校验认证 1,快速实 ...
- kafka集群搭建及结合springboot使用
1.场景描述 因kafka以前用的不多,只往topic中写入和读取过数据,这次刚好又要用到,记录下kafka集群搭建及结合springboot使用. 2. 解决方案 2.1 简单介绍 (一)关于kaf ...