本文是读《Thinking in Java》第二章一切都是对象的总结。文中说,学习不同的语言就会发现不同的世界,而我认为还是同一个世界,只是不同的思想罢了。
什么是对象
Java是基于C++所以他也是一门面向对象的语言,在这门语言中,世间万物皆可为对象,如果觉得有不是对象的,那只是没有理解到罢了。
那么什么是对象呢?
1 | 《百度百科》的解释: |
是的,显然我们说的应该是第一层含义,是指行动或思考时的目标事物。而对于这种有前提的目标来说,我们往往只会考虑该目标的某些东西,例如我们吃饭用的桌子,我们知道它是什么做的(材质),它是用来放东西的(作用),这当然就正好对应到对象中的字段和方法。而抽象出来的这个对象我们往往都不能列举完现实中的所有属性和方法,只提取有用的,能用到的东西即可,这就是需要我们去思考的东西,哪些东西需要,哪些不需要。
从何而来又去向何方
从定义中不难发现,对象是我们行动或思考时就存在的,只是我们没有用它而已,但这只是抽象上的说法,我们需要的是实实在在的代码逻辑,计算机能懂的东西。对象是行动或思考时的东西,而这样的东西有很多相似的,我们就把这些相似的东西称为类,相当于模板,就能让计算机根据模板快速的创建好这样的对象。
类
作为一个模板,它同样包含字段和方法,字段的类型可以是基本数据类型或者自定义类型。每个类都有自己的唯一路径,即包名+类名,若这个路径与系统提供的类完全相同,则会出错,这就与类的加载有关,这里就不做赘述了。作为类及其字段和方法都有一个访问修饰符,方便控制让哪些可以调用。包括private、protected、public以及默认。还有其他关键字,以后会单独细说,例如static,final,volatile等。
字段
其中基础类型的各个字段都有默认值,bool类型默认是false,char默认是’u0000’(null),其他基本类型都是默认为0,自定义或系统的类默认值都为null。
方法
包含了方法名,参数名,返回类型以及方法体。其中每个类都有自己的构造函数,用于创建对象。在写法上没有返回类型。在程序中,对象都存在一个从生到死的过程,包括:
- 创建
- 存储
- 销毁
创建
对象的创建就像出生,常常通过一个new的关键字加上类的构造函数。例如:
1 | String str = new String("abc"); |
这一句代码就创建了一个”abc”的字符串,并赋值给了str这个变量,str就是对象的引用,具有所有字符串这种类的所有字段和方法,只是有的字段和方法不能直接使用而已。
存储
对于对象都是存储在虚拟机的java堆上的,这个String对象也不例外,而str这个对象的引用是存在java虚拟机栈的局部变量表中,对于”abc”这个变量本身又存在字符串常量池中。
销毁
不好意思,你没有销毁对象的权利,因为java提供了一套垃圾回收机制,在回收时只要没有被引用的对象都会被回收,即销毁。而什么时候回收,怎么回收这些是java虚拟机的内容,就不在这里展开了。
结束语
内容不多,总感觉有点虎头蛇尾,一是对象这一个概念要引出的东西太多,他能把这本书的所有内容都引出来;二是水平有限,只能列举出一些我理解的东西,而各个部分细致的也会在之后慢慢介绍。