04类和对象基本语法和语义.docx

上传人:b****4 文档编号:781121 上传时间:2022-10-12 格式:DOCX 页数:15 大小:24.47KB
下载 相关 举报
04类和对象基本语法和语义.docx_第1页
第1页 / 共15页
04类和对象基本语法和语义.docx_第2页
第2页 / 共15页
04类和对象基本语法和语义.docx_第3页
第3页 / 共15页
04类和对象基本语法和语义.docx_第4页
第4页 / 共15页
04类和对象基本语法和语义.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

04类和对象基本语法和语义.docx

《04类和对象基本语法和语义.docx》由会员分享,可在线阅读,更多相关《04类和对象基本语法和语义.docx(15页珍藏版)》请在冰豆网上搜索。

04类和对象基本语法和语义.docx

04类和对象基本语法和语义

第4章类和对象----基本语法和语义

本部分主要讨论JAVA语言有关类的声明、属性、方法的语法和语义。

1类的定义

(1)语法

JAVA语言定义类最简单的语法是这样的:

class类名

{//属性的定义….

//方法的定义….

}

class是JAVA的关键字,“类名”是用户自定义的标识符,作为编程风格的约定,“类名”首字母应大写。

例1:

classCar

{

intspeed;//属性

floatweight,height;

voidchangeSpeed(intnewSpeed)//方法声明

{//……..}//方法体

floatgetWeight()

{returnweight;}

floatgetHeight()

{returnheight;}

}

(2)语义

●类是对“一类事物”的抽象描述,“类名”(比如Car)是这类事物的名字

●“类名”是用户自定义的抽象类型名(而不是一个变量名),“类名”的级别与int,float,char等是同级的,它们都代表“一类事物”。

●类是引用类型的,在赋值和方法(函数)传参上体现的是“地址”特性。

●属性描述这类事物的静态特性(是什么),一般是名词性的。

●方法描述这类事物的动态特性(做什么),一般是动词性的。

●“一类事物”的属性集,和围绕该属性集进行的操作(方法集),聚合成了一个类,类描述了“一类事物”。

例2:

一个“人员管理类”,该类有3个属性2个方法。

classPerson

{

Stringid;//属性,身份证号

Stringname;//属性,姓名

Stringaddress;//属性,住址

//方法,增加一个人员记录

voidaddPerson(Stringid,Stringname,Stringaddress)

{//方法体……..}

//方法,修改一个人员记录

voidmodifyPerson(Stringid,Stringname,Stringaddress)

{//方法体……..}

}

 

2类的属性和方法

类由属性和方法聚合而成,属性又叫类的成员变量,方法又叫类的成员方法。

(1)属性(成员变量):

语法:

成员变量可以是基本类型的,也可以是引用类型的,还可以使用关键字final修饰为常量(作为编程风格的约定,常量名字应该大写)。

例3:

classEngine{//…..}//声明另一个类

classCar

{

intspeed;//属性,基本类型

floatweight,height;//属性,基本类型

finalintMAX=100;//属性,常量,定义时要直接赋值

int[]a;//属性,数组,引用类型

Enginee;//属性,e是引用类型

//类的其它部分……

}

语义:

属性描述这类事物的静态特性(是什么),一般是名词性的。

注意:

●类的成员变量是在类的成员方法之外定义的,参见本课件【例1—例3,】,成员变量的作用域(有效范围)是类,JAVA语言没有“全局变量”的概念。

●方法体内定义的变量不是类的成员变量,其作用域仅限于定义它的方法内。

●JAVA语言任何的变量和常量,只能在类、方法、语句块内定义,不能在类以外定义。

例4:

classCar

{

intspeed=80;//属性,作用域在Car内

floatweight,height;

voidchangeSpeed(intnewSpeed)//方法声明

{newSpeed++;//newSpeed只在方法内有效

speed++;//speed在Car内有效

}

floatgetWeight()

{weight=1008;//weight在Car内有效

returnweight;

}

floatgetHeight()

{returnheight;}

}

 

(2)方法

定义方法最基本的语法是:

返回类型方法名(形参类型形参名。

{

//方法体的代码。

return返回类型;//返回方法的运行结果,

//如“返回类型”是void,则不必写return

}

JAVA方法的语法与C/++“函数”语法的基本一样。

JAVA方法的形参不仅可以是基本类型的,还可以是引用类型的(数组,对象等)----这一点在JAVA实际编程中很常用。

比如:

在方法内查询数据库的表,返回若干条记录,这就需要方法返回引用类型,在课件PART3中将讲解引用类型作为方法参数的若干问题。

语义:

●方法描述这类事物的动态特性(做什么),一般是动词性的。

●方法代表类的一个操作,有时是简单操作(比如赋值),有时实现一个算法(比如排序),但无论如何,从软件设计的角度(不是语法角度),一个方法应该实现一个“单一功能”,而不是多个功能。

注意:

JAVA语言的方法只能在类的内部定义,换句话说,方法必需从属于某个类。

JAVA语言的方法不需要像C语言函数那样“先声明后实现”。

重要问题:

重视写函数的能力:

编程初学者最重要的是要学会两件事:

一是要学会使用循环语句,适应计算机解题的“思路”。

二是要学会写方法(函数),实现对功能单一的算法的“封装”,并正确使用形参和实参。

另外,当遇到一个编程问题时,不要先想语法如何如何(解数学题时是想想解题办法还是先想怎样使用数学符号?

),而是要脱离具体编程语言,先去做一个“设计”,要先想程序应完成什么功能,如果是复杂程序,将其分解为多个函数,分而治之,上机一点点调试出来。

(3)main()方法

一个JAVA程序可能有一个或多个类,多个类可能放在同一个或不同的源程序文件中,程序从main()方法开始启动。

如果一个项目中含有多个源程序文件和多个main()方法,程序将从(用户指定的)当前源程序文件的main()方法开始启动。

main()方法也是类的一个成员方法,只是该方法有几点特殊性而已,以后将陆续介绍。

 

3对象的实例化

类是抽象的概念,是对“一类问题”的解决方案。

对象是具体的概念,是对“一类问题”下的某个具体问题的解决方案。

可以用代数作类比,数学公式表示对“一类问题”的解决方案,当给公式具体的值时,解决一个具体的值,由此可见,公式表示抽象的问题,具体的值解决具体问题。

类是用户自定义的类型(表示抽象的问题),将类的属性集赋不同的初值,可以得到不同的对象,解决一个个不同的具体问题。

也可以认为,类是对象的模板,从类中可以“复制”出对象,这个复制过程叫对象的实例化。

(1)对象实例化的语法

类名对象名;//首先定义一个对象,类名是类型,

//对象名是“类的变量”

对象名=new构造方法名();//实例化对象,new是关键字

上面两步可以合并成一步:

类名对象名=new构造方法名();

例5:

classMyClass//该类有一个属性两个方法

{intz;

intm1(intx,inty){returnx+y;}

intm2(intx){returnx*x;}

//其它代码。

}

MyClassc1=newMyClass();//用默认构造方法,实例化对象c1

MyClassc2=newMyClass();//用默认构造方法,实例化对象c2

(2)对象实例化的语义

●对象是实体,new表示给对象在堆中分配内存,构造方法用于给对象初始化(比如,为属性赋初值)。

●虽然c1,c2的z值都为0,但c1和c2不相等(不是同一个对象),因为对象是引用类型,对象名代表其引用(对象在内存中的首地址),由于c1和c2分别用new实例化,因此占用不同的内存空间。

(3)类是用户自定义的类型,而对象是类的变量。

这对理解类和对象的概念特别重要。

下面的代码:

inta;a=10;语义是什么?

答:

int是JAVA预定义的基本数据类型,同时也是抽象类型,表示“整数”这一类事物,而a是表示“整数”这一类事物下面一个具体整数,应该有值。

换句话说,int可以看作是一个“类”,而a是int类的一个对象。

下面的代码:

MyClassc1;c1=newMyClass();语义是什么?

答:

MyClass是用户自定义的抽象类型,表示“MyClass”这一类事物,c1是表示这一类事物下面一个具体事物。

4使用对象的属性和方法

对象的属性和方法就是它所属的类的属性和方法,但由于类不是实体,所以不能直接使用类的属性和方法(static属性和方法例外,以后会讲到),而要通过对象去调用它们。

使用对象的属性和方法要用到“.”操作符。

语法是:

对象名.属性名;

对象名.方法名;

例6:

classMyClass

{intz;

intm1(intx,inty){returnx+y;}

intm2(intx){returnx*x;}

publicstaticvoidmain(){

MyClassc1=newMyClass();//用默认构造方法,实例化对象

MyClassc2=newMyClass();

inta,b;

c1.z=20;//调用c1对象的属性z

c2.z=20;//调用c2对象的属性z

a=c1.m1(100,200);//调用c1对象的方法,a=300

b=c2.m1(100,200);//调用c2对象的方法,b=300

}}

如上例所示,实例化对象的语法常写在main()方法体内,因为程序从这个方法内启动,但实例化对象的语法不是必须要写在main()方法体内,写到其它需要的位置也可以。

5对象的引用特性

类是引用类型,对象自然也是引用类型的“类的变量”。

对象的引用特性是指:

对象的名字代表对象在内存中的首地址。

关于引用类型的特点,在第2章介绍数组的引用特性已讲过一些。

下面对照前面的“例6”回答几个问题:

问题1:

例6中,c1.z=20和c2.z=20中的z是一回事吗?

c1.m1()和c2.m1()呢?

答:

c1和c2都用了new实例化,是同一个类的不同对象,各自占用不同的内存空间,对c1属性和方法的调用不影响c2,反之依然。

问题2:

下面的代码执行后是什么效果?

MyClassc1=newMyClass();

MyClassc2=newMyClass();

c1=c2;

答:

前2句代码c1和c2是不同对象,当c1=c2后,c1和c2是不同名字的同一个对象,原有的c1被JAVA垃圾自动回收机制销毁了。

对象的引用特性是JAVA语言的重点和难点,要抓住“对象的引用就是对象在内存中的首地址”这个要点学习。

6构造方法和析构方法

每一个JAVA类都含有两种特殊的方法:

构造方法和析构方法。

(1)构造方法语法:

●构造方法没有返回类型,方法名与类名相同。

●构造方法可以重载,重载规则同普通方法(下一章再作讲解)。

●构造方法只能在实例化对象时调用,与new配套使用,见【例6】,【例7】。

(2)构造方法语义:

●类是个抽象类型,类的属性不能有具体的初值(常量属性除外,)而对象是具体的“类变量”,必需要有初值。

构造方法用于给对象初始化(属性初值),从而产生某个具体的对象。

例7:

下面是构造方法的样例

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 广告传媒

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1