首页 理论教育 Java对象和类-Java程序设计的理实一体化教程

Java对象和类-Java程序设计的理实一体化教程

时间:2023-11-16 理论教育 版权反馈
【摘要】:Java 作为一种面向对象语言,支持以下基本概念:· 多态;· 继承;· 封装;· 抽象;· 类;· 对象;· 实例;· 方法;· 重载。下面通过一个简单的类来理解下Java 中定义类的同时,定义多个成员变量和多个成员方法。文件4-2Example02.java执行结果用两种方法建立对象示例。Java 最大的特点就是面向对象。

Java对象和类-Java程序设计的理实一体化教程

Java 作为一种面向对象语言,支持以下基本概念:

· 多态

· 继承;

· 封装;

· 抽象;

· 类;

· 对象;

· 实例;

· 方法;

· 重载。

本节将重点研究对象和类的概念。

面向对象的编程思想是力图让程序中对事物的描述与该事物在现实中的形态保持一致。为了做到这一点,面向对象的思想中提出了两个概念,即类和对象。其中,类是对某一类事物的抽象描述,而对象用于表示现实中该类事物的个体。接下来通过一个图例来抽象描述类与对象的关系,如图4.1 所示。

图4.1 类与对象的关系示例

图4.1 可以将玩具模型看作一个类,将一个玩具看作对象,从玩具模型和玩具之间的关系便可以看出类与对象之间的关系。类用于描述多个对象的共同特征,它是对象的模板。对象用于描述现实中的个体,它是类的实例。从图中可以明显看出对象是根据类创建的,并且一个类可以对应多个对象。

图4.1 可以将人看作一个类,将每个具体的人(如小韩、小石等)看作对象,从人与具体个人之间的关系便可以看出类与对象之间的关系。类用于描述多个对象的共同特征,它是对象的模板,而对象用于描述现实中的个体,它是类的实例。对象是类的具体化,并且一个类可以对应多个对象。

1. Java 中的类

类可以看作创建Java 对象的模板,它描述一类对象的行为和状态。在面向对象的思想中最核心的就是对象,为了在程序中创建对象,首先需要定义一个类。类是对象的抽象,它用于描述一组对象的共同特征和行为。类中可以定义成员变量和成员方法,其中成员变量用于描述对象的特征,也被称作属性,成员方法用于描述对象的行为,可简称为方法。

由于对象是虚拟出来的东西,是看不见摸不着的,要想在程序中使用对象,就必须找到描述对象的方式,定义一个类就可以解决这个问题。将一系列特征相似的对象中的共同属性和方法抽象出来,用一段特殊的代码来进行描述,这段特殊的代码称为一个类。

2. Java 中的对象

对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃和跑等。

现在来深入了解什么是对象。看看周围真实的世界,会发现身边有很多对象,比如车、狗、人等。所有这些对象都有自己的状态和行为。对比现实对象和软件对象,它们之间十分相似。软件对象也有状态和行为。软件对象的状态就是属性,行为通过方法体现。在软件开发中,方法操作对象内部状态的改变,对象的相互调用也是通过方法来完成。一个全面的类定义比较复杂,完整格式包括如下内容:

为了让大家更清楚地了解Java 中类的定义,首先知道Java 中的类使用class 关键字来进行定义,后面跟上类的名称。定义的Person 类如下所示:

其中,Person 是类名,age 是成员变量,speak()是成员方法。在成员方法speak()中可以直接访问成员变量age。

在定义类的过程中,可以同时定义多个成员变量和多个成员方法。下面通过一个简单的类来理解下Java 中定义类的同时,定义多个成员变量和多个成员方法。

在上面的例子中:类名为Dog,其中breed、age、color 为Dog 类中的成员变量。这个Dog类中拥有多个方法,barking()、hungry()和sleeping()都是Dog 类的方法。

3. 对象的创建与使用

应用程序想要完成具体的功能,仅有类是远远不够的,还需要根据类创建实例对象。在Java 程序中可以使用new 关键字来创建对象,具体格式如下:

例如,创建Person 类的实例对象代码如下:

在上面的代码中,“new Person()”用于创建Person 类的一个实例对象,“Person p”则是声明了一个Person 类型的变量p。中间的等号用于将Person 对象在内存中的地址赋值给变量p,这样变量p 便持有了对象的引用。在内存中变量p 和对象之间的引用关系如图4.2 所示。

图4.2 变量p 与对象之间的引用关系

创建对象的两种常用方法:

(1)先声明再创建。

① 对象声明:声明一个对象,包括对象名称和对象类型,格式:类名对象名;

② 对象创建:使用关键字new 来创建一个对象,格式:对象名=new 类名();

初始化:使用new 创建对象时,会调用构造方法初始化对象。

【例4.1】通过Person 类,使用先声明再创建对象的方法建立对象b,如文件4-1 所示。

文件4-1 Example01.java

执行结果

(2)一步到位法。

为了让大家加深印象,下面定义一个人类(Person)(包括名字、年龄)。用一步到位法去创建一个对象。

【例4.2】利用一步到位法,对Person 类建立2 个对象p1、p2,并分别调用speak()方法,如文件4-2 所示。

文件4-2 Example02.java

执行结果

【例4.3】用两种方法建立对象示例。

在明白对象是如何在内存中存在后,请大家再看看下面的思考题,请问会输出什么信息?如文件4-3 所示。

文件4-3 Example03.java

(www.xing528.com)

执行结果

通过上述例子可以知道,在创建Person 对象后,可以通过对象的引用来访问对象所有的成员,如上例中所使用到的p1.age 表示调用实例p1 中的成员变量age;p2.speak()表示调用实例p2 中的成员方法speak()。因此,可以得出访问实例变量和方法具体格式如下:

对象引用.对象成员

通过已创建的对象来访问成员变量和成员方法,如下所示:

实例化对象语法格式:

类名实例名 = new 类名();

访问类中的变量语法格式:

实例名.变量名;

访问类中的方法语法格式:

实例名.方法名();

下面来展示如何访问实例变量和调用成员:

编译并运行上面的程序,产生如下结果:

通过上述例子,我们逐步理解了类和对象的关系。把狗的特性提取出来就形成狗类,在狗类中创建一个具体的狗就是狗类的一个对象(实例)。

注意:从类到对象,目前有几种说法:① 创建一个对象;② 实例化一个对象;③ 对类实例化……以后大家听到这些说法,不要模糊。其实对象就是实例,实例就是对象。Java 最大的特点就是面向对象。要透彻地掌握类,必须要逐步了解类的构成。首先,了解只含有成员变量的类。语法格式如下:

如:建立一个猫类Cat。

其中,age、name、color 都是Cat 类中的成员变量。

一个类可以包含以下类型变量:

(1)局部变量。在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。

(2)成员变量。成员变量是定义在类中、方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块调用访问。成员变量是类的一个组成部分,一般是基本数据类型,也可以是引用类型。比如前面定义狗类的int age 就是成员变量。

在Java 中,定义在类中的变量被称为成员变量,定义在方法中的变量被称为局部变量。如果在某一个方法中定义的局部变量与成员变量同名,这种情况是允许的,此时通过变量名访问到的是局部变量,而并非成员变量,请阅读下面的示例代码:

上面的代码中,Person 类的speak()方法中有一条打印语句,访问了变量age,此时访问的是局部变量age,也就是说,当有另外一个程序来调用speak()方法时,输出的值为60,而不是10。

【例4.4】张老太养了两只猫:一只名字叫小白,今年3 岁,白色;还有一只名字叫小花,今年100 岁,花色。请编写一个程序,当用户输入小猫的名字时,就显示该猫的名字、年龄、颜色。如果用户输入的小猫名错误,则显示张老太没有这只猫,如文件4-4 所示。

文件4-4 Example04.java

执行结果

30 白色

在实例化对象时,Java 虚拟机会自动为成员变量进行初始化,针对不同类型的成员变量,Java 虚拟机会赋予不同的初始值,具体情况如表4-1 所示。

表4-1 不同成员变量类型的初始值

垃圾对象的形成:当没有任何变量引用对象时,该对象将成为垃圾对象,不能再被使用。

对象的引用超出作用域

说明:使用变量p2 引用了一个Person 类型的对象,接着将变量p2 的值置为null,被p2所引用的Person 对象就会失去引用,成为垃圾对象,如图4.2 所示。

图4.3 垃圾对象的产生原理

4. 访问控制符

电视机的开关,对音量、颜色、频道的控制是公开的,谁都可以操作,但是对机箱后盖,主机板的操作却不是公开的,一般是由专业维修人员来操作。那么Java 中如何实现这种类似的控制呢?不能随便查看人的年龄、工资等隐私。在Java 中,针对类、成员方法和属性提供了四种访问级别,分别是private、default、protected 和public,如图4.4 所示。

图4.4 类、成员方法和属性的四种访问级别

四种访问控制级别说明:

● private(当前类访问级别):如果类的成员被private 访问控制符来修饰,则这个成员只能被该类的其他成员访问,其他类无法直接访问。类的良好封装就是通过private 关键字来实现的。

● default(包访问级别):如果一个类或者类的成员不使用任何访问控制符修饰,则称它为默认访问控制级别,这个类或者类的成员只能被本包中的其他类访问。

● protected(子类访问级别):如果一个类的成员被protected 访问控制符修饰,那么这个成员既能被同一包下的其他类访问,也能被不同包下该类的子类访问。

● public(公共访问级别):这是一个最宽松的访问控制级别,如果一个类或者类的成员被public 访问控制符修饰,那么这个类或者类的成员能被所有的类访问,不管访问类与被访问类是否在同一个包中。

通过表4-2 将这四种访问级别更加直观地表示出来。

表4-2 四种访问级别

当对象被实例化后,在程序中可以通过对象的引用变量来访问该对象的成员。需要注意的是,当没有任何变量引用这个对象时,它将成为垃圾对象,不能再被使用。

类变量:类变量也声明在类中、方法体之外,但必须声明为static 类型。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈