收藏 分享(赏)

第5章方法.ppt

上传人:cw6mk8 文档编号:8460871 上传时间:2019-06-28 格式:PPT 页数:20 大小:768KB
下载 相关 举报
第5章方法.ppt_第1页
第1页 / 共20页
第5章方法.ppt_第2页
第2页 / 共20页
第5章方法.ppt_第3页
第3页 / 共20页
第5章方法.ppt_第4页
第4页 / 共20页
第5章方法.ppt_第5页
第5页 / 共20页
点击查看更多>>
资源描述

1、5.1 简介 5.2 方法的定义 5.3 Math类的方法 5.4 数据类型的提升 5.5 Java API包 5.6 递归方法 5.7 方法重载 5.8 综合应用实例,5.1 简介方法是类成员的一种,方法本身形成一个完整程序代码块,存在于创建此方法的类中。 所有在方法定义中声明的变量都是局部变量,只在定义它们的方法内有效。大部分方法都有一个参数表,它们提供了在方法间通过方法调用交流信息的手段。方法的参数也是局部变量。,5.2 方法的定义方法的实现包括两部分内容:方法声明和方法体。public | protected | private static final | abstract nati

2、ve synchronizedreturnType methodName(paramList)throws exceptionList /方法声明statements /方法体方法声明中的限定词的含义:static: 类方法,可通过类名直接调用abstract: 抽象方法,没有方法体final: 方法不能被重写native: 集成其它语言的代码synchronized: 控制多个并发线程的访问,1.方法声明:方法声明包括方法名、返回类型和外部参数。其中参数的类型可以是简单数据类型,也可以是复合数据类型(又称引用数据类型)。对于简单数据类型来说,java实现的是值传递,方法接收参数的值,但不能改

3、变这些参数的值。如果要改变参数的值,则用引用数据类型,因为引用数据类型传递给方法的是数据在内存中的地址,方法中对数据的操作可以改变数据的值。 2. 方法体:方法体是对方法的实现,它包括局部变量的声明以及所有合法的Java语句。方法体中声明的局部变量的作用域在该方法内部。若局部变量与类的成员变量同名,则类的成员变量被隐藏。类中的每个方法都可以直接调用同一个类中的其他方法。但是,类中的static方法只能直接调用该类中的其他的static方法。,例5.1 使用square方法,分别计算110的平方。- Java 应用程序 /SquareDemo.java import javax.swing.*;

4、 public class SquareDemo public static void main(String args) JTextArea outputArea = new JTextArea(6,5); /声明GUI组件用于显示结果JScrollPane scroller = new JScrollPane(outputArea);int result; String output = “; for ( int counter = 1; counter = 10; counter+ ) result = square( counter );output += “The square of

5、 “ + counter + “ is “ + result + “n“; / end for structureoutputArea.setText( output ); / place results in JTextAreaJOptionPane.showMessageDialog(null,scroller,“Squares“,JOptionPane.INFORMATION_MESSAGE);System.exit(0); / end method initpublic static int square( int y ) return y * y; / end method squa

6、re / end class SquareIntegers,例5.2 使用square方法,分别计算110的平方。- Java applet程序 / Fig. 6.3: SquareIntegers.java import java.awt.Container; import javax.swing.*; public class SquareIntegers extends JApplet public void init() JTextArea outputArea = new JTextArea(); /声明GUI组件用于显示结果Container container = getCont

7、entPane(); /为Applet声明一个容器container.add( outputArea ); /将GUI组件加入到容器中int result; String output = “; for ( int counter = 1; counter = 10; counter+ ) result = square( counter );output += “The square of “ + counter + “ is “ + result + “n“; / end for structureoutputArea.setText( output ); / place results

8、in JTextArea / end method initpublic int square( int y ) return y * y; / end method square / end class SquareIntegers,5.3 Math类的方法Math类是java.lang包的一部分,它由编译器自动导入。所有Math类的方法都是static的。Math类常用的方法有:abs(x) x的绝对值。ceil(x) 不小于x的最小整数(向上取整)。例ceil(9.2)是10.0,ceil(-9.8)是-9.0。cos(x) x的余弦函数值(x以弧度为单位)。exp(x) 指数e的x次幂

9、。例exp(1.0)是2.71828。floor(x) -不大于x的最大整数(向下取整)。例floor(9.2)是9.0,floor(-9.8)是-10.0。log(x) x的自然对数(以e为底)。例log(2.71828)是1.0。max(x,y) 取x和y中较大者。min(x,y) 取x和y中较小者。pow(x,y) x的y次幂。sin(x) x的正弦函数值(x以弧度为单位)。Sqrt(x) x的平方根。Tan(x) x的正切函数值(x以弧度为单位)。,Math类还定义了两个常用的数学常数: Math.PI为3.14159265358979323846; Math.E为2.71828182

10、84590452345。,例5.3 利用程序员自定义的maxinum方法确定并返回3个浮点数中的最大值。 / Fig. 6.4: Maximum.java import java.awt.Container; import javax.swing.*; public class Maximum extends JApplet public void init() String s1 = JOptionPane.showInputDialog(“Enter first floating-point value“ );String s2 = JOptionPane.showInputDialog(

11、“Enter second floating-point value“ );String s3 = JOptionPane.showInputDialog(“Enter third floating-point value“ );double number1 = Double.parseDouble( s1 );double number2 = Double.parseDouble( s2 );double number3 = Double.parseDouble( s3 );double max = maximum( number1, number2, number3 );JTextArea

12、 outputArea = new JTextArea();outputArea.setText( “number1: “ + number1 + “nnumber2: “ + number2 + “nnumber3: “ + number3 + “nmaximum is: “ + max );Container container = getContentPane();container.add( outputArea ); / end method initpublic double maximum( double x, double y, double z ) return Math.m

13、ax( x, Math.max( y, z ) ); / end method maximum / end class Maximum,例5.4 利用Math.random()方法模拟掷骰子20次,并显示结果。 / Fig. 6.7: RandomIntegers.java import javax.swing.JOptionPane; public class RandomIntegers public static void main( String args ) int value;String output = “;for ( int counter = 1; counter = 20

14、; counter+ ) value = 1 + ( int ) ( Math.random() * 6 );output += value + “ “; if ( counter % 5 = 0 )output += “n“; / end for structureJOptionPane.showMessageDialog( null, output,“20 Random Numbers from 1 to 6“,JOptionPane.INFORMATION_MESSAGE );System.exit( 0 ); / terminate application / end method m

15、ain / end class RandomIntegers,0.0Math.random()1.0,例5.5 利用Math.random()方法模拟掷骰子6000次,显示统计结果。 / Fig. 6.8: RollDie.java import javax.swing.*; public class RollDie public static void main( String args ) int frequency1 = 0, frequency2 = 0, frequency3 = 0,frequency4 = 0, frequency5 = 0, frequency6 = 0, fa

16、ce;for ( int roll = 1; roll = 6000; roll+ ) face = 1 + ( int ) ( Math.random() * 6 );switch ( face ) case 1:+frequency1; break; case 2:+frequency2; break;case 3:+frequency3; break;case 4:+frequency4; break;case 5:+frequency5; break;case 6:+frequency6; break; / end switch structure / end for structur

17、e,JTextArea outputArea = new JTextArea();outputArea.setText( “FacetFrequency“ +“n1t“ + frequency1 + “n2t“ + frequency2 +“n3t“ + frequency3 + “n4t“ + frequency4 +“n5t“ + frequency5 + “n6t“ + frequency6 );JOptionPane.showMessageDialog( null,outputArea,“Rolling a Die 6000 Times“,JOptionPane.INFORMATION

18、_MESSAGE );System.exit( 0 ); / terminate application / end method main / end class RollDie,5.4 数据类型的提升方法的定义的一个重要特点是参数的类型转换,既将参数的类型强制转换成合适的类型后再传送给方法。例如:Math.sqrt(x)中的x期望接收double型参数,但使用整型参数该方法仍能正确工作。Java的提升规则也适用于含有两种或更多种数据类型的表达式(混合类型表达式),以及作为参数传递给方法的基本数据类型。,允许提升的基本数据类型:,5.5 Java API包 java.applet Java

19、Applet包。其中含有Applet类和一些接口,能实现applet的创建,applet与浏览器的交互,以及播放音频剪辑。Java 2 中,javax.swing.JApplet用来定义使用Swing GUI 组件的applet。 java.awt Java抽象窗口工具包。其中含有创建和操纵图形用户界面所需要的类和接口,主要用于Java 1.0 和 1.1 。在Java 2中仍可使用这些类,但javax.swing包中的Swing GUI 构件更多。 java.awt.event Java 抽象窗口工具事件包。其中含有用于java.awt和javax.swing包中的GUI组件的事件处理的类与

20、接口。 java.io Java输入 / 输出包。含有支持输入和输出数据的类。 java.lang Java语言包。此包由编译器自动地导入所有程序,它含有许多Java程序所需地基本的类和接口。 Java网络包。包括使程序可以通过网络进行通信的类。 java.sql Java数据接口包。含有使Java程序和数据库交互的类和接口。 java.text Java文本包,其中含有使Java程序操纵数字、日期、字符和字符串的类和接口。该包提供了许多Java的全球化功能,既按不同的地理位置定制程序。(例如applet可以根据执行它的浏览器而确定字符显示的语言) java.util Java工具包。其中含

21、有使用程序类和接口。例如:日期和时间操作(Date),各种随机数处理(Random)。 javax.swing Java Swing GUI构件包。含有支持可移植GUI的Java swing GUI组件的类和接口。 javax.swing.event Java Swing事件包,含有用于javax.swing包中的GUI组件的事件处理的类和接口。,5.6 递归方法所谓递归方法就是直接调用自身或通过别的方法间接调用自身的方法。例5.6 利用递归方法计算并输出010的阶乘。 / Fig. 6.12: FactorialTest.java import java.awt.*; import java

22、x.swing.*; public class FactorialTest extends JApplet JTextArea outputArea;public void init() outputArea = new JTextArea();Container container = getContentPane();container.add( outputArea );for ( long counter = 0; counter = 10; counter+ )outputArea.append( counter + “! = “ + factorial( counter ) + “

23、n“ ); / end method initpublic long factorial( long number ) if ( number = 1 ) return 1;else return number * factorial( number - 1 ); / end method factorial / end class FactorialTest,5.7 方法重载Java可以定义几个同名的方法,只要这些方法具有不同的参数集合(参数的数量、类型和次序),这称为方法重载。当调用一个重载的方法时,Java编译器通过检查调用语句中参数的数量、类型和次序就可以选择合适的方法。方法重载一般用

24、来创建对不同类型的数据进行类似操作的同名方法。例5.7 利用重载的方法square计算int型数和double型数的平方。 / Fig. 6.16: MethodOverload.java import java.awt.Container; import javax.swing.*; public class MethodOverload extends JApplet public void init() JTextArea outputArea = new JTextArea(); Container container = getContentPane();container.add(

25、 outputArea );outputArea.setText( “The square of integer 7 is “ + square( 7 ) +“nThe square of double 7.5 is “ + square( 7.5 ) );public int square( int intValue ) System.out.println( “Called square with int argument: “ + intValue );return intValue * intValue; / end method square with int argumentpub

26、lic double square( double doubleValue ) System.out.println( “Called square with double argument: “ + doubleValue );return doubleValue * doubleValue; / end method square with double argument / end class MethodOverload,5.8 综合应用实例 例5.8 模拟craps游戏的applet。 craps的规则:玩家掷两个骰子。每个骰子的点数是16。骰子停下来后,计算两个骰子的点数之和。如果

27、第一次掷的和为7或11,则玩家赢。如果和为2、3或12(称为craps),则庄家赢。如果和为4、5、6、8、9或10,则这个和就成为玩家的“点数”,继续掷骰子。 如果掷的点数之和等于点数,则玩家赢;如果等于7,则玩家输;否则,再掷骰子直至分出输赢。,/ Fig. 6.9: Craps.java import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Craps extends JApplet implements ActionListener / constant variables for

28、game statusfinal int WON = 0, LOST = 1, CONTINUE = 2; / other variables usedboolean firstRoll = true; / true if first roll of diceint sumOfDice = 0; / sum of the diceint myPoint = 0; / point if no win/loss on first rollint gameStatus = CONTINUE; / game not over yet/ graphical user interface componen

29、ts JLabel die1Label, die2Label, sumLabel, pointLabel;JTextField die1Field, die2Field, sumField, pointField;JButton rollButton;,public void init() Container container = getContentPane();container.setLayout( new FlowLayout() ); die1Label = new JLabel( “Die 1“ );container.add( die1Label );die1Field = n

30、ew JTextField( 10 );die1Field.setEditable( false );container.add( die1Field );die2Label = new JLabel( “Die 2“ );container.add( die2Label );die2Field = new JTextField( 10 );die2Field.setEditable( false );container.add( die2Field );sumLabel = new JLabel( “Sum is“ );container.add( sumLabel );sumField =

31、 new JTextField( 10 );sumField.setEditable( false );container.add( sumField );pointLabel = new JLabel( “Point is“ );container.add( pointLabel );pointField = new JTextField( 10 );pointField.setEditable( false );container.add( pointField );rollButton = new JButton( “Roll Dice“ );rollButton.addActionLi

32、stener( this );container.add( rollButton );,public void actionPerformed( ActionEvent actionEvent ) if ( firstRoll ) sumOfDice = rollDice(); / roll dice switch ( sumOfDice ) case 7: case 11: / win first rollgameStatus = WON;pointField.setText( “ ); break;case 2: case 3: case 12: / lose on first rollg

33、ameStatus = LOST;pointField.setText( “ ); break;default: / remember pointgameStatus = CONTINUE;myPoint = sumOfDice;pointField.setText( Integer.toString( myPoint ) );firstRoll = false;break; / end switch structure / end if structure bodyelse sumOfDice = rollDice(); / roll diceif ( sumOfDice = myPoint

34、 ) / win by making pointgameStatus = WON;else if ( sumOfDice = 7 ) / lose by rolling 7gameStatus = LOST;displayMessage(); / end method actionPerformed,public int rollDice() int die1, die2, sum; die1 = 1 + ( int ) ( Math.random() * 6 );die2 = 1 + ( int ) ( Math.random() * 6 );sum = die1 + die2; / sum

35、 die valuesdie1Field.setText( Integer.toString( die1 ) ); / display resultsdie2Field.setText( Integer.toString( die2 ) );sumField.setText( Integer.toString( sum ) );return sum; / end method rollDice public void displayMessage() if ( gameStatus = CONTINUE )showStatus( “Roll again.“ );else if ( gameStatus = WON )showStatus( “Player wins. “ + “Click Roll Dice to play again.“ );else showStatus( “Player loses. “ + “Click Roll Dice to play again.“ );firstRoll = true; / next roll is first roll of new game / end method displayMessage / end class Craps,

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报