《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编程思想>,常常被人提起.虽然这本书出版十年有余,但是内容还是很给力的.很多人说这本书不是很适合初学者,我 ...
随机推荐
- UBB代码
UBB代码是HTML(标准通用标记语言下的一个应用)的一个变种,是Ultimate Bulletin Board (国外的一个BBS程序)采用的一种特殊的TAG.您也许已经对它很熟悉了.UBB代码很简 ...
- 从零开始打造 Mock 平台 - 核心篇
前言 最近一直在捣鼓毕设,准备做的是一个基于前后端开发的Mock平台,前期花了很多时间完成了功能模块的交互.现在进度推到如何设计核心功能,也就是Mock数据的解析. 根据之前的需求设定加上一些思考,用 ...
- SpringBoot整合Mybatis对单表的增、删、改、查操作
一.目标 SpringBoot整合Mybatis对单表的增.删.改.查操作 二.开发工具及项目环境 IDE: IntelliJ IDEA 2019.3 SQL:Navicat for MySQL 三. ...
- 前端AES加密解密
最开始使用的aes-js的npm包,后来发现npm上面那个包只能加密16个长度的字节,非16个长度的字符串就会报错,后来使用的是crypto-js, AES总共有四种加密方式,我们使用的CBC方式: ...
- 登录页面判断session退出登录清空session
1 2 3 4 5 6 if(empty($_POST)){ $_SESSION = array(); if(isset($_COOKIE[session_name()])){ ...
- Design Patterns | 02 什么样的代码是好代码
目录 01 - 什么是好的代码? 02 - 评价代码的标准有哪些 2.1 可维护性(maintainability) 2.2 可读性(readability) 2.3 可扩展性(extensibili ...
- Oracle根据实体类比对2个数据库结构差异(demo)
源起 在公司做项目时 经常出现 实体结构和线上的数据结构以及公司开发库数据结构不匹配的问题 但是又不能直接把开发库导入到生产库因为生产库已经有实际数据了 所以弄了一个小工具 此处只做记录用 demo级 ...
- Ansible-1 基本认识及清单与模块
ansible 一.常用的自动化运维工具 1.puppet 基于ruby开发,采用c/s架构,扩展性强,基于ssl,远程命令执行相对较弱, 2.saltstack 基于python开发,采用C/S架构 ...
- 使用vue-router+vuex进行导航守卫(转)
前言:想要实现登录后才能进入主页等其他页面,不然都会跳转到登录页.但是Vuex有个不够完美的地方,一旦刷新页面就会没了,所以还要用到localStorage. 一.router.js: import ...
- 手动生成WebService代理类
方式一: 手动生成WebService代理类需要把一句生成语句,如 wsdl.exe /l:cs /out:D:/ProxyServices.cs http://localhost/WebServic ...