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

5.6对象

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

5.6.1对象的创建

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

Test test = new Test();

Test test = new Test("a");

        其参数说明如表1所示。

表1 创建对象语法中的参数说明
设置值描述
Test类名
test创建Test类对象
new创建对象操作符
"a"构造方法的参数

        test对象被创建出来时,就是一个对象的引用,这个引用在内存中为对象分配了存储空间。5.3节中介绍过,可以在构造方法中初始化成员变量,当创建对象时,自动调用构造方法。也就是说,在Java语言中,初始化与创建是被捆绑在一起的。
每个对象都是相互独立的,在内存中占据独立的内存地址,并且每个对象都具有自己的生命周期,当一个对象的生命周期结束时,对象就变成垃圾,由Java虚拟机自带的垃圾回收机制处理,不能再被使用。

注意:
在Java语言中,对象和实例事实上可以通用。

        【例1】创建人类并创建其对象
创建人类(People类),类中有名字、年龄和性别3个属性,并为People类创建有参和无参两种构造方法。以人类为模板,创建两个对象,分别为23岁名叫tom的小伙子、19岁名叫lily的小姑娘。

public class People{

        String name;

        int age;

        String sex;

        public People(){

        }

        public People(String name,int age,String sex){

                this.name = name;

                this.age = age;

                this.sex = sex;
}


public static void main(String[] args){

                People p1 = new People("tom",23,"男");

                People p2 = new People("lily",19,"女");

        }

}

5.6.2访问对象的属性和行为

        用户使用new操作符创建一个对象后,可以使用“对象.类成员”来获取对象的属性和行为。前文已经提到过,对象的属性和行为在类中是通过类的成员变量和成员方法的形式来表示的,所以当对象获取类成员时,也相应地获取了对象的属性和行为。
【例2】描述狗的特征
在Dog类中创建名字、颜色和声音3个属性,再创建一个“叫”的方法。以Dog类为模板创建两只狗,一只是白色且会汪汪汪叫的毛毛,一只是灰色且会嗷呜叫的灰灰。

public class Dog{    //狗String name;    //名字String Color;    //颜色String vioce;    //声音public Dog(String name,String color,String vioce){this.name = name;this.Color = color;this.vioce = vioce;}public void call(){    //叫System.out.println(vioce);}public static void main(String[] args){Dog d1 = new Dog("毛毛","白色","汪汪汪");System.out.println(d1.name+"的颜色是"+d1.Color);    //访问对象的属性    System.out.print(",叫起来的声音:");d1.call();    //访问对象的行为Dog d2 = new Dog("灰灰","灰色","嗷呜~");System.out.println(d2.name+"的颜色是"+d2.Color);System.out.print(",叫起来的声音:");d2.call();}
}

运行结果如下:

毛毛的颜色是白色,叫起来的声音:汪汪汪

灰灰的颜色是灰色,叫起来的声音:嗷呜~

5.6.3对象的引用

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

类名 对象的引用变量

        例如,一个People类的引用可以使用以下代码:

People tom;

        通常一个引用不一定需要有一个对象相关联。引用与对象相关联的语法如下:

People tom = new People();

        实际上真正的对象是“new People()”这段代码。为了方便开发者保存、调用对象,于是创建了一个People类型、名叫tom的引用变量。实际上,tom只是一段内存地址,用于标记“new People()”对象在内存中的位置。因为内存地址又长又乱,很难让人记住,所以Java语言利用引用变量帮开发者标记内存地址。开发者只要记住引用变量的名字,就能够在内存里找到对象数据。简单来说,tom是new People()的“代理人”。
既然tom是new People()的“代理人”,那么“new People()”对象能做的事,tom也能做。例如,下面这行代码:

new People().getClass();

        等价于:

People tom = new People();

tom.getClass();

5.6.4对象的销毁

        每个对象都有生命周期,当对象的生命周期结束时,分配给该对象的内存地址需要被回收。在其他语言中,需要用户手动回收废弃的对象。Java拥有一套完整的垃圾回收机制,用户不必担心废弃的对象占用内存,垃圾回收器会自动回收无用却占用内存的资源。
在学习垃圾回收机制之前,读者首先需要了解何种对象会被Java虚拟机视为“垃圾”。主要包括以下两种情况:
☑ 对象引用超过其作用范围,这个对象将被视为垃圾,如下所示。

{
Examle e = new Example();        //对象e超过其作用范围,将消亡

}

        ☑ 将对象赋值为null,如下所示。

{

        Examble e = new Example();

        e = null;        //当对象被置null值时,将消亡

}

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

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

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

http://www.dtcms.com/a/540176.html

相关文章:

  • 生命线与黑箱:LIME和Anchor作为两种事后可解释性分析
  • VMware安装配置CentOS 7
  • 链表算法题
  • 织梦制作wap网站高端网站开发建设
  • 网站建设公司销售经理职责全网最大的精品网站
  • 怎么做公司网站推广cms网站开发教程
  • 解决 OpenSSL 3.6.0 在 macOS 上 Conan 构建失败的链接错误
  • metaRTC7 mac/ios编程指南
  • Go语言-->Goroutine 详细解释
  • 船舶终端数据采集与监管平台一体化方案
  • 2025年10月28日Github流行趋势
  • 《红色脉络:一部PLMN在中国的演进史诗 (1G-6G)》 第14篇 | 6G畅想:通感一体、AI内生——下一代网络的愿景与挑战
  • 「Java EE开发指南」如何用MyEclipse设置Java项目依赖项属性?
  • 输电线路防外破在线监测装置是什么
  • MTK5G旗舰系列——天玑9500/9400/9300/9200/9000在AI和处理器性能、DDR频率及UFS的深度对比分析
  • 平板做网站服务器wordpress在线直播插件
  • 前端Jquery,后端Java实现预览Word、Excel、PPT,pdf等文档
  • 华为910B服务器(搭载昇腾Ascend 910B AI 芯片的AI服务器查看服务器终端信息
  • Spring JDBC实战:参数处理与嵌入式数据库
  • 图片转PPT:用Java高效处理PowerPoint的秘籍
  • Custom Animations for PPT (PowerPoint)
  • 沈阳网站哪家做的好做视频网站设备需求
  • 【数据工程】16. Notions of Time in Stream Processing
  • AOI在传统汽车制造领域中的应用
  • 搭建网站复杂吗微信公众号怎么做链接网站
  • 网站优化推广招聘wordpress后台打开超慢
  • Linux软件编程笔记三——标准IO(二进制)文件IO
  • 如何使用 TinyEditor 快速部署一个协同编辑器
  • pgsql常用函数
  • 企业落地 NL2SQL,需要的是 AI-ready data 和小模型