当前位置: 首页 > news >正文

第六章 类和对象(6)

4.6 对象

        JAVA是一门面向对象的程序设计语言,对象是由类实例化而来的,所有问题都通过对象来处理。对象可以通过操作类的属性和方法来解决相应的问题,因此了解对象的产生、操作和消亡是十分必要的。本节就来讲解对象在Java语言中的应用。

        4.6.1 对象的创建

        在4.1节中曾经讲解过对象,对象可以被认为是在一-类事物中抽象出的某一个特例,程序开发人员可以通过这个特例处理这类事物出现的问题。在JAVA语言中,通过new操作符创建对象。前文在讲解构造方法时介绍过,每实例化个对象就会自动调用次构造方法, 实质上这个过程就是创建对象的过程。准确地说,可以在JAVA语言中使用now操作符调用构造方法创建对象。语法如下:

Test test = new Test();
Test test = new Test("a");

        test对象被创建出来时,就是一个对象的引用,这个引用在内存中为对象分配了存储空间。6.3 节中介绍过,可以在构造方法中初始化成员变量,当创建对象时,自动调用构造方法。也就是说,在Java语言中,初始化与创建是被捆绑在一起的。

        每个对象都是相互独立的,在内存中占据独立的内存地址,并且每个对象都具有自己的生命周期,当一个对象的生命周期结束时,对象就变成垃圾,由JAVA虚拟机自带的垃圾回收机制处理,不能再破使用(对于垃圾回收机制的知识将在4.6.4 节中进行讲解)。 

        4.6.2 访问对象的属性和行为

        用户使用new操作符创建一个对象后, 可以使用“对象类成员"来获取对象的属性和行为。前文已经提到过,对象的属性和行为在类中是通过类的成员变量和成员方法的形式来表示的,因此当对象获取类成员时,也相应地获取了对象的属性和行为。

        4.6.3 对象的引用

        在JAVA语言中,尽管一切都可以被看作是对象,但真正的操作标识符实质上是一个引用,那么引用在JAVA中是如何体现的呢?语法如下:

类名 对象的引用变量类名 引用 = 对象的实体people tom = new people();

        4.6.4 对象的销毁

        每个对象都有生命周期,当对象的生命周期结束时,分配给该对象的内存地址需要要被回收。在其他语言中,需要用户手动回收废弃的对象。JAVA 拥有套完整的垃圾回收机制,用户不必担心废弃的对象会占用内存,垃圾回收器会自动回收无用却占用内存的资源。

        在学习垃圾回收机制之前,读者首先需要了解何种对象会被Java虚拟机视为“垃圾”。

        虽然JAVA的垃圾回收机制已经很完善,但垃圾回收器只能回收那些由new操作符创建的对象。某些对象不是通过new操作符在内存中获取存储空间的,这种对象无法被垃圾回收机制所识别。在JAVA中,提供了一个finalize(方法,这个方法是Obect类的方法,它被声明为protected, 用户可以在自己的类中定义这个方法。如果用户在类中定义了finalize()方法,在垃圾回收时会首先调用该方法,在下一次垃圾回收动作发生时, 才真正回收被对象占用的内存。

        需要明确的是,垃圾回收或finalize()方法并不保证一定会发生。如果JJAVA虚拟机内存损耗待尽,它将不会执行垃圾回收处理。

        由于垃圾回收不受人为控制,具体执行时间也不确定,因此finalize()方法也就无法执行。为此,JAVA提供了System.gc()方法来强制启动垃圾回收器,这与给120 打电话通知医院来救护病人的道理一样,主动告知垃圾回收器来进行清理。

         

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Unity Lua方向的面试真题详解
  • 容易中、见刊快的6本医学期刊推荐!
  • React Native 0.76版本发布
  • redis入门之redis数据库的基础操作(内含常见面试题)
  • Linux学习-模拟容器网络
  • 408:强化笔记|王道|DS|OS|CO|计网
  • qtdraw-使用qt绘图之开源源码学习
  • 举债豪赌,光正眼科深陷“资本迷局”
  • zookeeper是啥?在kafka中有什么作用
  • OpenGL函数之wglCreateContext
  • 在 csv 上增加计算列
  • 牛客小白月赛100(下)
  • Linux 8250串口控制器
  • 每日一练 | 根据优先级信息划分业务类型
  • IP学习——Fiveday
  • [deviceone开发]-do_Webview的基本示例
  • Computed property XXX was assigned to but it has no setter
  • css的样式优先级
  • ES6简单总结(搭配简单的讲解和小案例)
  • Flex布局到底解决了什么问题
  • log4j2输出到kafka
  • MySQL-事务管理(基础)
  • oldjun 检测网站的经验
  • Zsh 开发指南(第十四篇 文件读写)
  • 从零开始学习部署
  • 分布式事物理论与实践
  • 汉诺塔算法
  • 近期前端发展计划
  • 盘点那些不知名却常用的 Git 操作
  • 深度解析利用ES6进行Promise封装总结
  • 通过几道题目学习二叉搜索树
  • 温故知新之javascript面向对象
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • AI算硅基生命吗,为什么?
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • 昨天1024程序员节,我故意写了个死循环~
  • ​​​​​​​STM32通过SPI硬件读写W25Q64
  • ​卜东波研究员:高观点下的少儿计算思维
  • ​经​纬​恒​润​二​面​​三​七​互​娱​一​面​​元​象​二​面​
  • ​浅谈 Linux 中的 core dump 分析方法
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (Git) gitignore基础使用
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (附源码)计算机毕业设计ssm电影分享网站
  • (理论篇)httpmoudle和httphandler一览
  • (十)T检验-第一部分
  • (转)大道至简,职场上做人做事做管理
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • *算法训练(leetcode)第四十七天 | 并查集理论基础、107. 寻找存在的路径
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇