《Java程序设计第2版第六章课件.ppt》由会员分享,可在线阅读,更多相关《Java程序设计第2版第六章课件.ppt(62页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第6 6章章类与对象类与对象2023/1/151通过本章的学习,主要掌握以下知识点:通过本章的学习,主要掌握以下知识点:类的基本概念类的基本概念 对象的创建与使用对象的创建与使用 对象的使用对象的使用 成员的调用成员的调用本章的重点:本章的重点:创建类创建类本章的难点:本章的难点:类类修饰符修饰符 成员数量与成员方法修饰符成员数量与成员方法修饰符 2023/1/152 在在前前面面的的章章节节中中,对对JavaJava的的简简单单数数据据类类型型、数数组组、运运算算符符和和表表达达式式及及流流程程控控制制的的方方法法作作了了详详细细的的介介绍绍。从从本本章章开开始始将将介介绍绍面面向向对对象
2、象的的程程序序设设计计方方法法。面面向向对对象象的的编编编编程程程程思思思思想想想想是是力力图图使使在在计计算算机机语语言言中中对对事事物物的的描描述述与与现现实实世世界界中中该该事事物物的的本本来来面面目目尽尽可可能能 的的 一一 致致。所所 以以 在在 面面 向向 对对 象象 的的 程程 序序 设设 计计 中中,类类(Class)(Class)和和对对象象(ObjectObject)是是面面向向对对象象程程序序设设计计方方法中最法中最核心概念核心概念核心概念核心概念。2023/1/153包括技术包括技术:封装封装、继承、多态、继承、多态核心概念:核心概念:类类 对象对象特点:特点:数据存储
3、(变量)、数据处理(函数)数据存储(变量)、数据处理(函数)面向对象编程技术面向对象编程技术是创建对象的模板,是具有相同是创建对象的模板,是具有相同属性属性属性属性和相同和相同行为行为行为行为的对象的模板。的对象的模板。是类的具体实例(实体),任何是类的具体实例(实体),任何具体对象必然隶属于一个类。具体对象必然隶属于一个类。封装在对象中封装在对象中面向对象编程技术面向对象编程技术2023/1/154 例:例:变量变量 name鱼名称鱼名称 color鱼颜色鱼颜色 函数函数 setValue()赋值赋值 name、color output()显示显示 name、color分别用分别用“面向过程
4、面向过程”、“面向对象面向对象”编程思想实编程思想实现。现。面向对象编程技术面向对象编程技术2023/1/155#include char name20=“”;char color20=“”;main()void setValue(char n,char c);void output();setValue(“Shark”,”white”);output();setValue(“Golden”,”orange”);output();void setValue(char n,char c)strcpy(name,n);strcpy(color,c);/error:name=n;color=c;vo
5、id output()printf(“%s”,name);printf(“s”,color);面向对象编程技术面向对象编程技术1.面向过程面向过程源程序源程序:Fish.c特点:特点:数据与操作分离数据与操作分离数据数据2操作数据数据1变量变量函数函数数据数据n2023/1/156public class Fish /关键字关键字class定义类定义类 String name;/属性变量属性变量name描述鱼的名字描述鱼的名字 String color;/属性变量属性变量color描述鱼的颜色描述鱼的颜色 void setValue (String n,String c)/方法方法setVal
6、ue:给成员变量赋值:给成员变量赋值 name=n;color=c;void output()/方法方法output:显示成员变量:显示成员变量 System.out.println(name);System.out.println(color);public static void main(String args)Fish f1=new Fish();/创建创建Fish类的对象类的对象 f1.setValue(“Shark”,”red”);f1.output();Fish f2=new Fish();/创建创建Fish类的对象类的对象 f2.setValue(“Golden”,”orang
7、e”);f2.output();2.面向对象面向对象源程序源程序:Fish.java面向对象编程技术面向对象编程技术说明:说明:不需要函数声明不需要函数声明特点:特点:数据与操作整合数据与操作整合数据1操作操作变量变量函数函数数据2操作操作变量变量函数函数2023/1/1576.1 6.1 类的基本概念类的基本概念类的概念是为了让程序设计语言能更清楚地描类的概念是为了让程序设计语言能更清楚地描述日常生活中的事物。述日常生活中的事物。类类类类是是对某一类事物的描述,对某一类事物的描述,是抽象的、概念上的定义是抽象的、概念上的定义;而;而对象对象对象对象则是则是实际存在的实际存在的属该类事物的具体
8、的个体属该类事物的具体的个体,称为,称为实例实例(Instance)(Instance)。下面用一个现实生活中的例子来说明类与对象的概下面用一个现实生活中的例子来说明类与对象的概念。图念。图6.16.1所示的是一个所示的是一个“汽车类汽车类”与与“汽车实例汽车实例”的例子。的例子。2023/1/158汽车设计图第1辆第2辆第3辆图6.1 汽车类与汽车的实例2023/1/159其中,汽车设计图就是其中,汽车设计图就是“汽车类汽车类”,由这个图纸设计出来的若干个汽车就是按由这个图纸设计出来的若干个汽车就是按照该类生产出的照该类生产出的“汽车对象汽车对象”。2023/1/1510一般来说,一般来说,
9、类是由类是由数据成员数据成员与与函数成员函数成员封装而封装而成的成的,其中,其中数据成员数据成员数据成员数据成员表示类的表示类的属性属性,函数成员函数成员函数成员函数成员表示类表示类的的行为行为。例:下面用例:下面用JavaJava类来描述圆柱体,并能保存圆类来描述圆柱体,并能保存圆柱体的信息(底半径和高),而且还能利用此类计算柱体的信息(底半径和高),而且还能利用此类计算出圆柱体的面积和体积。出圆柱体的面积和体积。PPT-P10PPT-P10P18P18代码代码2023/1/1511每一个圆柱体,无论尺寸大小,都有底半径和每一个圆柱体,无论尺寸大小,都有底半径和高这两个属性,而这两个属性就是
10、圆柱体的数据,因高这两个属性,而这两个属性就是圆柱体的数据,因此就本例而言,此就本例而言,radiusradius(半径)与(半径)与heightheight(高)可以(高)可以说是圆柱体类的数据成员说是圆柱体类的数据成员(data member)(data member)。除了底半径和高这两个数据之外,还可以把计除了底半径和高这两个数据之外,还可以把计算底面积与体积这两个函数纳入圆柱体类里,变成类算底面积与体积这两个函数纳入圆柱体类里,变成类的函数成员的函数成员(function member)(function member)。JavaJava称这种封装于类称这种封装于类内的函数为内的函数
11、为“方法方法”(method)(method)。2023/1/1512所谓的所谓的“类类类类”就是把事物的数据与相关功能就是把事物的数据与相关功能封装封装(Encapsulate)(Encapsulate)在一起,形成一种特殊的数在一起,形成一种特殊的数据结构,用以表达真实事物的一种抽象据结构,用以表达真实事物的一种抽象。“EncapsulateEncapsulate”原意是原意是“将将装入胶囊内装入胶囊内”,现在胶囊就是类,而成员变量与成员方法便是,现在胶囊就是类,而成员变量与成员方法便是被封入的东西。图被封入的东西。图6.26.2为圆柱体类的示意图。为圆柱体类的示意图。由图由图6.26.2
12、可知,圆柱体类的成员变量有可知,圆柱体类的成员变量有pipi、radiusradius与与heightheight,而成员方法则有计算面积的,而成员方法则有计算面积的areaarea()()与计算体积的与计算体积的volume()volume()。2023/1/1513piradiusheightarea()volume()成员变量成员方法图6.2 圆柱体类2023/1/15146.2 6.2 定义类定义类1 1类类的一般的一般结构结构结构结构 类修饰符类修饰符 classclassclassclass 类名称类名称 声明成员变量声明成员变量 修饰符修饰符 数据类型数据类型 成员变量成员变量成
13、员变量成员变量名称;名称;修饰符修饰符 返回值的数据类型返回值的数据类型 方法名方法名方法名方法名(参数(参数1,1,参数参数2,2,)语句序列;语句序列;return return return return 表达式表达式表达式表达式 ;2023/1/1515定义类定义类 (声明类)(声明类)类名类名 组成字母组成字母 下划线下划线_$数字数字 约定每个单词的首字母大写。约定每个单词的首字母大写。例例:类的创建类的创建修饰修饰 class 类名类名 成员变量(属性变量)成员变量(属性变量)定义定义 成员函数(成员方法成员函数(成员方法)定义定义开头开头Fish Fish ExceptionA
14、rrayExceptionArray类的创建类的创建2023/1/1516成员变量成员变量(属性变量(属性变量)概念概念 例例e:找错找错在在类体之中类体之中类体之中类体之中、方法体之外方法体之外方法体之外方法体之外定义的定义的变量变量。(注意:必须在类体之中)(注意:必须在类体之中)intint height height=260;Class Book /class 小写 intint width width=185;public void setWidth(intint x x)intint y y;类的创建类的创建Java 只有只有2类变量类变量 成员变量成员变量成员变量成员变量函数体之
15、外函数体之外 定义定义 局部变量局部变量局部变量局部变量函数体之中函数体之中 定义定义 (形参变量、函数体内定义的变量)(形参变量、函数体内定义的变量)没有:没有:全局变量全局变量说明说明:Java Java 中:中:定义成员变量初值;定义成员变量初值;对对!C+C+中:中:定义成员变量初值;定义成员变量初值;错错!2023/1/1517(1 1)从)从语法形式语法形式语法形式语法形式上看,成员变量是上看,成员变量是属于类属于类的,而局部变量是在的,而局部变量是在方法中定义方法中定义的变量或方法的变量或方法的参数;成员变量可以被的参数;成员变量可以被publicpublic、privatepr
16、ivate、staticstatic等修饰符所修饰,而局部变量则不能被等修饰符所修饰,而局部变量则不能被访问控制修饰符及访问控制修饰符及staticstatic所修饰;成员变量和所修饰;成员变量和局部变量都可以被局部变量都可以被finalfinal所修饰。所修饰。4.4.成员变量成员变量成员变量成员变量与与局部变量局部变量局部变量局部变量的的区别区别区别区别2023/1/1518(2 2)从变量在内存中的)从变量在内存中的存储方式存储方式存储方式存储方式上看,上看,成员变量是对象的一部分,而对象是存在于成员变量是对象的一部分,而对象是存在于堆内存堆内存的,而局部变量是存在于的,而局部变量是存在
17、于栈内存栈内存的。的。(3 3)从变量在内存中的)从变量在内存中的存在时间存在时间存在时间存在时间上看,上看,成员变量是对象的一部分,它随着成员变量是对象的一部分,它随着对象的创建而存在对象的创建而存在,而局部变量随着,而局部变量随着方法的调用而产生方法的调用而产生,随着方法调用的结束而自,随着方法调用的结束而自动消失。动消失。2023/1/1519 (4 4)成成 员员 变变 量量 如如 果果 没没 有有 被被 赋赋 初初 值值,则则会会自自动动以以类类型型的的默默认认值值赋赋值值(有有一一种种情情况况例例外外,被被finalfinal修修饰饰但但没没有有被被staticstatic修修饰饰
18、的的成成员员变变量量必必须须显显式式地地赋赋值值);而而局局部部变变量量则则不不会会自自动动赋赋值值,必须必须显式地赋值显式地赋值后才能使用。后才能使用。2023/1/1520成员方法成员方法(函数)(函数)作用作用 对本类的属性变量进行操作对本类的属性变量进行操作 定义定义 例例r:例例r:方法名方法名类的创建类的创建修饰修饰 返回类型返回类型 方法名方法名 (参数部分参数部分)public int total(int e,int m,int c)return e+n+c;void setWidth(int w)width=w;是:合法的是:合法的Java标识符且不能是关键字标识符且不能是关
19、键字约定:首单词小写,后面各单词首字母大写约定:首单词小写,后面各单词首字母大写功能、定义、功能、定义、方法名、参数、返回类型方法名、参数、返回类型(return语句语句)、方法体方法体2023/1/1521成员方法成员方法(函数)(函数)参数部分参数部分 例例r:例例e:类的创建类的创建()()必须有必须有形参变量可有、可无形参变量可有、可无void setWidthHeight (int w,int h)width=w;height=h;(int w,h)错错void showWidthHeight ()System.out.println(“width=,height=”+width+h
20、eight);void showWidthHeight /错错System.out.println(“width=,height=”+width+height);2023/1/1522成员方法成员方法(函数)(函数)返回类型返回类型类的创建类的创建含义含义告诉用户方法执行完,返回什么类型的值。告诉用户方法执行完,返回什么类型的值。说明说明返回类型部分必须有。返回类型部分必须有。基本类型基本类型 byte short char int long float double boolean 例例r:引用类型引用类型类的类型类的类型 例例r:void不返回任何值不返回任何值 例例r:例例e:boole
21、an m()return true;Fish getFish()return new Fish(“Shark”,”Red”);void showWidthHeigth()System.out.println(“width=”+width);System.out.println(“height=”+height);showWidthHeight()2023/1/1523成员方法成员方法(函数)(函数)return 语句语句 作用作用 格式格式1 例例r:返回类型返回类型void 方法体方法体 return;例例e:对错?对错?类的创建类的创建结束方法体执行,返回调用结束方法体执行,返回调用该方法
22、处。该方法处。void showWidthHeight()System.out.println(“width=,height=”+width+height);return;(等价:不写等价:不写等价:不写等价:不写return;return;语句语句语句语句)public int total(int e,int m,int c)return;return;2023/1/1524成员方法成员方法(函数)(函数)return 语句语句 格式格式2 例:例:匹配匹配 函数返回类型函数返回类型类的创建类的创建return 表达式;表达式;结束方法体的执行,将表达式的结束方法体的执行,将表达式的值作为方
23、法的返回值,返回方法值作为方法的返回值,返回方法调用处。调用处。public int total(int e,int m,int c)return e+m+c;等价等价 return(e+m+c)(e+m+c);对对!/return 3.0;错错!2023/1/1525表6.1类类修饰符修饰符修饰符修饰符的含义修修饰饰符符含含 义义public将一个类声明为公共类,它可以被任何对象访问,一个程序的主类必须是公共类。abstract将一个类声明为抽象类,没有实现的方法,需要子类提供方法的实现。final将一个类声明为最终类即非继承类,表示它不能被其他类所继承。friendly友元类型,默认的修饰
24、符,只有在相同包中的对象才能使用这样的类。2023/1/1526表表6.26.2成员变量成员变量修饰符修饰符修饰符修饰符的含义的含义修修饰饰符符含含 义义public公共公共访问访问控制符。指定控制符。指定该变该变量量为为公共的,它可以被任何公共的,它可以被任何对对象的方法象的方法访问访问。private私有私有访问访问控制符。指定控制符。指定该变该变量只允量只允许许自己自己类类的方法的方法访问访问,其他任何,其他任何类类(包括子(包括子类类)中的方法均不能中的方法均不能访问访问此此变变量。量。protected保保护访问护访问控制符。指定控制符。指定该变该变量可以被它自己的量可以被它自己的类
25、类及其子及其子类访问类访问,在子,在子类类中可以覆中可以覆盖此盖此变变量。量。friendly默默认认的友元的友元访问访问控制符,在同一个包中的其他控制符,在同一个包中的其他类类可以可以访问访问此此变变量,而其他包中的量,而其他包中的类类不能不能访问该变访问该变量。量。final最最终终修修饰饰符。指定此符。指定此变变量的量的值值不能改不能改变变。static静静态态修修饰饰符。指定符。指定该变该变量被所有量被所有对对象共享,即所有的象共享,即所有的实实例都可使用例都可使用该变该变量。量。transient过过渡修渡修饰饰符。指定符。指定该变该变量是一个系量是一个系统统保留,保留,暂暂无特无特
26、别别作用的作用的临时临时性性变变量。量。volatile易失修易失修饰饰符。指定符。指定该变该变量可以同量可以同时时被几个被几个线线程控制和修改。程控制和修改。2023/1/1527表表6.36.3成员方法成员方法修饰符修饰符修饰符修饰符的含义的含义修修饰饰符符含含 义义public公共公共访问访问控制符。指定控制符。指定该该方法方法为为公共的,它可以被任何公共的,它可以被任何对对象的方法象的方法访问访问。private私有私有访问访问控制符。指定控制符。指定该该方法只允方法只允许许自己自己类类的方法的方法访问访问,其他任何,其他任何类类(包括(包括子子类类)中的方法均不能)中的方法均不能访问
27、访问此方法。此方法。protected保保护访问护访问控制符。指定控制符。指定该该方法可以被它的方法可以被它的类类及其子及其子类访问类访问。friendly默默认认的友元的友元访问访问控制符,在同一个包中的其他控制符,在同一个包中的其他类类可以可以访问访问此方法,而其他包此方法,而其他包中的中的类类不能不能访问该访问该方法。方法。final最最终终修修饰饰符。指定符。指定该该方法不能被重方法不能被重载载。static静静态态修修饰饰符。指定不需要符。指定不需要实实例化一个例化一个对对象就可以激活的方法。象就可以激活的方法。synchronized同步修同步修饰饰符。在多符。在多线线程程序中,程
28、程序中,该该修修饰饰符用于在运行前,符用于在运行前,对对它所属的方法加它所属的方法加锁锁,以防止其他,以防止其他线线程程访问访问,运行,运行结结束后解束后解锁锁。native本地修本地修饰饰符。指定此方法的方法体是用其他符。指定此方法的方法体是用其他语语言(如言(如C)在程序外部)在程序外部编编写的。写的。2023/1/1528下面定义前面叙述过的圆柱体类如下:下面定义前面叙述过的圆柱体类如下:class Cylinder /定义圆柱体类定义圆柱体类Cylinder double radius;/声明成员变量声明成员变量radius int height;/声明成员变量声明成员变量height
29、 double pi=3.14;/为数据成员赋初值为数据成员赋初值 void area()void area()/定义成员方法定义成员方法area(),用来计算底面积,用来计算底面积 System.out.println(“圆柱底面积圆柱底面积=”+pi*radius*radius);void volume()void volume()/定义成员方法定义成员方法volume(),用来计算体积,用来计算体积 System.out.println(“圆柱体体积圆柱体体积=”+(pi*radius*radius)*height);2023/1/15296.3 6.3 对象的创建与使用对象的创建与使用
30、对象是整个面向对象程序设计的理论基础,由于对象是整个面向对象程序设计的理论基础,由于面向对象程序中使面向对象程序中使用类来创建用类来创建对象对象,所以可以将对象,所以可以将对象理解为一种新型的变量,它保存着一些比较有用的数理解为一种新型的变量,它保存着一些比较有用的数据,但可以要求它对自身进行操作。据,但可以要求它对自身进行操作。2023/1/1530生成对象生成对象 第第1步步 第第2步步第第3步步对象对象定义定义 对象的对象的引用变量引用变量引用变量引用变量 类名类名 变量名;变量名;产生产生对象对象对象对象 new 类名类名();对象首地址对象首地址 返回:首地址返回:首地址Studen
31、t p;p=new Student();“堆堆”内存区内存区对象对象引用变量引用变量 pHhh步骤步骤区分对象引用、对象区分对象引用、对象首地址赋值给引用变量首地址赋值给引用变量 p=new Student();2023/1/1531生成对象生成对象 例例r:等价等价 区分:区分:对象对象Student p;p=new Student();Student p=new Student();对象对象、对象的、对象的引用引用 成员变量成员变量连续的存储空间连续的存储空间 成员方法成员方法变量存储对象首地址。变量存储对象首地址。2023/1/1532表表6.4 6.4 成员变量成员变量的的默认初始值默
32、认初始值默认初始值默认初始值成成员变员变量量类类型型初始初始值值bytebyte0 0shortshort0 0intint0 0longlong0L0Lfloatfloat0.0F0.0Fdoubledouble0.0D0.0Dcharcharu0000u0000(表示(表示为为空)空)boolwanboolwanfalsefalse所有引用所有引用类类型型nullnull2023/1/1533对象的内容对象的内容 包含包含 不包含不包含 例:例:上例上例student类的执行过程类的执行过程对象对象非非static成员变量、非成员变量、非static成员方法成员方法static成员变量、成
33、员变量、static成员方法成员方法类运行前类运行前static 的变量的变量teacher 在在“static”区分配区分配空间空间 static 的方法的方法main()JAVA虚拟机在虚拟机在“static”区找到区找到main()方法,开始执行方法,开始执行重要重要包含包含不包含不包含2023/1/1534使用对象使用对象 含义含义 格式格式 例例r:使用对象使用对象对象对象使用对象中的变量(赋值、显示)使用对象中的变量(赋值、显示)调用对象中的方法调用对象中的方法对象引用对象引用.成员变量成员变量对象引用对象引用.成员方法成员方法public static void main(Str
34、ing args)Student p=new Student();p.name=“张三张三”;System.out.println(“姓名姓名”+p.name);p.setName(“张三张三”,20,75);含义含义格式格式2023/1/1535【例例6.1】定义一个圆柱体类,并创建定义一个圆柱体类,并创建相应的对象,然后计算圆柱体的底面积与相应的对象,然后计算圆柱体的底面积与体积。体积。2个类个类2023/1/1536/app6_1.java /app6_1.java 圆柱体类圆柱体类CylinderCylinderclassclass CylinderCylinder /定义定义Cyli
35、nderCylinder类类 double double radiusradius;/;/定义成员变量定义成员变量radiusradius intint heightheight;/;/定义成员变量定义成员变量heightheight double double pipi=3.14;=3.14;void area()void area()void area()void area()/定义无返回值的方法定义无返回值的方法area()area(),用来计算圆柱底面积,用来计算圆柱底面积 System.out.printlnSystem.out.println(“底面积底面积=”+pi*radius
36、*+pi*radius*radiusradius););double volume()double volume()double volume()double volume()/定义返回值为定义返回值为doubledouble型的方法型的方法volume()volume(),计算体积,计算体积 returnreturnreturnreturn(pi*radius*(pi*radius*radiusradius)*height;)*height;【例例6.1】续续2023/1/1537public public classclass app6_1app6_1 /目的:生成目的:生成Cylinde
37、r Cylinder 的对象的对象 public static public static void void void void main(Stringmain(Stringmain(Stringmain(String argsargsargsargs)/程序执行的起始点程序执行的起始点 Cylinder Cylinder voluvolu;/定义对象的引用变量定义对象的引用变量 voluvolu=new Cylinder();/=new Cylinder();/创建新的对象创建新的对象 volu.radiusvolu.radius=2.8;/=2.8;/赋值圆柱赋值圆柱voluvolu的底
38、半径的底半径 volu.heightvolu.height=5;/=5;/赋值圆柱赋值圆柱voluvolu的高的高 System.out.printlnSystem.out.println(“底圆半径底圆半径=”+volu.radiusvolu.radius);/);/输出底圆半径输出底圆半径 System.out.printlnSystem.out.println(“圆柱的高圆柱的高=”+volu.heightvolu.height);/);/输出圆柱的高输出圆柱的高 System.out.printSystem.out.print(“圆柱圆柱”););volu.areavolu.area(
39、);/();/输出面积输出面积 System.out.printlnSystem.out.println(“圆柱体体积圆柱体体积=”+volu.volumevolu.volume();/();/输出体积输出体积 【例例6.1】续续2023/1/1538程序运行结果如下:程序运行结果如下:底圆半径底圆半径=2.8=2.8圆柱的高圆柱的高=5=5圆柱底面积圆柱底面积=24.6176=24.6176圆柱体体积圆柱体体积=123.088=123.088【例例6.1】续续2023/1/1539【例例6.2】创建多个圆柱体类创建多个圆柱体类Clyinder的对的对象,修改其中一个对象的成员变量象,修改其中
40、一个对象的成员变量pi的值,的值,其他对象中的其他对象中的pi值不受影响值不受影响。2023/1/1540/app6_2.java 圆柱体类圆柱体类Cylinder的成员在内存中的分配关系的成员在内存中的分配关系class Cylinderclass Cylinder /定义定义Cylinder类类 double radius;int height;double pi=3.14;void area()void area()System.out.println(底面积底面积=+pi*radius*radius);double volume()double volume()return(pi*ra
41、dius*radius)*height;2023/1/1541public class app6_2public class app6_2 /定义公共类定义公共类 public static void void main(Stringmain(String argsargs)Cylinder volu1,volu2;/声明指向对象的变量声明指向对象的变量volu1和和volu2 volu1=new Cylinder();/创建对象圆柱创建对象圆柱1:volu1 volu2=new Cylinder();/创建对象圆柱创建对象圆柱2:volu2 volu1.radius=volu2.radius
42、=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();/运行结果?运行结果?运行结果?运
43、行结果?2023/1/15426.4 6.4 参数的传递参数的传递方法既可以有返回值,也可以没有方法既可以有返回值,也可以没有参数,但在此之前我们所编写的程序中参数,但在此之前我们所编写的程序中没有传递任何参数,如例没有传递任何参数,如例6.36.3中的中的areaarea()()方法与方法与volume()volume()。基本类型基本类型基本类型基本类型引用类型引用类型引用类型引用类型值传递值传递值传递值传递2023/1/1543参数传递参数传递形参类型形参类型 基本类型基本类型 引用类型引用类型“值传值传”实参值实参值参数传递参数传递基本类型基本类型引用类型引用类型void m1(int
44、 x)void m2(Cylinder x)m1(10);传对象的传对象的首地址首地址m2(new Cylinder();m2(p);2023/1/1544例例3-10:传值参数:基本类型传值参数:基本类型例例6.5 例例6.6:传值参数:引用类型传值参数:引用类型public class PassValue /例例3-10 static void exchange(int a,int b)int temp;temp=a;a=b;b=temp;public static void main(String args)int i=10;int j=100;System.out.println(“i
45、=j=”+i+”t”+j);exchange(i,j);System.out.println(“i=j=”+i+”t”+j);/结果结果?参数传递参数传递2023/1/15456.4.2 以数组作为参数或返回值的方法调用以数组作为参数或返回值的方法调用一、一、传递数组传递数组要传递数组到方法里,只要指明传入的参数是一要传递数组到方法里,只要指明传入的参数是一个数组即可。个数组即可。【例例6.56.5】以一维数组为参数的方法调用,求若以一维数组为参数的方法调用,求若干数的最小值。干数的最小值。引用类型参数引用类型参数引用类型参数引用类型参数2023/1/1546/app6_5.java 以数组为
46、参数的方法调用以数组为参数的方法调用public class app6_5public class app6_5 /定义主类定义主类 public static void public static void main(Stringmain(String argsargs)int a=8,3,7,88,9,23;/定义一维数组定义一维数组a LeastNumb MinNumber=new LeastNumb();MinNumber.least(a);/将一维数组将一维数组a传入传入least t()方法方法 【例例6.5】续续2023/1/1547class class LeastNumbLe
47、astNumb /定义另一个类定义另一个类 public void least(public void least(intint array array)/参数参数array接收一维整型数组接收一维整型数组 int temp=array0;for(int i=0;iarrayi)temp=arrayi;System.out.println(“最小的数为:最小的数为:”+temp);【例例6.5】续续程序运行结果为:程序运行结果为:最小的数为:最小的数为:3 32023/1/1548二、二、返回值为数组类型返回值为数组类型的方法的方法一个方法如果没有返回值,则在该方法的前面用一个方法如果没有返回
48、值,则在该方法的前面用voidvoid来修饰;如果来修饰;如果返回值的类型返回值的类型为为简单数据类型简单数据类型,只,只需在声明方法的前面加上相应的数据类型即可;同理,需在声明方法的前面加上相应的数据类型即可;同理,若需方法返回一个数组,则必须在该方法的前面加上若需方法返回一个数组,则必须在该方法的前面加上数组类型的修饰符。数组类型的修饰符。见教材见教材P113P113【例例6.66.6】将一个矩阵转置后输出。将一个矩阵转置后输出。引用类型(类)引用类型(类)方法返回值:数组方法返回值:数组2023/1/1549/app6_6.java 返回值是数组类型的方法返回值是数组类型的方法publi
49、c class app6_6 public static void public static void main(Stringmain(String argsargs)int a=1,2,3,4,5,6,7,8,9;/定义二维数组定义二维数组 int b=new int 33;trans pose=new trans();/创建创建trans类的对象类的对象pose b=pose.transpose(a);/用数组用数组a调用方法,返回值赋给数组调用方法,返回值赋给数组b for(int i=0;ib.length;i+)/输出数组的内容输出数组的内容 for(int j=0;jbi.len
50、gth;j+)System.out.print(bij+);System.out.print(n);/每输出数组的一行后换行每输出数组的一行后换行 2023/1/1550class trans int temp;intint transpose(transpose(intint array array)/返回值为二维整型数组返回值为二维整型数组 for(int i=0;iarray.length;i+)/将矩阵转置将矩阵转置 for(int j=i+1;jarrayi.length;j+)temp=arrayij;arrayij=arrayji;arrayji=temp;return arra