《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编程思想>,常常被人提起.虽然这本书出版十年有余,但是内容还是很给力的.很多人说这本书不是很适合初学者,我 ...
随机推荐
- OCR场景文本识别:文字检测+文字识别
一. 应用背景 OCR(Optical Character Recognition)文字识别技术的应用领域主要包括:证件识别.车牌识别.智慧医疗.pdf文档转换为Word.拍照识别.截图识别.网络图片 ...
- 在Shadow DOM使用原生模板
原生模板的优势 延迟了资源加载 延迟了加载和处理模板所引用的资源的时机,这样,用户就能够在模板中使用任意多的资源,却不阻碍页面的渲染. 延迟了渲染内容 无论模板在什么位置,浏览器不会把模板中的内容直接 ...
- JZOJ 5328. 【NOIP2017提高A组模拟8.22】世界线
5328. [NOIP2017提高A组模拟8.22]世界线 (File IO): input:worldline.in output:worldline.out Time Limits: 1500 m ...
- OOM when allocating tensor of shape [] and type float [[node conv2d_224/kernel/Initializer/random_uniform/min (defined at ./intances/utils.py:19) ]]
当你们在用模型加载,tensorflow-gpu预测的时候,有没有出现这样的错误?? 经过网上的资料查阅,更多的解释是GPU的显存不足造成的,于是乎,我查看了一下GPU显存:nvidia-smi 不看 ...
- 峰哥说技术:06-手撸Spring Boot自定义启动器,解密Spring Boot自动化配置原理
Spring Boot深度课程系列 峰哥说技术—2020庚子年重磅推出.战胜病毒.我们在行动 06 峰哥说技术:手撸Spring Boot自定义启动器,解密Spring Boot自动化配置原理 Sp ...
- 置顶,博客中所有源码 github
所有项目源代码,开源地址. 作者 github 主页 https://github.com/nejidev 目前开源项目有: 1, linux tea5767 at24c08 mmap 实现fm 收音 ...
- MVC项目中存储公用链接方法
小白成长记第一篇,随手记录一下小常识 将固定地址写在web.config文件appSettings中 Controller调用方法:
- Robotutor Scratch3.0 在线编程平台升级啦!
Robotutor推出的Scratch3.0在线编程平台受到很多编程老师和学员的喜爱,上一个版本我们提供了用户注册,找回密码,个人项目的在线保存和浏览,社区分享评论. 我们根据实际的教学需要,用户角色 ...
- 爬虫前奏——代理ip的使用
如果同一个IP短时见内多次访问统一网页,可能会被系统识别出是爬虫,因此使用代理IP可以很大程度上解决这一问题 常用的代理有: 西刺免费代理:www.xicidaili.com 快代理:www.kuai ...
- 【Python】2.19学习笔记 成员运算符,身份运算符,运算符优先级
成员运算符 暂时不会用,等学链表时再补充 \(in\) 与 \(not in\) \(in\):如果在指定序列中找到指定值,则返回\(true\) \(not in\):如果在指定序列中找到指定值,则 ...