《Java语言程序设计案例教程》课件第4章_第1页
《Java语言程序设计案例教程》课件第4章_第2页
《Java语言程序设计案例教程》课件第4章_第3页
《Java语言程序设计案例教程》课件第4章_第4页
《Java语言程序设计案例教程》课件第4章_第5页
已阅读5页,还剩108页未读 继续免费阅读

下载本文档

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

文档简介

第4章类的方法成员4.1方法的设计4.2方法中的分支语句4.3方法中的循环语句和跳转语句4.4使用Javadoc工具制作帮助文档4.5Java程序的编写规则第4章类的方法成员学习目标

掌握成员方法的声明;

学会使用重载技术设计程序;

理解Java语言中方法调用时参数的传递过程;

掌握Java语言中分支程序的设计;

掌握Java语言中循环程序的设计;

理解跳转语句continue和break的功能;

了解使用Javadoc工具制作帮助文档的方法;

理解Java程序的编写规范。一个类由数据成员和方法成员组成。方法成员对类中的数据成员进行一些操作,它由一段程序代码组成。类中定义的方法与C语言中的函数类似,但在Java语言中不允许有单独的函数存在,函数只能定义在类中。所以,在面向对象程序设计中,一般将由一个名称标识、具有一定功能的程序段叫方法,而不叫函数(习惯上,有时候人们也将方法称为函数)。一个方法由完成一定功能的语句组成。本章将介绍方法的设计技术和方法的主要组成语句。基本技能4.1方 法 的 设 计一个方法在类中进行声明(或叫定义)之后,如果实例化了该类的一个对象,那么该对象就可以执行方法中定义的操作。下面介绍方法声明与方法调用的有关知识。4.1.1方法的声明与调用

1.方法的声明在一个类中,方法的声明格式如下:

[修饰符]返回值类型方法名(参数列表) {

方法体

}修饰符是可选项,用在方法上的修饰符被称为方法修饰符,与第3章介绍的数据成员修饰符类似。方法修饰符主要有public、private、protected、static、final和abstract等(其中public、private和static在前面的章节中已经介绍过,protected、final和abstract将在第5章中介绍)。它们的含义简要说明如下:● public:用它修饰的方法,在任何包中的任何程序中都能被访问。● private:用它修饰的方法,只能在定义该方法的类中被访问。● protected:用它修饰的方法,可以被所在包中的类或者在任何包中该类的子类访问。● static:用它修饰的方法称为类方法或静态方法,可以通过类名直接调用。● final:可以用它定义最终方法,最终方法不能在子类中进行修改。● abstract:可以用它定义抽象方法,抽象方法必须在具体的子类中实现。方法可以返回一个值,返回值的类型要在方法名前面明确指出。方法可以返回简单类型(如返回int型)数据,也可以返回类类型(如返回String型)数据。若方法不返回值,则返回值类型要写关键字void,并且不能省略。因此,除了第2章介绍的构造方法外,所有的方法都要求有返回值类型。方法名可以是任何有效的Java语言标识符(具体命名规则可参考第3.7节)。方法根据实际情况可以有参数列表,也可以无参数列表(即无参数方法)。参数的类型可以为任意类型,多个参数之间要使用“,”分隔。方法体应该由Java语言中的有效语句组成。如果方法首部的返回值类型不是void,则在方法体中就要有关键字return。return语句的格式很简单,在其后直接跟返回值的表达式即可。其格式如下:

return表达式;要注意,表达式一定要保证方法能返回相应数据类型的值。但对于有些程序,即使有正确的return语句,也不能保证程序的正确。例如:01publicclassTestReturn{02 publicstaticvoidmain(String[]args){03 System.out.println(test(3));04 }05 staticinttest(inta){06 if(a>0)07 returna;08 /*else09 return-a;*/10 }11}该程序编译时,将发生“缺少return语句”的错误,因为方法test不能保证在任何情况下都有返回值(如果去掉注释,则可以编译成功)。另外,当把return语句放在一个循环语句的循环体中时,也可能出现编译错误(案例4-2中将演示该错误),因为编译时会认为这个循环体有可能不被执行(除非写成do循环或者无限循环的形式)。注意:返回值类型为void的方法也可以使用return语句,这时return语句的功能是终止方法的执行并返回到该方法的调用者。这时,return语句后不能出现表达式(即为空的return语句)。

2.方法的调用根据方法是否有返回值,可分为两种调用格式:

(1)方法有返回值时的调用。如果方法返回一个值,则通常以表达式的方式调用。例如,java.lang包中的数学函数类Math中,定义了求两个数中最大值的max方法,则通常按类似于下列的格式调用:intlarger=Math.max(3,4)*3;System.out.println(Math.max(3,4));

(2)方法无返回值时的调用。如果方法返回类型为void,即无返回值,则这时对方法以语句的形式调用。如System类中终止程序执行的方法exit,只能按类似于下列的格式调用:

System.exit(1);4.1.2【案例4-1】累加器

1.案例描述编写一个类,以完成累加器的功能。要求可以对存放在整型数组或实型数组中的一批数进行累加运算。

2.案例效果案例程序的执行效果如图4-1所示。图中第3行为整型数组中元素的值及其累加和,第4行为实型数组中元素的值及其累加和。图4-1案例4-1的执行效果

3.技术分析该程序比较简单,技术分析略。

4.程序解析下面是案例4-1的程序代码。01//*******************************************02//案例:4-1程序名:TestAdder.java03//功能:累加器程序,可以求整型数组或实型数组元素的累加和04//*****************************************0506classAdder{07 08 privateAdder(){}09 10 publicstaticfloatsum(float[]f){11 floattemp=0.0f;12 for(inti=0;i<f.length;i++){13 temp=temp+f[i];14 }15 returntemp;16 }1718 publicstaticintsum(int[]k){19 inttemp=0;20 for(inti=0;i<k.length;i++){21 temp=temp+k[i];22 }23 returntemp;24 }25}2627classTestAdder{28 publicstaticvoidmain(String[]args){29 //Addera=newAdder();30 31 //下面是测试整型数组求和的程序段32 int[]x={2,34,12,45,23,41,1};33 for(inti=0;i<x.length;i++){34 if(i==x.length-1)35 System.out.print(x[x.length-1]+"=");36 else37 System.out.print(x[i]+"+");38 }39 System.out.println(Adder.sum(x));40 41 //下面是测试实型数组求和的程序段42 float[]y={2.34f,23.34f,12.45f,234.45f,10f};43 for(inti=0;i<y.length;i++){if(i==y.length-1)45 System.out.print(y[y.length-1]+"=");46 else47 System.out.print(y[i]+"+");48 }49 System.out.println(Adder.sum(y));50 }51}该程序中,08行定义了一个无参的构造方法“privateAdder(){}”,该构造方法的修饰符为private,说明在Adder类的外面不能使用构造方法创建一个该对象的实例。那么,Adder类如何在程序中使用呢?在Adder类中,定义的求和的方法为静态的(static)和公有的(public),所以在其他类中可以直接使用Adder类中求和的成员方法。注意,在Adder类中定义的两个方法名称都为sum,只是参数类型和返回值类型不同,这就是在第2章中介绍过的方法重载。一般成员方法的重载与构造方法的重载类似,都是指两个方法具有相同的名称和不同的形式参数。方法名与形式参数一般合称为方法头标志。调用方法时,Java系统能够根据方法头标志决定调用哪个方法。在JavaAPI中有很多方法是重载的,如第3章介绍过的Arrays类,其sort方法就有十几个重载的版本。方法重载的优点是执行相似任务的方法可以使用相同的名称,可使程序清晰、易读。注意:被重载的方法必须具有不同的参数形式。也就是说重载的方法,其方法名必须相同,参数必须不同(指参数的类型、个数或顺序不同),不能通过返回值类型和方法的修饰符来区别重载的方法。如下面的三个方法不能进行重载(因为这三个方法的参数都是int型):

publicvoidm1(inta){…}

publicintm1(intb){…}

intm1(intc){…}下面的两个方法可以进行重载:

publicvoidm1(inta,floatb){…}

publicvoidm1(floatb,inta){…}4.1.3【相关知识】参数传递在方法定义中列出的参数叫形式参数,简称为形参;在方法调用时给出的参数叫实在参数,简称为实参。Java语言中,调用一个方法时将实参值拷贝给对应的形参。下面举例说明参数的传递情况。

1.参数为简单类型时的传递情况下面的程序中,其方法中的参数是简单类型的。请分析下面程序执行的结果。

01classTestParam{

02 staticvoidchange(inta){

03 a=12;

04 }05 06 publicstaticvoidmain(String[]args){07 inta=1;08 change(a);09 System.out.println("a="+a);10 }11}程序运行后,输出的a是多少?分析该程序时要注意,从表面上看好像a的结果应该为12。但其实该程序的执行过程是这样的,在main方法中定义了一个局部变量a,a的初值为1,这个a只在main方法内有效,如图4-2(a)所示。08行调用change方法时,系统给02行方法change的形参a分配一个内存空间,并将主方法中a的值1拷贝给change方法的参数a,如图4-2(b)所示,这个形参a只是一个在change方法内有效的局部变量,拷贝过程完成后,参数的传递过程也随之结束,main方法中的局部变量a和change方法中的局部变量a就没有关系了。所以,在03行改变的只是change方法中的局部变量a的值(将其改为12),如图4-2(c)所示,对main方法中的变量a没有影响。当change方法执行完成后,程序返回到main方法时,change方法中的局部变量a的生命周期结束,即分配的内存被系统回收,如图4-2(d)所示,所以09行输出的还是1。图4-2参数为简单类型时的传递过程

2.参数为对象类型时的传递情况下面程序中,其方法中的参数是数组对象。请分析下面的程序,看与上面的实例程序有什么不同。

01importjava.util.*;

02classTestParam1{

03 staticvoidchange(int[]b){

04 Arrays.fill(b,10);

05 }

06 07 publicstaticvoidmain(String[]args){08 int[]a={1,2,3,4,5,6};09 change(a);10 for(inti=0;i<a.length;i++)11 System.out.println(a[i]);12 }13}程序运行后,输出的数组元素值是什么?该程序的执行过程分析如下:在main方法中定义了一个局部数组a,并给a数组的元素提供了1~6的初值,如图4-3(a)所示(假设分配给数组对象a的内存地址从0x1000开始)。数组a由于在main方法中定义,因此其有效范围为main方法。09行调用方法change时,将主方法main中的数组对象a作为参数,传递给change方法的形参对象b(b也是一个整型数组),系统就会将数组对象变量a中存放的0x1000(即引用)拷贝给方法change的参数b,如图4-3(b)所示。这时main方法中定义的局部数组a和change方法中定义的局部数组b指向了相同的内存区,即它们的引用相同。

04行调用Arrays的fill方法时,对change方法中形参数组b的所有元素填充为10,则相应内存中main方法中的局部数组a和change方法中的局部数组b指向的数据元素都被改为10,如图4-3(c)所示。当方法change执行完成后,程序返回到main方法时,change方法中局部数组b的生命周期结束,即从内存消失(分配给数组对象变量b的存放引用的内存单元被回收),如图4-3(d)所示。所以,最后main方法中局部数组a的所有元素被改变。图4-3参数为对象(数组)时的传递过程4.2方法中的分支语句在一个方法中,流程控制语句用来控制程序中各语句的执行顺序。Java语言提供的控制语句分为分支语句和循环语句。●分支语句■简单if语句和if-else语句;■嵌套的if语句;■ switch语句。●循环语句■ while循环、do循环和for循环;■嵌套的循环语句;■ break和continue关键字。4.2.1分支流程控制

Java中的分支语句有两种:双分支if语句和多分支switch语句。if语句应用在“二选一”的情况下,而switch语句应用在“多选一”的情况下。

1.简单if语句简单if语句只在条件为真时执行语句。其语法如下:

if(布尔表达式)语句其格式中的语句可以是一组语句。例如:

if((i>=0)&&(i<=10)){

f=i;

System.out.println("iisanintegerbetween0and10");

}注意:与C语言不同,if后面必须是布尔型的表达式,而不能是数值型的,因为Java语言中的布尔型是独立的数据类型。

2. if-else语句

if-else语句在当指定的布尔表达式为true时,执行一组语句(也可是一条语句);为false时,执行另一组语句。其语法如下:

if(布尔表达式){布尔表达式为真时执行的语句;

}

else{布尔表达式为假时执行的语句;

}例如:

if(radius>=0){

area=radius*radius*PI;

System.out.println("圆的面积是:"+area);

}

else{

System.out.println("半径不能为负数");

}注意:当花括号中只有一条语句时,花括号可以省略。但为了程序逻辑结构的清晰,尽量不要省略花括号。

3.嵌套的if语句

if或if-else中要执行的语句可以是任意合法的Java语句,当然也包括其他if或if-else语句。如果一条if语句中还包含其他的if语句(或if-else语句),或一条if-else语句中还包含其他的if语句(或if-else语句),则构成if语句的嵌套。例如:

if(i>k){

if(j>k)

System.out.println("k是i和j三个数比较小的一个");

}

else System.out.println("i等于或者小于k");注意:该例中如果将花括号去掉,则会造成理解上的二义性,既可以认为else与外层的if匹配,也可以认为else与内层的if匹配。没有花括号时,一般在程序设计语言中规定,else语句将与最近的if语句相匹配。请读者思考,如果将上例程序中的{}去掉,结果正确吗?如当i=3、j=1、k=2时,最后输出else分支内语句,这是错误的结果。当有多重if语句嵌套在else语句中时,常使用如下的书写风格:

if(布尔表达式1)语句1

elseif(布尔表达式2)语句2

elseif(布尔表达式3)语句3 elseif(布尔表达式n)语句n

else语句n+1;这个风格可以避免深层缩进,使程序容易阅读。

4.多路分支语句switch

switch语句的一般形式如下:

switch(表达式){

case常量1:语句块1;//分支1

case常量2:语句块2;//分支2

case常量n:语句块n;//分支n

default:语句块n+1;//分支n+1

}在使用switch语句时要注意以下问题:● switch后表达式的值必须是byte、char、short或int类型的,不能使用浮点类型或long类型,也不能为一个字符串,并且必须写在一对括号内。● case子句中常量的类型必须与表达式的类型相容,而且每个case子句中常量的值必须是不同的。● default子句是可选的,当表达式的值与任一个case子句中的值都不匹配时,就执行default后的语句。●如果没有使用break语句作为某一个case代码段的结束句,则程序的执行将继续到下一个case,而不检查case表达式的值。4.2.2【案例4-2】计算偿还金

1.案例描述设计程序,根据年贷款利率、贷款年限和贷款额,计算偿还金额。本题中,假设只有三种贷款方式,即3年期、5年期和10年期,其利率分别是:3年期为7%,5年期为8%,10年期为10%。

2.案例效果案例的执行结果如图4-4所示。图4-4案例4-2的执行结果

3.技术分析该程序要使用if语句,根据不同的贷款年限来计算利息。

4.程序解析案例程序如下:01//**********************************************02//案例:4-2程序名:TestCash.java03//功能:计算偿还金04//**********************************************0506classCash{07 //lendAmount为贷款数量08 privatefloatlendAmount;09 //lendYear为贷款年限10 privateintlendYear;11 //下面3个常量为年利率13 privatefinalfloatTHREE_YEAR_INTEREST_RATE=0.07F;14 privatefinalfloatFIVE_YEAR_INTEREST_RATE=0.08F;15 privatefinalfloatTEN_YEAR_INTEREST_RATE=0.10F;16 17 //有参数的构造方法18 publicCash(floatlendAmount,intlendYear){19 this.lendAmount=lendAmount;20 this.lendYear=lendYear;21 }22 23 //计算偿还金24 privatefloatcompensateAmount(){25 if(lendYear==3)26 returnlendAmount*lendYear*THREE_YEAR_INTEREST_RATE+lendAmount;27 elseif(lendYear==5)28 returnlendAmount*lendYear*FIVE_YEAR_INTEREST_RATE+lendAmount;29 elseif(lendYear==10)30 returnlendAmount*lendYear*FIVE_YEAR_INTEREST_RATE+lendAmount; 31 else{32 System.out.println("贷款年限只能是3年、5年或10年!");33 System.exit(-1);34 return0.0f;35 }36 }37 38 //显示贷款信息和偿还金39 publicvoidshowCompensateAmount(){40 System.out.println("共贷款"+lendAmount+"元,"+lendYear+"年后的偿还金为"+compensateAmount()+"元");41 }42}4344classTestCash{45 publicstaticvoidmain(Stringargs[]){46 Cashc1=newCash(2000.0f,3);47 c1.showCompensateAmount();48 49 Cashc2=newCash(10000.0f,5);50 c2.showCompensateAmount();51 52 Cashc3=newCash(10000.0f,10);53 c3.showCompensateAmount();54 }55}该程序的13行、14行和15行定义了3个存放年利率的常量。注意,常量标识符一般用大写字母表示。注意,第34行在程序中其实是多余的,但将其去掉,程序将不能正确编译。4.2.3【相关知识】在方法中使用常量在第3章介绍过,在类中final修饰的数据成员是常量成员,其值不能在程序中进行修改。在方法中,也可以用final说明局部常量,但与类中final说明的常量成员有一点不同。看下面的实例:01classTestFinal{02 staticfinalintb=5;03 publicstaticvoidmain(String[]args){04 finalinta;05 a=45;06 //Temp.b=34;07 //a=50;08 }09}第02行如给成员常量b不赋初值,则程序编译有错误,但第04行在方法中说明的局部常量a,可以在以后赋值,但只能赋一次值。所以,程序的第06行和第07行均有错误。4.3方法中的循环语句和跳转语句

Java语言与C语言类似,也有3种循环语句,即for、do-while和while循环。Java程序中的跳转语句经常使用在循环中。4.3.1循环语句和跳转语句循环结构的程序是在一定条件下,反复执行某段程序的流程结构,被反复执行的程序称为循环体。

1. while语句

while语句的语法格式如下:

while(布尔表达式){循环体

}

while语句的循环条件是一个布尔表达式,它必须放在括号中。在循环体执行前,先计算布尔表达式,若结果为true,则执行循环体;若结果为false,则终止循环体的执行,程序转移到while循环后的语句执行。

2. do-while语句

do-while语句的语法格式如下:

do{循环体

}while(布尔表达式)

do-while循环先执行循环体,再计算循环条件,若计算结果为true,则执行循环体;若为false,则终止do循环的执行。

while循环和do-while循环的比较:

(1) while循环先计算布尔表达式的值,再根据计算结果确定是否执行循环体,因此循环体有可能一次也不执行。

(2) do循环先执行循环体,然后再计算布尔表达式的值,因此循环体要至少被执行一次。因此,若循环体中的语句至少需要执行一次,建议使用do循环,否则可以使用while语句。

3. for语句

for语句的语法格式如下:

for(循环变量初始化;循环条件;循环变量调整语句){循环体

}

for循环语句以关键字for开始,for后面的括号中是3个由分号分开的控制元素,它们都以表达式的方式出现。循环条件用于控制循环体的执行次数,其结果应该为一个布尔值。循环体在花括号中,当然只有一条循环体语句时,可以不要花括号。为了使程序结构清晰,建议在任何情况下都写上花括号。注意:for循环一般使用在循环次数事先确定的情况下,而while和do-while循环一般用在循环次数事先不确定的情况下。在for循环、while循环和do-while循环的循环体中,都可以出现其他的循环语句,也就是说它们都可以嵌套。嵌套循环由一个外层循环和一个或多个内层循环组成。每当外层循环重复时,就重新进入内部循环,重新计算它的循环控制参数。

4.跳转语句跳转语句用来实现程序执行过程中流程的转移。Java的跳转语句有三个:continue、break和return。其中return语句用于从被调用的方法中返回到调用方法中。下面主要介绍break和continue语句。

1) continue语句

continue语句用于循环结构中,表示终止当前这轮循环体的执行,直接进入下一轮循环。continue语句通常有两种使用情况:

(1)不带标号的continue语句:用来结束本次循环,即跳过循环体中continue语句后面的语句,回到循环体的条件测试部分继续执行。例如:01//测试不带标号的continue语句02publicclassTestCont1{03 publicstaticvoidmain(String[]args){04 intindex=0;05 while(index<=99){06 index+=10;07 if(index%20==0)08 continue;09 System.out.println("Theindexis"+index);10 }11 }12}第07行表示当index的值能被20整除时,循环回到05行的while语句处,进行下轮循环的条件测试,而不像正常处理那样去执行后面的09行输出语句。程序的运行结果如图4-5所示。图4-5TestCout1.java程序的执行结果

(2)带标号的continue语句:用来跳过标号所指语句块中所剩的语句,回到标号所指语句块的条件测试部分继续执行(具体应用见本节案例程序)。

Java语言中,标号常用于标识一个语句块或一个循环,标号用有效的标识符表示。一般将标号放在语句块的开头或某一循环的开头。

2) break语句

break语句用于从一个语句块中跳转出来,进入该语句块后面的语句继续执行程序。break语句通常在switch语句和循环语句中使用。break语句也有两种用法:

(1)无标号的break语句:用于跳出switch语句或当前循环,但与continue语句不同的是,continue语句将使循环进入下一次,而break语句将结束循环的执行。

(2)带标号的break语句:用于结束标号标注语句块的执行。break语句的标号应标注在一个语句块的开头。请分析下面程序的执行过程:1L1:{2 a=45;3 L2:{ System.out.println("a="+2);4 if(a==45) breakL1;5 System.out.println("a="+12);6 }7 System.out.println("a="+3);8}9…如果第4行的break语句后面不带标号L1,则第4行的跳转语句只跳出L2语句块,因此第7行的输出语句还要被执行。但break带了标号L1后,如果第4行的条件成立,则第7行的语句不被执行,即程序跳出L1标号所指的语句块,即从第9行开始继续执行程序。4.3.2【案例4-3】求素数

1.案例描述给定一个大于1的正整数,求从1到该数之间的所有素数。

2.案例效果案例程序的执行效果如图4-6所示。图4-6案例4-3的执行结果

3.技术分析可以根据素数的定义判断一个数是不是素数。如要判断7是不是素数,可以用7分别除以2到6之间的所有整数,如果都不能整除,则说明7就是素数。求素数的算法描述如下:for(i从1循环到正整数n){for(j从2循环到i-1){

判断i能否被j整除;如果能整除就转到外循环,取下一个i执行程序

}

输出i(如果i不能被2到i-1之间的数据所整除,则说明i是素数);}

4.程序解析下面是案例4-3的程序代码。01//************************************************02//案例:4.3程序名:TestPrime.java03//功能:求1到给定整数之间的所有素数04//************************************************0506classPrime{07 privateintn;08 09 Prime(intn){10 this.n=n;11 }12 13 publicvoidoutputPrime(){14 System.out.println("1到"+n+"之间的所有素数如下:");15 intlineControl=0;16 outer:for(inti=1;i<n;i++) {17 for(intj=2;j<i;j++){18 if(i%j==0)continueouter;19 }20 System.out.print(i+"\t");21 }22 }23}2425classTestPrime{26 publicstaticvoidmain(Stringargs[]){27 Primep1=newPrime(Integer.parseInt(args[0]));28 p1.outputPrime();29 }30}该程序的第16行定义了一个语句标号outer,第18行的功用是:当i能被j整除时,就跳出内循环,转到由标号outer标识的外循环,即执行第16行所指的外循环语句。第20行的功用是:当i不能被2到i-1之间的所有数整除时,输出素数i。读者可以对案例4-3所示的程序进行优化,以提高程序执行的速度。4.3.3【相关知识】foreach循环在JDK6.5中新增了一个循环语句foreach,它可以用来简化某些循环语句的书写。如有下面的数组定义:float[]a={23.23f,34.9f,45.88f,45.556f,23.987f,23.0f,34.45f};要输出所有数组元素值,可以使用下面的循环语句:for(inti=0;i<a.length;i++){System.out.println(a[i]);}对上面的程序段,在Java语言中还可以用下面的简单方式写出:for(floatk:a){ System.out.println(k);}这里的k会按序自动取得数组a中的每个下标元素。Java语言中将这种格式的for语句叫做foreach循环,但要注意,只能在JDK5.0以上的版本中使用。技能拓展4.4使用Javadoc工具制作帮助文档

Javadoc是一个用于从Java源代码的注释中自动提取有关信息以生成HTML帮助文档的工具。用Javadoc生成的帮助文档与JDK帮助文档的格式类似。Javadoc作为Java软件开发包(SDK)的一个标准部分,与编译器Javac.exe和解释器Java.exe工具一样,位于安装目录下的bin文件夹中。Javadoc.exe可执行文件为开发人员快速制作程序的帮助文档提供了一种非常有效的手段。下面举例说明Javadoc制作帮助文档的方法。4.4.1文档注释中使用的标记

1.文档注释在第1章介绍过,Java的注释有3种方式,其中文档注释专门用于生成HTML格式的帮助文档。文档注释用“/**……*/”表示,即注释内容要写入“/**”和“*/”之间。文档注释的内容应该放在类、属性、构造方法、成员方法的前面,以解释和说明这些程序结构。文档注释“/**……*/”可以跨行使用,但要求每一行要以“*”号开始。在注释的内容中,还允许使用HTML语言中的标记。例如,下面的注释中使用了HTML的标记<strong>:/***Thisisa<strong>example</strong>documentcomment.*/由于文档注释中内容的第一句话会被Javadoc工具自动放在所生成HTML文件的开头,并将其作为对注释内容的一个总结,因此,该总结以*字符后的内容为起点,并结束于第一个句号之前。

2.文档注释中使用的标记要使Javadoc工具正确理解用户注释的含义,可以在文档注释中使用一些Javadoc规定的标记。这些标记位于文档注释内,要求每个标记要另起一行,以一个“*”字符开始。表4-1是Javadoc工具常用的几个标记。表4-1几个常用的Javadoc标记4.4.2Javadoc应用实例下面是一个使用Javadoc文档生成器的实例:01/**02*Thisisa<strong>example</strong>documentcomment.03*@authorRentaiming04*@versionv1.005*/0607publicclassExampleDocComment{0809 /**10 *xx是一个公有成员属性11 */12 publicintxx=0;13 1415 /**16 *ExampleDocComment是一个无参数的构造方法17 */18 publicExampleDocComment(){19 }20 21 /**22 *setXx方法用来给属性xx提供数值23 *@paramxx 参数xx是一个整型数值24 */25 publicvoidsetXx(intxx){26 this.xx=xx;27 }28 29 /**30 *getXx方法取得公有成员xx的数据31 *@returnxx返回整型数据32 */33 publicintgetXx(){34 returnxx;35 } 36}使用下列Javadoc命令生成帮助文档:javadoc-version-authorExampleDocComment.java执行该命令后,在源程序文件所在目录中生成十几个HTML格式的帮助文档,点击其中的index.html文件,则显示类似于图4-7所示的帮助文档窗口。该窗口与JDK帮助系统的风格是一致的,使用起来很方便。图4-7Javadoc工具生成的帮助文档窗口注意,该程序所有的帮助都使用了文档注释的格式(/***/)。第02行的<strong>example</strong>将使example加粗显示;第03行的@authorRentaiming将在帮助文档中加上作者信息;第04行的@version将帮助文档中加上版本信息,如图4-7所示。每个成员变量前和每个方法前的文档注释将会被Javadoc工具自动生成的帮助所使用。程序的第23行还使用了参数标记@param,在第31行使用了返回值标记@return,这样生成的帮助文档将对参数和返回值进行说明,如图4-8所示。图4-8帮助文档中方法的详细说明

Javadoc也可使用下面的简单格式:

javadocExampleDocComment.java这时生成的帮助将忽略作者和版本信息。另外,Javadoc还提供了很多有用的标记,具体情况可查看Javadoc的帮助。工程规范4.5Java程序的编写规则一个软件开发团队中,每个人一般只负责所开发系统中的某个部分,在软件编码的最后阶段,要将这些部分集成起来,构建成一个最终的软件产品。因此,为了便于软件开发成员之间互相协作、交流和软件的集成,一个软件开发团队一般都会制定一些编码标准或软件开发规则,这些规则一般依据国家标准、行业标准或软件开发工具的特点等制定。本节介绍一些使用Java语言开发软件时常用的软件编写规则。4.5.1类的设计规则下面是几点基本的类设计规则:●使用统一、一致的编码风格。●每个类的前面要有对该类的注释;●在包含main的类中,不要再设计其他的方法,即将main方法放在一个单独的类中;●要使用同一个包中的多个类时,尽量在import语句中使用“*”来代替多个类名;●一般不要使用public修饰成员变量;●程序中其值不变的量,尽量使用final修饰符来声明;●对于类中定义的成员变量,用构造方法进行初始化;●类中的成员属性,使用setXXX和getXXX设置或获取其值;●一个类的不同方法之间、不同性质的属性之间、属性与方法之间一般要空一行或两行;●一个方法或属性的注释放在紧接其代码的前面;●尽可能细致地加上注释,并用Javadoc注释文档语法生成自己的程序文档;●使类尽可能短小精悍,而且只解决一个特定的问题;●一个类要提供尽可能少的公用方法;●源程序中,每行的字符要保持在80个以内。4.5.2方法的设计规则方法的主要设计规则是:●方法中尽量不要使用continue语句;● break语句一般只使用在switch语句中;●每个方法体应该都有return语句,返回值为void的方法,return语句后不能有返回值,并且要将return语句放在方法的最后一行;●尽量不要使用if语句的多层嵌套,例如;if(a>0)if(b>0)x=a*b;…可将if语句写为“if((a>0)&&(b>0)”格式。●将对外提供服务的方法用public修饰,支持类中功能的方法用private修饰。另外,关于标识符的命令规则和程序的书写规则已经在前面的“工程规范”中介绍过。读者在编写程序时应尽量养成好的设计习惯,即遵守一般的编程规则。基础练习【简答题】

4.1什么是方法?如何声明方法?

4.2方法的调用有哪两种格式?

4.3什么是方法重载?举例说明。

4.4final修饰符用在成员变量前和用在一个方法的局部变量前有没有区别?

4.5举例说明当参数是对象类型时的传递过程。

4.6分支语句有哪几种类型?它们的格式如何?

4.7对于两个实数要进行的“==”比较,将如何处理?

4.8举例说明有些程序使用switch语句可以简化程序的编写。

4.9说明for、while和do-while循环的格式,并对其进行比较。

4.10举例说明foreach循环的使用方法。

4.11说明使用Javadoc制作帮助文档的优点。

4.12根据你的理解,说明你编写Java程序时要遵守的规则。【选择题】

4.13下列方法定义中,正确的是()。

A)intx(inta,b){return(a-b);}

B)doublex(inta,intb){intw;w=a-b;}

C)doublex(a,b){returnb;}

D)intx(inta,intb){returna-b;}

4.14下列方法定义中,正确的是()。

A)voidx(inta,intb);{return(a–b);}

B)x(inta,intb){returna-b;}

C)doublex{returnb;}

D)intx(inta,intb){returna+b;}

4.15下列方法定义中,不正确的是()。

A)floatx(inta,intb){return(a-b);}

B)intx(inta,intb){returna-b;}

C)intx(inta,intb);{returna*b;}

D)intx(inta,intb){return1.2*(a+b);}

4.16下列方法定义中,正确的是()。

A)intx(){charc

温馨提示

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

评论

0/150

提交评论