《JAVA全套简明教程ch05-方法》由会员分享,可在线阅读,更多相关《JAVA全套简明教程ch05-方法(20页珍藏版)》请在金锄头文库上搜索。
1、YANGLINBNUITCJava程序设计第5章 方法学习目标o 掌握声明和调用方法的语法 o 理解方法参数的作用 o 掌握如何传递方法参数 o 掌握方法重载 o 理解局部变量的作用域 o 熟悉Math类 o 掌握声明和导入包声明方法o 方法(method)是为执行一个操作组合在一起的语句集 合。一个类中可以声明多个方法。 o 语法MethodDeclaration: MethodHeader MethodBody MethodHeader: Modifiersopt ResultType Identifier(FormalParameterListopt) Throwsopt Modifie
2、rs: public protected private static abstract final synchronized native strictfp ResultType: Type void MethodBody: statements 方法声明示例public static int max(int num1, int num2) int result = 0;if(num1 num2)result = num1;elseresult = num2;return result; 方法头方法体修饰符返回值类型方法名称形式参数 形参列表参数类型参数名称返回值方法头o 方法签名(Meth
3、od Signature)指方法名称、参数类型 和参数数量。一个类中不能包含具有相同签名的多个 方法。 o 方法头中声明的变量称为形参(formal parameter)。 当调用方法时,可向形参传递一个值,这个值称为实 参(actual parameter / argument)。形参可以使用 final进行修饰,表示方法内部不允许修改该参数。 o 方法可以有一个返回值(return value)。如果方法没 有返回值,返回值类型为void。调用方法o 声明方法只给出方法的定义。要执行方法,必须调用 (call/invoke)方法。 n如果方法有返回值,通常将方法调用作为一个值来处理。 in
4、t large = max(3, 4); System.out.println(max(3,4); n如果方法没有返回值,方法调用必须是一条语句。 System.out.println(“Welcome to Java!”); o 当调用方法时,程序控制权转移至被调用的方法。当 执行return语句或到达方法结尾时,程序控制权转移 至调用者。 o 如果是当前类中的静态方法,可以直接调用。其它类 中的静态方法需要通过类名调用。Example:TestMax.java调用堆栈o 每当调用一个方法时,系统将参数、局部变量存储在 一个内存区域中,这个内存区域称为调用堆栈(call stack)。当方法
5、结束返回到调用者时,系统释放相应 的内存。maink :j : 2i : 5 调用main方法maink :j : 2i : 5 调用max方法maxresult : 5num2 : 2num1 : 5 maink : 5j : 2i : 5 max方法结束main方法结束传递参数o 如果方法声明中包含形参,调用方法时,必须提供实 参。 n实参的类型必须与形参的类型兼容。 n实参顺序必须与形参的顺序一致。o 当调用方法时,实参值的副本被传递给方法的形参。 方法内部对形参的修改不影响实参值。public static void nPrintln(String message, int n) fo
6、r (int i = 0; i n; i+)System.out.println(message); nPrintln(“Hello”, 3); /正确 nPrintln(3, “Hello”); /错误Example:TestPassByValue.java方法重载o 方法重载(overloading)是指方法名称相同,但方法 签名不同的方法。一个类中可以包含多个重载的方法 。 o 当调用方法时,Java编译器会根据实参的个数和类型 寻找最准确的方法进行调用。 o 调用可能匹配的方法多于一个,则会产生编译错误, 称为歧义调用(ambiguous invocation)。Example:Tes
7、tMethodOverloading.java, AmbiguousOverloading.java例 使用方法计算税款o 美国的个人所得税根据纳税人情况和须纳税收入进行 计算。编写程序,用户输入纳税人情况和须纳税收入 ,计算出2002年的所得税。2002年美国个人所得税税率表Example:ComputeTaxWithMethod.java局部变量的作用域o 方法内部声明的变量称为局部变量(local variable) 。 o 变量的作用域(scope)指程序中可以使用该变量的部分 。 o 局部变量的作用域从它的声明开始,直到包含该变量 的程序块结束。局部变量在使用前必须先赋值。 o 在方
8、法中,可以在不同的非嵌套程序块中以相同的名 称多次声明局部变量。但不能在嵌套的程序块中以相 同的名称多次声明局部变量。 o 在for语句的初始动作部分声明的变量,作用域是整个 循环。在for语句循环体中声明的变量,作用域从变量 声明开始到循环体结束。 Example:TestLocalVariable.java Math类o 常量 nPI : 3.14159265358979323846 nE : 2.7182818284590452354 o 方法 n三角函数 sin, cos, tan, asin, acos, atan,toRadians,toDigrees n指数 exp, log,
9、log10,pow, sqrt n取整 ceil, floor, rint, round n其它 min, max, abs, random例 生成随机字符o 编写生成随机字符的方法。 Java中每个字符对应一个Unicode编码从0000到FFFF。在生 成一个随机字符,就是产生一个从0到65535之间的随机数。 由于0=Math.random()1.0,所以计算表达式为: (int)(Math.random() * (65535 + 1) 。 要生成两个字符之间的随机字符的表达式为: (char)(ch1 + Math.random() * (ch2 ch1 + 1)Example:Ran
10、domCharacter.java, TestRandomCharacter.java方法抽象o 可以将方法体看作一个黑匣子,其中包含了方法实现 的细节。方法签名方法体输入返回值对客户可见对客户不可见自顶向下的设计o 在设计较大的程序时,可以采用“分而治之”的方法 ,将其分解为一些子问题。子问题再被分解为更小、 更易处理的问题。例 显示日历o 编写程序,显示给定年和月份的日历。设计分析printCalenderreadInputprintMonthprintMonthTitleprintMonthBodyprintMonthNamegetStartDaygetTotalNumOfDaysget
11、NumOfDaysInMonthisLeapYearExample:PrintCalendar.java 包o 包(package)是相关类和接口的集合,它可以提供访问保 护和名称空间管理。 n组织功能:将相关的类和接口组织在一起,便于识别和管理 n防止命名冲突:不同包中的相同命名,不会产生冲突 n访问控制:控制包间的类型的可访问性 o 语法 package packagename;npackage语句必须位于源文件的第一条语句,源文件中定义 的所有类和接口都属于指定的包。 n如果没有使用package语句,那么类和接口被放在缺省包 (default package)中,缺省包是一个没有名称的
12、包。包的命名o 使用组织的internet域名的反序形式命名包。一个组 织内部发生的命名冲突需要由组织内部的约定来处理 ,通常在组织名称后面包含项目名称。包名必须与目 录结构一一对应,目录名之间用.分隔。 组织 World Wide Web Consortium 域名 www.w3c.org 包名 org.w3c.domorg.w3c.dom.boo tstraporg.w3c.dom.eve nts组织 The Apache Software Foundation 域名 www.apache.org 包名 org.apache.tools.a ntorg.apache.to ols.ant.
13、helperorg.apache.ca talinaorg.apache.ca talina.core组织 北京师范大学信息 技术与软件工程学院 域名 包名 com.bnuitse.putcom.bnuitse.pu t.modelcom.bnuitse.pu t.viewExample:com/prehall/mypackage/Format.java 使用包中的类o 用简单名称引用包成员。 n代码与要使用的成员位于相同的包 n成员所属的包已经被导入 o 用完全限定名称引用包成员 n使用另一个包中的成员,而且此包未被导入 n导入多个包时,出现命名冲突 o 将特定成员导入到当前文件中,在文件开始处,类和 接口定义之前,package语句之后,加入import语句 。 o 要导入某个包中的所有的类和接口,应使用具有通配 符(*)的import语句。 o Java默认导入包java.langExample:TestFormat.java