code学习

IT技术-基础篇 Java对象了解下 对象有需要的么我这一大把儿

作者:ITMonk

前言

其实Java基础篇开篇就应该唠“对象”这个概念,因为它是Java这门语言的灵魂,但也不算晚,想了一下有了前面几个篇幅的描述,这个时候回头聊聊“对象”能更好的理解吧,哈哈(自我安慰,瑟瑟发抖中)。

IT技术-基础篇 Java对象了解下 对象有需要的么我这一大把儿

一切都是对象

如果我们说另一种不同的语言,那么我们就会发觉一个有些不同的世界。

在Java语言中,开始进行设计前需要有一个思想上的转变,那就是将现实思想转换到面向对象的世界。

有人就会问“对象”对于Java到底是个啥?咱们现实生活中男女处对象,对了处对象,你也可以把Java中的“对象”理解为现实中的对象,当有了对象,你就可以做很多事情,拉手亲嘴看电影,还有…呃好吧大家自行脑补吧。没对象的,那你只能努力了。

在Java世界,做任何操作都是面向“对象”的,Java开发者为了统一操作,引入了“引用”的概念,比如通过遥控器(引用)操作纵电视机(对象),同时两者又是独立的。

IT技术-基础篇 Java对象了解下 对象有需要的么我这一大把儿

创建对象

在Java语言中创建了引用,就是期望能有一个对象与其关联,否则毫无意义。通过new操作符来实现一个对象的创建,就如同单词字面意思一样新的,给我一个新对象。前面篇章也提及过创建对象就是在开辟空间,那么对象存放在哪里呢?下面我梳理了下存放位置。

  • 寄存器:位于处理器内部的最快存储区,数量有限要按需分配,对于程序是无感的;
  • 堆栈:位于通用RAM(随机访问存储器),操作是使用堆栈指针进行的,向下移动分配内存,向上移动释放内存。效率上仅次于寄存器,但实现机制大大限制了程序的灵活性(因此对象并不存放这里,引用可以存放于此),因为便于移动堆栈指针必须要确定其存放数据的生命周期;
  • 堆:位于RAM的通用内存池,所有的Java对象均存放于此。堆不需要像堆栈一样要确切知道数据的生命周期所以这大大增加了程序的灵活性,但这也约束了堆在分配和清理上的效率。
  • 常量存储:常量直接存放在程序代码内部,这样保证它们的安全(无法改变)。但嵌入式系统常量会与其它部分隔离开,可选择ROM(只读存储器);
  • 非RAM存储:若数据存活于程序之外,比如流对象和持久化对象,流对象会转为字节流传输至其它设备,持久化对象比如要把下载好的音乐转存在U盘上,这样通过序列化的形式在固有存储方式与对象间来回转换。
IT技术-基础篇 Java对象了解下 对象有需要的么我这一大把儿

不需要考虑手动销毁的对象

什么要销毁对象程序中分配空间的同时也要回收,如果无限制地只分配不回收,那有多少资源都是不够用的,但对于分配与回收是很难在设计时十分把握的准确的,从内存泄露再到系统宕机这都是在毫厘之间的,Java语言开发者为我也是操碎了心,不好管理是吧那我来帮你们做。哈哈。

针对上述的引入了作用域的概念,其决定了变量的可见性和生命周期,那么对象的作用域呢,对象与基本类型的生命周期还不一样,对象在new之后就会一直存在,只是指向它的引用可能在超出作用域而自然失效,这也就代表着这个对象再也不会被使用到了。

那么这样的对象什么时候被销毁呢,Java引入了垃圾回收机制来通过识别哪些对象不再被引用,然后回收其所占用的空间,这样便实现了自动释放。(后续咱们会针对垃圾回收机制来一篇专讲吧,其机制还是有必要弄清楚的虽然使用者不再关心回收)

IT技术-基础篇 Java对象了解下 对象有需要的么我这一大把儿

这样讲吧类就是一个类型的模具,而对象是通过这个模具制出来的成品,这就确定了成品一定是模具对应的类型,二者之间是一对多的关系(换句话讲就是一个模具可制做出来很多成品),前面篇章里提到的String、StringBuilder以及基本类型对应的封装类等等,都是Java固有常驻类,通过已有的来推写新的类,那就简单多了,创建类也有固有的写法,只需要用关键字class修改对应自定义的类名即可完成类的创建。

后话

虽然Java语言到处是对象,但现实生活中处对象可一定得专一,不能三心二意的,要不会内存泄露的哦。(别打我,溜了溜了)。

回见了您。

IT技术-基础篇 Java对象了解下 对象有需要的么我这一大把儿