前言
在前面的章节中,我们介绍了面向对象编程思想,以及在JAVA中面向对象表现形式以及JAVA中基本数据类型的概念。本节我们主要详细讲解JAVA中的类与对象
类
必须由你创建所有对象
我们知道,程序即对象的集合,面向对象编程即使用对象的一个过程。而使用对象,需要先定义类,并通过类通过new关键字进行实例化生成对象。JAVA中实际上已经提供大量现成的类(已经定义好的类),但是我们仍需定义我们编程过程中所特定需要的类,简单理解:JAVA编程就是不断创建类,不断实例化对象。 以下是通过实例化JAVA中现成的字符串类String,生成一个“不积跬步,无以至千里。”这段诗句(verse)的对象:
String verse = new String("不积跬步,无以至千里。")
如何定义JAVA中的类
前面在讲面向对象编程里说过,对象由数据元素(属性)和行为(功能)组成,而类是对对象的抽象,因此类中包含属性和功能(JAVA中称为方法)。因此,我们在定义类的时候,不仅要确定类名称,还要定义类的属性(又称数据成员、成员变量)和方法(又称成员函数)。
JAVA类的基本结构
class [类名] {
//成员属性的定义:
[类型/类名] [成员属性名];
...
//构造方法定义:
[类名] ([参数列表]) {
[构造方法的具体实现]
}
//方法的定义:
[返回值类型/类名] [方法名] ([参数列表]){
[方法的具体实现]
}
...
}
在以上结构表达试中,[]代表要写出指定的内容,//后面的内容为注释(这里作标记作用)。我们这里通过对人进行抽象形成人类,根据以上结构,看在JAVA中如何通过代码定义人类:
class Human {
String name;
char sex;
short age;
int weight;
Human(String name, char sex, short age, int weight){
}
void say(String words){
}
void run(){
}
}
以上我们定义了一个简单的类,类名为Human(人类),其成员属性为姓名(name)、性别(sex)、年龄(age)、体重(weight),方法(行为)为说话(say)、奔跑(run)。
成员属性
即类的属性,一个类可以定义多个属性,每个属性都可以为其指定基本类型和类(所属类型),因为类的属性实际上也是一个对象,每个对象都拥有其类型。我们这里要注意是的基本类型和类是两个概念,基本类型是JAVA中表示变量(成员属性又可称为成员变量)的基本类型(如char表示其为一个字符,short表示短整数型、int表示整数),它表示的是数据的基本类型,仅仅只是关键字而非类。而String便是一个类,表示一个字符串。关于基本类型会在后面章节进行讲解。
方法
类中的方法定义主要由,返回值类型、方法名、方法的参数列表(可有可无)、方法的具体实现(方法体)构成。以下我们一一称述它们的概念:
返回值类型: 返回值即是方法产生的结果数据,返回值类型就是这个结果数据所属的类型,可以用类名指定也可以用基本数据类型指定。以上类定义中我们指定void型,它表示没有返回值,或者说当前方法并不需要产生一个具体的结果数据。
方法名: 就是方法的名字,它表示所属当前类的对象所有的行为。
参数列表: 参数指的就是方法可以就收的消息,方法根据接收的消息完成指定的动作,这实际上就是一种接口与消息的概念,在上节我们有讲到过。而参数列表指的就是可以有多个参数,参数的定义由参数类型(类名或者基本数据类型)和参数名组成,中间由空格分开,多个参数由逗号分隔。
方法体: 即大括号结构,方法的具体实现代码就写在大括号里面,由于还没有到足够学习具体的JAVA编程,所以上方法体中就没有写,实际上方法体可以为空(有返回值类型的除外)。
有返回值的方法
上面人类的定义,我们只定义了两个没有返回值类型的方法(say、run)。现在我们给人类再加上身高这个属性(int height;),然后在加上一个获取身高体重比(体重指数:bmi)的方法:
double bmi (){
return height / weight;
}
以上就是一个有产生具体结果数据的一个方法的示例,通过关键字返回具体结果,以上通过关键字return返回当前身高与体重的比例,返回值类型为double,它是一个基本数据类型(不是类),表示双精度浮点型(拥有更高精度的小数类型)。
类的实例化
我们之前讲到过,在面向对象编程里,编程就是使用对象的过程。一旦类已经定义了好了之后,我们就可以随心所欲的通过实例化生成对象了。JAVA中类实例化通过关键字new实现。
public Human(String name, char sex, short age, int weight){
}
在实例化生成对象之前,我们看下上面这部分代码,这里实际上也是类的一个方法(省去了方法体中方法的具体实现代码),方法的名字和类的名字一样,它在JAVA中称为类的构造方法,这里我们暂时不作深入了解,它的作用就是在类实例化的时候设置类属性的值。简单的认为,在我们现实生活中只要确定了一个人的具体姓名、性别、年龄、体重他就是可以确定一个具体的人。同样的,在JAVA代码中,进行类的实例化的时候设置类中属性的具体值,就可以确定具体的一个对象。以下为类的实例化代码。
Human zhangSan = new Human(“张三”,'男',30,128);
以上就是在生成张三对象的代码,括号内按顺序给定类属性的值。
通过类属性值的不同,可以实例化出多个不同的对象:
Human liSi = new Human(“李四”,'女',27,108);
Human wangWu = new Human(“王五”,'男',30,115);
以上实例化出了李四、王五对象。
方法的调用
在实例化出了对象之后,我们就可以通过调用对象的方法进行一个对象使用。比如我们要李四说一段话,让张三奔跑:
liSi.say("你好");
zhangSan.run();
在JAVA中,对象方法的调用通过:
对象名称.方法名称(参数列表[或者说传达的消息])
这样一个格式来进行。