Java程序设计第2版第六章课件_第1页
Java程序设计第2版第六章课件_第2页
Java程序设计第2版第六章课件_第3页
Java程序设计第2版第六章课件_第4页
Java程序设计第2版第六章课件_第5页
已阅读5页,还剩119页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第6章类与对象2022/12/261第6章类与对象2022/12/181通过本章的学习,主要掌握以下知识点:类的基本概念

对象的创建与使用

对象的使用

成员的调用本章的重点:创建类本章的难点:类修饰符成员数量与成员方法修饰符

2022/12/262通过本章的学习,主要掌握以下知识点:2022/12/182

在前面的章节中,对Java的简单数据类型、数组、运算符和表达式及流程控制的方法作了详细的介绍。从本章开始将介绍面向对象的程序设计方法。面向对象的编程思想是力图使在计算机语言中对事物的描述与现实世界中该事物的本来面目尽可能的一致。所以在面向对象的程序设计中,

类(Class)和对象(Object)是面向对象程序设计方法中最核心概念。2022/12/263在前面的章节中,对Java的简单数据类型、数组、运算符包括技术:封装、继承、多态核心概念:

类--

对象--特点:

数据存储(变量)、数据处理(函数)面向对象编程技术是创建对象的模板,是具有相同属性和相同行为的对象的模板。是类的具体实例(实体),任何具体对象必然隶属于一个类。封装在对象中面向对象编程技术2022/12/264包括技术:面向对象编程技术是创建对象的模板,是具有相同属性和例:变量

name--鱼名称

color--鱼颜色

函数

setValue()

--赋值name、coloroutput()--显示name、color分别用“面向过程”、“面向对象”编程思想实现。面向对象编程技术2022/12/265例:面向对象编程技术2022/12/185#include<stdio.h>charname[20]=“”;

charcolor[20]=“”;

main()

{voidsetValue(charn[],charc[]);

voidoutput();

setValue(“Shark”,”white”);

output();

setValue(“Golden”,”orange”);

output();

}voidsetValue(charn[],charc[])

{strcpy(name,n);strcpy(color,c);//error:name=n;color=c;}

voidoutput()

{printf(“%s”,name);

printf(“%s”,color);

}面向对象编程技术1.面向过程源程序:Fish.c特点:数据与操作分离数据2操作数据1变量函数

数据n2022/12/266#include<stdio.h>面向对象编程技术1.publicclassFish

//关键字class--定义类

{Stringname;//属性变量name--描述鱼的名字

Stringcolor;//属性变量color--描述鱼的颜色

voidsetValue(Stringn,Stringc)

//方法setValue:给成员变量赋值

{name=n;color=c;}

voidoutput()//方法output:显示成员变量

{System.out.println(name);System.out.println(color);

}

publicstaticvoidmain(Stringargs[])

{Fishf1=newFish();//创建Fish类的对象f1.setValue(“Shark”,”red”);f1.output();

Fishf2=newFish();//创建Fish类的对象

f2.setValue(“Golden”,”orange”);f2.output();

}}

2.面向对象源程序:Fish.java面向对象编程技术说明:不需要--函数声明特点:数据与操作整合数据1操作变量函数数据2操作变量函数2022/12/267publicclassFish6.1类的基本概念类的概念是为了让程序设计语言能更清楚地描述日常生活中的事物。类是对某一类事物的描述,是抽象的、概念上的定义;而对象则是实际存在的属该类事物的具体的个体,称为实例(Instance)。下面用一个现实生活中的例子来说明类与对象的概念。图6.1所示的是一个“汽车类”与“汽车实例”的例子。

2022/12/2686.1类的基本概念类的概念是为了让程序设计语言能更清楚地描汽车设计图第1辆第2辆第3辆图6.1汽车类与汽车的实例2022/12/269汽车设计图第1辆第2辆第3辆图6.1汽车类与汽车的实例20其中,汽车设计图就是“汽车类”,由这个图纸设计出来的若干个汽车就是按照该类生产出的“汽车对象”。2022/12/2610其中,汽车设计图就是“汽车类”,由这个图纸设计出来的若干个汽一般来说,类是由数据成员与函数成员封装而成的,其中数据成员表示类的属性,函数成员表示类的行为。例:下面用Java类来描述圆柱体,并能保存圆柱体的信息(底半径和高),而且还能利用此类计算出圆柱体的面积和体积。PPT--P10

P18代码2022/12/2611一般来说,类是由数据成员与函数成员封装而成的,其中数据成员表每一个圆柱体,无论尺寸大小,都有底半径和高这两个属性,而这两个属性就是圆柱体的数据,因此就本例而言,radius(半径)与height(高)可以说是圆柱体类的数据成员(datamember)。

除了底半径和高这两个数据之外,还可以把计算底面积与体积这两个函数纳入圆柱体类里,变成类的函数成员(functionmember)。Java称这种封装于类内的函数为“方法”(method)。2022/12/2612每一个圆柱体,无论尺寸大小,都有底半径和高这两个属性,而这两所谓的“类”就是把事物的数据与相关功能封装(Encapsulate)在一起,形成一种特殊的数据结构,用以表达真实事物的一种抽象。“Encapsulate”原意是“将……装入胶囊内”,现在胶囊就是类,而成员变量与成员方法便是被封入的东西。图6.2为圆柱体类的示意图。由图6.2可知,圆柱体类的成员变量有pi、radius与height,而成员方法则有计算面积的area()与计算体积的volume()。 2022/12/2613所谓的“类”就是把事物的数据与相关功能封装(Encapsulpiradiusheightarea()volume()成员变量成员方法图6.2圆柱体类2022/12/2614piarea()成员变量成员方法图6.2圆柱体类2022/6.2定义类1.类的一般结构[类修饰符]class

类名称{

声明成员变量[修饰符]数据类型成员变量名称;……

[修饰符]返回值的数据类型方法名(参数1,参数2,……){语句序列;

return[表达式];}……}2022/12/26156.2定义类1.类的一般结构2022/12/1815定义类(声明类)类名

组成--字母下划线_$数字

约定--每个单词的首字母大写。

例:类的创建修饰class类名{成员变量(属性变量)定义成员函数(成员方法)

定义}开头FishExceptionArray类的创建2022/12/2616定义类(声明类)类的创建修饰class类名开头F成员变量(属性变量)

概念--

例e:找错在类体之中、方法体之外定义的变量。(注意:必须在类体之中)intheight=260;ClassBook//class小写{intwidth=185;publicvoidsetWidth(intx){inty;}}类的创建Java只有2类变量成员变量--函数体之外定义

局部变量--函数体之中定义(形参变量、函数体内定义的变量)没有:全局变量说明:

Java中:定义成员变量=初值;对!

C++中:定义成员变量=初值;错!2022/12/2617成员变量(属性变量)在类体之中、方法体之外定义的变量。int

(1)从语法形式上看,成员变量是属于类的,而局部变量是在方法中定义的变量或方法的参数;成员变量可以被public、private、static等修饰符所修饰,而局部变量则不能被访问控制修饰符及static所修饰;成员变量和局部变量都可以被final所修饰。4.成员变量与局部变量的区别①2022/12/2618(1)从语法形式上看,成员变量是属于类的,而局部变量是在方(2)从变量在内存中的存储方式上看,成员变量是对象的一部分,而对象是存在于

堆内存的,而局部变量是存在于栈内存的。(3)从变量在内存中的存在时间上看,成员变量是对象的一部分,它随着

对象的创建而存在,而局部变量随着

方法的调用而产生,随着方法调用的结束而自动消失。②③2022/12/2619(2)从变量在内存中的存储方式上看,成员变量是对象的一部分,(4)成员变量如果没有被赋初值,

则会自动以类型的默认值赋值(有一种情况例外,被final修饰但没有被static修饰的成员变量必须显式地赋值);而局部变量则不会自动赋值,必须显式地赋值后才能使用。2022/12/2620(4)成员变量如果没有被赋初值,

则会自动以类型的默认值成员方法(函数)

作用--对本类的属性变量进行操作

定义--

例r:

例r:

方法名类的创建修饰返回类型方法名(参数部分){}publicinttotal(inte,intm,intc){returne+n+c;}voidsetWidth(intw){width=w;}是:合法的Java标识符且不能是关键字约定:首单词小写,后面各单词首字母大写功能、定义、方法名、参数、返回类型(return语句)、方法体2022/12/2621成员方法(函数)类的创建修饰返回类型方法名(参数成员方法(函数)

参数部分

例r:

例e:类的创建()--必须有形参变量--可有、可无voidsetWidthHeight(intw,inth){width=w;height=h;}

(intw,h)错voidshowWidthHeight(){System.out.println(“width=,height=”+width+height);}voidshowWidthHeight//错{System.out.println(“width=,height=”+width+height);}2022/12/2622成员方法(函数)

参数部分

成员方法(函数)

返回类型类的创建含义--告诉用户方法执行完,返回什么类型的值。说明--返回类型部分必须有。基本类型--byteshortcharintlongfloatdoubleboolean

例r:引用类型--类的类型

例r:

void----不返回任何值

例r:

例e:booleanm(){returntrue;}FishgetFish(){returnnewFish(“Shark”,”Red”);}voidshowWidthHeigth(){System.out.println(“width=”+width);System.out.println(“height=”+height);}showWidthHeight(){}2022/12/2623成员方法(函数)类的创建含义--告诉用户方法执行完,返回什么成员方法(函数)

return语句

作用--

格式1-

例r:返回类型void方法体return;

例e:对错?类的创建结束方法体执行,返回调用该方法处。voidshowWidthHeight(){System.out.println(“width=,height=”+width+height);return;(等价:不写return;语句)}publicinttotal(inte,intm,intc){return;}return;2022/12/2624成员方法(函数)类的创建结束方法体执行,返回调用该方法处。v成员方法(函数)

return语句

格式2--

例:匹配函数返回类型类的创建return表达式;结束方法体的执行,将表达式的值作为方法的返回值,返回方法调用处。publicinttotal(inte,intm,intc){returne+m+c;等价

return(e+m+c);

对!//return3.0;错!}2022/12/2625成员方法(函数)类的创建return表达式;结束方法体的执表6.1类修饰符的含义修饰符含义public将一个类声明为公共类,它可以被任何对象访问,一个程序的主类必须是公共类。abstract将一个类声明为抽象类,没有实现的方法,需要子类提供方法的实现。final将一个类声明为最终类即非继承类,表示它不能被其他类所继承。friendly友元类型,默认的修饰符,只有在相同包中的对象才能使用这样的类。2022/12/2626表6.1类修饰符的含义修饰符含义public将一个表6.2成员变量修饰符的含义修饰符含义public公共访问控制符。指定该变量为公共的,它可以被任何对象的方法访问。private私有访问控制符。指定该变量只允许自己类的方法访问,其他任何类(包括子类)中的方法均不能访问此变量。protected保护访问控制符。指定该变量可以被它自己的类及其子类访问,在子类中可以覆盖此变量。friendly默认的友元访问控制符,在同一个包中的其他类可以访问此变量,而其他包中的类不能访问该变量。final最终修饰符。指定此变量的值不能改变。static静态修饰符。指定该变量被所有对象共享,即所有的实例都可使用该变量。transient过渡修饰符。指定该变量是一个系统保留,暂无特别作用的临时性变量。volatile易失修饰符。指定该变量可以同时被几个线程控制和修改。2022/12/2627表6.2成员变量修饰符的含义修饰符含义public表6.3成员方法修饰符的含义修饰符含义public公共访问控制符。指定该方法为公共的,它可以被任何对象的方法访问。private私有访问控制符。指定该方法只允许自己类的方法访问,其他任何类(包括子类)中的方法均不能访问此方法。protected保护访问控制符。指定该方法可以被它的类及其子类访问。friendly默认的友元访问控制符,在同一个包中的其他类可以访问此方法,而其他包中的类不能访问该方法。final最终修饰符。指定该方法不能被重载。static静态修饰符。指定不需要实例化一个对象就可以激活的方法。synchronized同步修饰符。在多线程程序中,该修饰符用于在运行前,对它所属的方法加锁,以防止其他线程访问,运行结束后解锁。native本地修饰符。指定此方法的方法体是用其他语言(如C)在程序外部编写的。2022/12/2628表6.3成员方法修饰符的含义修饰符含义public下面定义前面叙述过的圆柱体类如下:classCylinder//定义圆柱体类Cylinder{doubleradius;//声明成员变量radiusintheight;//声明成员变量heightdoublepi=3.14;//为数据成员赋初值

voidarea()//定义成员方法area(),用来计算底面积

{System.out.println(“圆柱底面积=”+pi*radius*radius);

}

voidvolume()//定义成员方法volume(),用来计算体积

{System.out.println(“圆柱体体积=”+((pi*radius*radius)*height);

}}2022/12/2629下面定义前面叙述过的圆柱体类如下:2022/12/18296.3对象的创建与使用对象是整个面向对象程序设计的理论基础,由于面向对象程序中使用类来创建对象,所以可以将对象理解为一种新型的变量,它保存着一些比较有用的数据,但可以要求它对自身进行操作。2022/12/26306.3对象的创建与使用对象是整个面向对象程序设计的理论基础生成对象第1步--第2步--第3步--对象定义对象的引用变量

类名变量名;产生对象

new类名();对象首地址返回:首地址Studentp;p=newStudent();“堆”内存区对象引用变量pHhh步骤区分--对象引用、对象首地址赋值给引用变量p=newStudent();2022/12/2631生成对象对象定义对象的引用变量类名变量名;产生生成对象

例r:

等价

区分:对象Studentp;p=newStudent();Studentp=newStudent();对象、对象的引用成员变量连续的存储空间成员方法变量--存储对象首地址。2022/12/2632生成对象对象Studentp;Studentp=new表6.4成员变量的默认初始值成员变量类型初始值byte0short0int0long0Lfloat0.0Fdouble0.0Dchar‘\u0000’(表示为空)boolwanfalse所有引用类型null2022/12/2633表6.4成员变量的默认初始值成员变量类型初始值byte0s对象的内容包含--不包含--

例:上例student类的执行过程对象非static成员变量、非static成员方法static成员变量、static成员方法类运行前--static的变量teacher

在“static”区分配空间static的方法main()JAVA虚拟机在“static”区--找到main()方法,开始执行重要包含不包含2022/12/2634对象的内容对象非static成员变量、非static成员方法使用对象含义--格式--

例r:使用对象对象使用对象中的变量(赋值、显示)调用对象中的方法对象引用.成员变量对象引用.成员方法publicstaticvoidmain(String[]args){Studentp=newStudent();

=“张三”;

System.out.println(“姓名”+);

p.setName(“张三”,20,75);}含义格式2022/12/2635使用对象对象使用对象中的变量(赋值、显示)对象引用.成员变量【例6.1】定义一个圆柱体类,并创建相应的对象,然后计算圆柱体的底面积与体积。

2个类2022/12/2636【例6.1】定义一个圆柱体类,并创建相应的对象,然后计算圆柱//app6_1.java圆柱体类Cylinderclass

Cylinder//定义Cylinder类{doubleradius;//定义成员变量radiusintheight;//定义成员变量heightdoublepi=3.14;

voidarea()//定义无返回值的方法area(),用来计算圆柱底面积

{System.out.println(“底面积=”+pi*radius*radius);

}

doublevolume()

//定义返回值为double型的方法volume(),计算体积

{

return(pi*radius*radius)*height;

}}【例6.1】续2022/12/2637//app6_1.java圆柱体类Cylindepublicclass

app6_1//目的:生成Cylinder的对象{publicstaticvoidmain(Stringargs[])//程序执行的起始点

{Cylindervolu;

//定义对象的引用变量volu=newCylinder();//创建新的对象

volu.radius=2.8;//赋值圆柱volu的底半径

volu.height=5;//赋值圆柱volu的高

System.out.println(“底圆半径=”+volu.radius);//输出底圆半径

System.out.println(“圆柱的高=”+volu.height);//输出圆柱的高

System.out.print(“圆柱”);volu.area();//输出面积

System.out.println(“圆柱体体积=”+volu.volume());//输出体积

}}【例6.1】续2022/12/2638publicclassapp6_1//目的:生成C程序运行结果如下:底圆半径=2.8圆柱的高=5圆柱底面积=24.6176圆柱体体积=123.088【例6.1】续2022/12/2639程序运行结果如下:【例6.1】续2022/12/1839【例6.2】创建多个圆柱体类Clyinder的对象,修改其中一个对象的成员变量pi的值,其他对象中的pi值不受影响。2022/12/2640【例6.2】创建多个圆柱体类Clyinder的对象,修改其中//app6_2.java圆柱体类Cylinder的成员在内存中的分配关系classCylinder//定义Cylinder类{doubleradius;intheight;doublepi=3.14;

voidarea()

{System.out.println("底面积="+pi*radius*radius);}

doublevolume()

{return(pi*radius*radius)*height;}}2022/12/2641//app6_2.java圆柱体类Cylinder的成员在publicclassapp6_2//定义公共类{publicstaticvoidmain(String[]args)

{Cylindervolu1,volu2;//声明指向对象的变量volu1和volu2volu1=newCylinder();//创建对象圆柱1:volu1volu2=newCylinder();//创建对象圆柱2:volu2volu1.radius=volu2.radius=2.5;volu2.pi=3;//修改volu2的pi值

System.out.println("圆柱1底半径="+volu1.radius);System.out.println("圆柱2底半径="+volu2.radius);System.out.println("圆柱1的pi值="+volu1.pi);System.out.println("圆柱2的pi值="+volu2.pi);System.out.print("圆柱1");volu1.area();System.out.print("圆柱2");volu2.area();}}//运行结果?2022/12/2642publicclassapp6_2//定义公共类26.4参数的传递方法既可以有返回值,也可以没有参数,但在此之前我们所编写的程序中没有传递任何参数,如例6.3中的area()方法与volume()。

基本类型引用类型值传递2022/12/26436.4参数的传递方法既可以有返回值,也可以没有参数,但在此参数传递形参类型基本类型引用类型“值传”实参值参数传递基本类型引用类型voidm1(intx){……}voidm2(Cylinder

x){……}m1(10);传对象的首地址m2(newCylinder

());m2(p);2022/12/2644参数传递形参类型参数传递基本类型引用类型voidm1(例3-10:传值--参数:基本类型例6.5例6.6:传值--参数:引用类型publicclassPassValue//例3-10{staticvoidexchange(inta,intb){inttemp;temp=a;a=b;b=temp;}publicstaticvoidmain(String[]args){inti=10;intj=100;System.out.println(“i=j=”+i+”\t”+j);exchange(i,j);System.out.println(“i=j=”+i+”\t”+j);}}//结果?参数传递2022/12/2645例3-10:传值--参数:基本类型publicclass6.4.2以数组作为参数或返回值的方法调用一、传递数组要传递数组到方法里,只要指明传入的参数是一个数组即可。【例6.5】以一维数组为参数的方法调用,求若干数的最小值。

引用类型-参数2022/12/26466.4.2以数组作为参数或返回值的方法调用一、传递数组引用//app6_5.java以数组为参数的方法调用publicclassapp6_5//定义主类{

publicstaticvoidmain(Stringargs[]){inta[]={8,3,7,88,9,23};//定义一维数组aLeastNumbMinNumber=newLeastNumb();MinNumber.least(a);//将一维数组a传入leastt()方法

}}【例6.5】续2022/12/2647//app6_5.java以数组为参数的方法调用【例classLeastNumb//定义另一个类{

publicvoidleast(intarray[])

//参数array[]接收一维整型数组

{inttemp=array[0];for(inti=0;i<array.length;i++)if(temp>array[i])temp=array[i];System.out.println(“最小的数为:”+temp);

}}【例6.5】续程序运行结果为:最小的数为:32022/12/2648classLeastNumb//定义另一个类【例6二、返回值为数组类型的方法一个方法如果没有返回值,则在该方法的前面用void来修饰;如果返回值的类型为简单数据类型,只需在声明方法的前面加上相应的数据类型即可;同理,若需方法返回一个数组,则必须在该方法的前面加上数组类型的修饰符。见教材P113【例6.6】将一个矩阵转置后输出。

引用类型(类)方法返回值:数组2022/12/2649二、返回值为数组类型的方法引用类型(类)方法返回值:数组20//app6_6.java返回值是数组类型的方法publicclassapp6_6{

publicstaticvoidmain(String[]args){int[][]a={{1,2,3},{4,5,6},{7,8,9}};//定义二维数组

int[][]b=newint[3][3];transpose=newtrans();//创建trans类的对象pose

b=pose.transpose(a);//用数组a调用方法,返回值赋给数组bfor(inti=0;i<b.length;i++)//输出数组的内容

{for(intj=0;j<b[i].length;j++)System.out.print(b[i][j]+"");System.out.print("\n");//每输出数组的一行后换行

}}}2022/12/2650//app6_6.java返回值是数组类型的方法classtrans{inttemp;

int[][]transpose(int[][]array)//返回值为二维整型数组

{for(inti=0;i<array.length;i++)//将矩阵转置

for(intj=i+1;j<array[i].length;j++){temp=array[i][j];array[i][j]=array[j][i];array[j][i]=temp;}returnarray;//返回二维数组

}}2022/12/2651classtrans2022/12/1851作业:编写类的“拷贝构造方法”

classA{

privateintm;privateintn;

publicA(intx,inty){属性赋值}

publicA

(参数)//拷贝构造方法

{对象复制功能:新创建对象的属性值与已知对象一样}

方法outPut()--输出对象属性值

publicstaticvoidmain(String[]args){用newA(100,200)生成对象p1;显示对象p1的属性值;用拷贝构造方法生成对象p2,使其属性与对象p1相同;显示p2属性值;}}参数传递2022/12/2652作业:编写类的“拷贝构造方法”参数传递2022/12/185this关键字问题--

例:

this若方法的形参与类的成员变量同名,方法体内如何操作成员变量?classFish{Stringname;intage,weight;voidsetData(Stringname,intage,intweight){name=name;age=age;weight=weigth;}}=name;this.age=age;this.weight=weight2022/12/2653this关键字问题this若方法的形参与类的成员变量同名,方是

--

例:

this系统为每个实例方法(非static方法)提供的一个引用变量(系统自动提供)(局部变量)直接使用--无需定义classFish{Stringname;intage,weight;voidsetData(Stringn,inta,intw){name=n;age=a;weight=w;}}this.

系统自动添加2022/12/2654是this系统为每个实例方法(非static方法)提供的一个值--例:this所在对象的首地址。即:指向这个方法所在的对象。代表这个对象。不能被赋值classA//上例Fish类{publicstaticvoidmain(String[]arg){Fishp1=newFish();Fishp2=newFish();p1.setData(“Golden”,2,0.5);p2.setData(“Shark”,10,100);}}Golden20.5thisShark10100thisvoidsetData(Stringn,inta,intw){=n;this.age=a;this.weight=w;}2022/12/2655值this所在对象的首地址。即:指向这个方法所在的对象。代表【例6.3】以圆柱体类Cylinder为例来介绍在类内部调用自己的方法。//app6_3.java在类内部调用方法classCylinder//定义Cylinder类{doubleradius;intheight;doublepi=3.14;

doublearea()

//定义返回值为double型的方法area(),计算底面积

{returnthis.pi*this.radius*this.radius;}

this2022/12/2656【例6.3】以圆柱体类Cylinder为例来介绍在类内部调用

doublevolume()

//定义返回值为double型的方法volume(),计算体积

{returnthis.area()*this.height;//在类内调用area()方法

}}//结束classCylinder

publicclassapp6_3//定义公共类{

publicstaticvoidmain(Stringargs[])

{Cylindervolu;volu=newCylinder();//创建新的对象

volu.radius=2.8;//赋值圆柱volu的底半径

volu.height=5;//赋值圆柱volu的高

System.out.println("底圆半径="+volu.radius);System.out.println("圆柱的高="+volu.height);【例6.3】续2022/12/2657doublevolume()//定义返回值为dou

System.out.print("圆柱");System.out.println("底面积="+volu.area());System.out.println("圆柱体体积="+volu.volume());

}}【例6.3】续程序运行结果如下:底圆半径=2.8圆柱的高=5圆柱底面积=24.6176圆柱体体积=123.0882022/12/2658System.out.print("圆柱");【例6.3】

例e:

对错?

作业:Circle类成员变量--doublepidoubleradius

(一份)

(封装)

成员方法--构造方法(成员变量初始化)thispublicstaticvoidmain(String[]args){System.out.println(this);}方法Compare_1()接收一个Circle对象,如果该对象与本对象的首地址相同,返回真,否则返回假。方法Compare_2()接收一个Circle对象,比较该对象与本对象的成员变量radius的值是否相等,相等返回真,不相等返回假.2022/12/2659thispublicstaticvoidmain6.5匿名对象当一个对象被创建之后,在调用该对象的方法时,也可以不定义对象的引用变量,而直接调用这个对象的方法,这样的对象叫做匿名对象。例如:Cylindervolu=newCylinder();volu.SetCylinder(2.5,5,3.14);改写为:newCylinder().SetCylinder(2.5,5,3.14);则Cylinder()就是匿名对象。

2022/12/26606.5匿名对象当一个对象被创建之后,在调用该对象的方法时,使用匿名对象通常有如下两种情况:1.如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象。2.将匿名对象做为实参传递给一个方法调用。2022/12/2661使用匿名对象通常有如下两种情况:2022/12/1861再见!2022/12/2662再见!2022/12/1862第6章类与对象2022/12/2663第6章类与对象2022/12/181通过本章的学习,主要掌握以下知识点:类的基本概念

对象的创建与使用

对象的使用

成员的调用本章的重点:创建类本章的难点:类修饰符成员数量与成员方法修饰符

2022/12/2664通过本章的学习,主要掌握以下知识点:2022/12/182

在前面的章节中,对Java的简单数据类型、数组、运算符和表达式及流程控制的方法作了详细的介绍。从本章开始将介绍面向对象的程序设计方法。面向对象的编程思想是力图使在计算机语言中对事物的描述与现实世界中该事物的本来面目尽可能的一致。所以在面向对象的程序设计中,

类(Class)和对象(Object)是面向对象程序设计方法中最核心概念。2022/12/2665在前面的章节中,对Java的简单数据类型、数组、运算符包括技术:封装、继承、多态核心概念:

类--

对象--特点:

数据存储(变量)、数据处理(函数)面向对象编程技术是创建对象的模板,是具有相同属性和相同行为的对象的模板。是类的具体实例(实体),任何具体对象必然隶属于一个类。封装在对象中面向对象编程技术2022/12/2666包括技术:面向对象编程技术是创建对象的模板,是具有相同属性和例:变量

name--鱼名称

color--鱼颜色

函数

setValue()

--赋值name、coloroutput()--显示name、color分别用“面向过程”、“面向对象”编程思想实现。面向对象编程技术2022/12/2667例:面向对象编程技术2022/12/185#include<stdio.h>charname[20]=“”;

charcolor[20]=“”;

main()

{voidsetValue(charn[],charc[]);

voidoutput();

setValue(“Shark”,”white”);

output();

setValue(“Golden”,”orange”);

output();

}voidsetValue(charn[],charc[])

{strcpy(name,n);strcpy(color,c);//error:name=n;color=c;}

voidoutput()

{printf(“%s”,name);

printf(“%s”,color);

}面向对象编程技术1.面向过程源程序:Fish.c特点:数据与操作分离数据2操作数据1变量函数

数据n2022/12/2668#include<stdio.h>面向对象编程技术1.publicclassFish

//关键字class--定义类

{Stringname;//属性变量name--描述鱼的名字

Stringcolor;//属性变量color--描述鱼的颜色

voidsetValue(Stringn,Stringc)

//方法setValue:给成员变量赋值

{name=n;color=c;}

voidoutput()//方法output:显示成员变量

{System.out.println(name);System.out.println(color);

}

publicstaticvoidmain(Stringargs[])

{Fishf1=newFish();//创建Fish类的对象f1.setValue(“Shark”,”red”);f1.output();

Fishf2=newFish();//创建Fish类的对象

f2.setValue(“Golden”,”orange”);f2.output();

}}

2.面向对象源程序:Fish.java面向对象编程技术说明:不需要--函数声明特点:数据与操作整合数据1操作变量函数数据2操作变量函数2022/12/2669publicclassFish6.1类的基本概念类的概念是为了让程序设计语言能更清楚地描述日常生活中的事物。类是对某一类事物的描述,是抽象的、概念上的定义;而对象则是实际存在的属该类事物的具体的个体,称为实例(Instance)。下面用一个现实生活中的例子来说明类与对象的概念。图6.1所示的是一个“汽车类”与“汽车实例”的例子。

2022/12/26706.1类的基本概念类的概念是为了让程序设计语言能更清楚地描汽车设计图第1辆第2辆第3辆图6.1汽车类与汽车的实例2022/12/2671汽车设计图第1辆第2辆第3辆图6.1汽车类与汽车的实例20其中,汽车设计图就是“汽车类”,由这个图纸设计出来的若干个汽车就是按照该类生产出的“汽车对象”。2022/12/2672其中,汽车设计图就是“汽车类”,由这个图纸设计出来的若干个汽一般来说,类是由数据成员与函数成员封装而成的,其中数据成员表示类的属性,函数成员表示类的行为。例:下面用Java类来描述圆柱体,并能保存圆柱体的信息(底半径和高),而且还能利用此类计算出圆柱体的面积和体积。PPT--P10

P18代码2022/12/2673一般来说,类是由数据成员与函数成员封装而成的,其中数据成员表每一个圆柱体,无论尺寸大小,都有底半径和高这两个属性,而这两个属性就是圆柱体的数据,因此就本例而言,radius(半径)与height(高)可以说是圆柱体类的数据成员(datamember)。

除了底半径和高这两个数据之外,还可以把计算底面积与体积这两个函数纳入圆柱体类里,变成类的函数成员(functionmember)。Java称这种封装于类内的函数为“方法”(method)。2022/12/2674每一个圆柱体,无论尺寸大小,都有底半径和高这两个属性,而这两所谓的“类”就是把事物的数据与相关功能封装(Encapsulate)在一起,形成一种特殊的数据结构,用以表达真实事物的一种抽象。“Encapsulate”原意是“将……装入胶囊内”,现在胶囊就是类,而成员变量与成员方法便是被封入的东西。图6.2为圆柱体类的示意图。由图6.2可知,圆柱体类的成员变量有pi、radius与height,而成员方法则有计算面积的area()与计算体积的volume()。 2022/12/2675所谓的“类”就是把事物的数据与相关功能封装(Encapsulpiradiusheightarea()volume()成员变量成员方法图6.2圆柱体类2022/12/2676piarea()成员变量成员方法图6.2圆柱体类2022/6.2定义类1.类的一般结构[类修饰符]class

类名称{

声明成员变量[修饰符]数据类型成员变量名称;……

[修饰符]返回值的数据类型方法名(参数1,参数2,……){语句序列;

return[表达式];}……}2022/12/26776.2定义类1.类的一般结构2022/12/1815定义类(声明类)类名

组成--字母下划线_$数字

约定--每个单词的首字母大写。

例:类的创建修饰class类名{成员变量(属性变量)定义成员函数(成员方法)

定义}开头FishExceptionArray类的创建2022/12/2678定义类(声明类)类的创建修饰class类名开头F成员变量(属性变量)

概念--

例e:找错在类体之中、方法体之外定义的变量。(注意:必须在类体之中)intheight=260;ClassBook//class小写{intwidth=185;publicvoidsetWidth(intx){inty;}}类的创建Java只有2类变量成员变量--函数体之外定义

局部变量--函数体之中定义(形参变量、函数体内定义的变量)没有:全局变量说明:

Java中:定义成员变量=初值;对!

C++中:定义成员变量=初值;错!2022/12/2679成员变量(属性变量)在类体之中、方法体之外定义的变量。int

(1)从语法形式上看,成员变量是属于类的,而局部变量是在方法中定义的变量或方法的参数;成员变量可以被public、private、static等修饰符所修饰,而局部变量则不能被访问控制修饰符及static所修饰;成员变量和局部变量都可以被final所修饰。4.成员变量与局部变量的区别①2022/12/2680(1)从语法形式上看,成员变量是属于类的,而局部变量是在方(2)从变量在内存中的存储方式上看,成员变量是对象的一部分,而对象是存在于

堆内存的,而局部变量是存在于栈内存的。(3)从变量在内存中的存在时间上看,成员变量是对象的一部分,它随着

对象的创建而存在,而局部变量随着

方法的调用而产生,随着方法调用的结束而自动消失。②③2022/12/2681(2)从变量在内存中的存储方式上看,成员变量是对象的一部分,(4)成员变量如果没有被赋初值,

则会自动以类型的默认值赋值(有一种情况例外,被final修饰但没有被static修饰的成员变量必须显式地赋值);而局部变量则不会自动赋值,必须显式地赋值后才能使用。2022/12/2682(4)成员变量如果没有被赋初值,

则会自动以类型的默认值成员方法(函数)

作用--对本类的属性变量进行操作

定义--

例r:

例r:

方法名类的创建修饰返回类型方法名(参数部分){}publicinttotal(inte,intm,intc){returne+n+c;}voidsetWidth(intw){width=w;}是:合法的Java标识符且不能是关键字约定:首单词小写,后面各单词首字母大写功能、定义、方法名、参数、返回类型(return语句)、方法体2022/12/2683成员方法(函数)类的创建修饰返回类型方法名(参数成员方法(函数)

参数部分

例r:

例e:类的创建()--必须有形参变量--可有、可无voidsetWidthHeight(intw,inth){width=w;height=h;}

(intw,h)错voidshowWidthHeight(){System.out.println(“width=,height=”+width+height);}voidshowWidthHeight//错{System.out.println(“width=,height=”+width+height);}2022/12/2684成员方法(函数)

参数部分

成员方法(函数)

返回类型类的创建含义--告诉用户方法执行完,返回什么类型的值。说明--返回类型部分必须有。基本类型--byteshortcharintlongfloatdoubleboolean

例r:引用类型--类的类型

例r:

void----不返回任何值

例r:

例e:booleanm(){returntrue;}FishgetFish(){returnnewFish(“Shark”,”Red”);}voidshowWidthHeigth(){System.out.println(“width=”+width);System.out.println(“height=”+height);}showWidthHeight(){}2022/12/2685成员方法(函数)类的创建含义--告诉用户方法执行完,返回什么成员方法(函数)

return语句

作用--

格式1-

例r:返回类型void方法体return;

例e:对错?类的创建结束方法体执行,返回调用该方法处。voidshowWidthHeight(){System.out.println(“width=,height=”+width+height);return;(等价:不写return;语句)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论