Java chp4方法_第1頁
Java chp4方法_第2頁
Java chp4方法_第3頁
Java chp4方法_第4頁
Java chp4方法_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第四章 方 法本章學習目標 理解如何用稱為“方法”的部件模塊化地構(gòu)造程序; 介紹Java API中常用的數(shù)學方法; 如何自己創(chuàng)建新方法; 理解在方法間如何傳遞信息; 了解遞歸方法 了解方法重載4.1 Java中的程序模塊( Program Modules in Java ) Modules in Java Methods Classes Java API provides several modules(系統(tǒng)提供的方法) Programmers can also create modules (自定義方法) 方法(Methods)允許程序員將程序任務(wù)分成多個獨立的單元,使程序模塊化?!胺侄沃?/p>

2、” 軟件重用(用現(xiàn)有的方法作構(gòu)件塊以創(chuàng)建新的程序) 可避免在程序中重復代碼 程序易于調(diào)試和維護方法調(diào)用示例:層次結(jié)構(gòu)中,老板的方法/工人的方法間關(guān)系bossworker1worker2worker3worker4worker54.2 Math4.2 Math-Class Methods Java API (Java應(yīng)用程序接口或Java類庫) Math類中提供了大量用于執(zhí)行常用數(shù)學計算的方法。 java.lang.MathMethod Description Example abs( x ) absolute value of x (this method also has float, in

3、t and long versions) abs( 23.7 ) is 23.7 abs( 0.0 ) is 0.0 abs( -23.7 ) is 23.7 ceil( x ) rounds x to the smallest integer not less than x ceil( 9.2 ) is 10.0 ceil( -9.8 ) is -9.0 cos( x ) trigonometric cosine of x (x is in radians) cos( 0.0 ) is 1.0 exp( x ) exponential method ex exp( 1.0 ) is 2.71

4、828 exp( 2.0 ) is 7.38906 floor( x ) rounds x to the largest integer not greater than x floor( 9.2 ) is 9.0 floor( -9.8 ) is -10.0 log( x ) natural logarithm of x (base e) log( Math.E ) is 1.0 log( Math.E * Math.E ) is 2.0 max( x, y ) larger value of x and y (this method also has float, int and long

5、 versions) max( 2.3, 12.7 ) is 12.7 max( -2.3, -12.7 ) is -2.3 min( x, y ) smaller value of x and y (this method also has float, int and long versions) min( 2.3, 12.7 ) is 2.3 min( -2.3, -12.7 ) is -12.7 pow( x, y ) x raised to the power y (xy) pow( 2.0, 7.0 ) is 128.0 pow( 9.0, 0.5 ) is 3.0 sin( x

6、) trigonometric sine of x (x is in radians) sin( 0.0 ) is 0.0 sqrt( x ) square root of x sqrt( 900.0 ) is 30.0 sqrt( 9.0 ) is 3.0 tan( x ) trigonometric tangent of x (x is in radians) tan( 0.0 ) is 0.0 Fig. 6.2 M Ma at th h-class methods. 4.3 4.3 方法聲明方法聲明Method Declarations 1、方法的聲明修飾符 返回值類型 方法名稱(參數(shù)表

7、) / 方法體; 注意:若沒有返回值,則指定為void 修飾符為:public、 static 、private等.例:static double area(double r) double s=Math.PI*r*r; return(s); 例:定義一個求三個整數(shù)中最大數(shù)的方法max3( ) int max3(int x,int y,int z) int big; if(xy) big=x; else big=y; if(bigz) big=z; return(big); 也可定義為:int max3(int x ,int y ,int z) int big ; big=Math.max(x

8、,y); big=Math.max(big,z); return (big);例:無參數(shù)方法示例 static void printMothed( ) for(int i=1;i=10;i+) System.out.print(“*”); 常見編程錯誤:常見編程錯誤: 在方法聲明中省略了返回值類型; 忘記在方法中返回應(yīng)該返回的值; 如果指定的返回值類型不是void,則方法中必須包含一條return語句,返回指定類型的值,否則為錯誤。 在返回值類型為void的方法中返回一個值是錯的。 在方法聲明中,參數(shù)列表右邊的括號后放置分號是錯的。 在方法體中將方法參數(shù)重新聲明為局部變量是錯的。 傳遞與方法參

9、數(shù)列表中對應(yīng)參數(shù)類型不兼容的參數(shù)是錯的。2、方法的調(diào)用 方法的定義是要說明方法的名稱及功能,而調(diào)用是實現(xiàn)方法的功能。調(diào)用時,用實參(實元)替換方法中的虛參(形參、啞元),實參的個數(shù)、類型、順序要與定義的虛參表一致。 (三一致原則三一致原則)例:無參數(shù)方法調(diào)用示例 import java.io.*;public class Test1 public static void main(String args) System.out.println(“無參調(diào)用”); printMethod( ); static void printMethod( ) for(int i=1;i=10;i+) Sys

10、tem.out.print(*); 例:有參方法調(diào)用示例 import java.io.*;public class Test2 public static void main(String args) int a=4,b=5,c=2,big; big=max3(a,b,c) ; System.out.println(big); static int max3(int x,int y,int z ) int big=x; if(bigy) big=y; if(bigz) big=z; return(big); 例:求 1!-2!+3!-4!+5! import java.io.*;public

11、 class JieC public static void main(String args) long sum=0; int flag=1; for(int j=1;j=5;j+) sum=sum+flag*jieCheng(j); flag=-flag; System.out.println(“1!-2!+3!-4!+5!=”+sum); static long jieCheng(int x ) long f=1; for(int k=1;k=x;k+) f*=k; return(f); 方法的嵌套調(diào)用 import java.io.*;public class Qtdy public

12、static void main(String args) int n=11, x ; for( x=4; x11 ; x+=2) System.out.println(comb(n,x); static float comb(int n,int x) return(fact(n)/fact(x)/fact(n-x); static long fact(int x ) long f=1; for(int k=1;k=x;k+) f*=k; return(f); 方法的遞歸調(diào)用 import java.io.*;public class Dgdy public static void main(

13、String args) int n=20 ; for(int i=1; i=n ; i+) System.out.print(fun(i)+” “); static long fun(int n ) if(n=1|n=2) return 1; else return(fun(n-1)+fun(n-2); 方法的遞歸調(diào)用示例:求1!-2!+3!-4!+5! import java.io.*;public class JieC public static void main(String args) long sum=0; int flag=1; for(int j=1;j=5;j+) sum=

14、sum+flag*jieCheng(j); flag=-flag; System.out.println(“1!-2!+3!-4!+5!=”+sum); static long jieCheng(int x ) long f=1; if(x=1) f=1; else f=x*jieCheng(x-1); return(f); 4.4 方法重載Method Overloading Method overloading Several methods of the same name Different parameter set for each method Number of paramet

15、ers Parameter types1 / Fig. 6.12: MethodOverload.java2 / Using overloaded methods3 import java.awt.Container;4 5 import javax.swing.*;6 7 public class MethodOverload extends JApplet 8 9 / create GUI and call each square method10 public void init()12 JTextArea outputArea = new JTextArea();13 Containe

16、r container = getContentPane();14 container.add( outputArea );15 16 outputArea.setText( The square of integer 7 is + square( 7 ) +17 nThe square of double 7.5 is + square( 7.5 ) );18 19 / end method init20 21 / square method with int argument 22 public int square( int intValue ) 23 24 System.out.pri

17、ntln( Called square with int argument: +25 intValue ); 26 27 return intValue * intValue; 28 29 / end method square with int argument 30 Method square receives an int as an argument31 / square method with double argument 32 public double square( double doubleValue ) 33 34 System.out.println( Called s

18、quare with double argument: +35 doubleValue ); 36 37 return doubleValue * doubleValue; 38 39 / end method square with double argument 40 41 / end class MethodOverloadCalled square with int argument: 7Called square with double argument: 7.5Overloaded method square receives a double as an argument1 /

19、Fig. 6.13: MethodOverload.java2 / Overloaded methods with identical signatures.3 import javax.swing.JApplet;4 5 public class MethodOverload extends JApplet 6 7 / declaration of method square with int argument8 public int square( int x )9 10 return x * x;11 12 13 / second declaration of method square

20、 14 / with int argument causes syntax error15 public double square( int y ) 16 17 return y * y; 18 19 20 / end class MethodOverloadMethodOverload.java:15: square(int) is already defined in MethodOverloadMethodOverload.java:15: square(int) is already defined in MethodOverload public double square( in

21、t y ) public double square( int y ) 1 error1 errorCompiler cannot distinguish between methods with identical names and parameter sets 4.5 方法和變量的作用域 所謂方法和變量的作用域就是指它們在程序中可以被使(引)用的范圍。一些方法和變量可以在整個程序中使用,但有些方法和變量只能在程序的有限部分段中使用。 當在一個方法中使用某個變量時,以如下的順序查找變量: 當前方法、當前類、一級一級向上經(jīng)過各級父類、import類和包1、變量的作用域 變量按其作用域的大小可

22、以分為局部變量和實例變量或類變量。局部變量:是定義在塊內(nèi)、方法體內(nèi)的變量。 這種變量的作用域是以塊和方法為單位的,僅在定義該變量的塊內(nèi)或方法體內(nèi)有效,而且要先定義賦值,然后再使用,即不允許超前使用。局部變量在方法每次被調(diào)用時重新初始化,與上次的調(diào)用無關(guān)。因為局部變量在查找時首先被查找,因此若某一局部變量與類的實例變量名或類變量相同時,則該實例變量或類變量在方法體內(nèi)被暫時“屏蔽”起來,只有退出這個方法后,實例變量或類變量才起作用。 局部變量和實例變量同名時的執(zhí)行效果。class Compare int x=8; public static void main(String args) f();

23、static void f() int x=6; System.out.println(x=+x); 實例變量或類變量:定義在類內(nèi)、方法外的變量是實例變量或類變量。 其中,用static修飾符修飾的變量為類變量,又稱靜態(tài)變量。 如: static String name= “張三”; 則 name為類變量。 不用static修飾符修飾的變量為實例變量。 如: String name; 則name為實例變量。兩者的區(qū)別如下:類變量是類的變量,不屬于任何一個類的具體實例對象。不是保存在某個對象的內(nèi)存空間中,而是保存在類的內(nèi)存區(qū)域的公共存儲單元中。換句話說:對于類的任何一個具體對象而言,類變量(靜態(tài)

24、變量)都是一個公共的存儲單元,任何一個類的對象訪問它,取到的都是相同的數(shù)值;同樣,任何一個類的對象去修改它,也都是對同一內(nèi)存單元進行操作。實例變量是屬于類創(chuàng)建的具體的對象的。保存在具體對象的內(nèi)存區(qū)域的存儲單元中,不同的對象來說,實例變量的存儲單元是不同的內(nèi)存單元。同樣,一個類的不同的對象去修改屬于本對象的實例變量也是針對不同的內(nèi)存單元進行操作的。兩者的引用也是有區(qū)別的: 類變量可以通過類名直接訪問,也可以通過對象來引用,兩種方法的結(jié)果是相同的。例如:下面的類Person中的類變量name的引用: class Person static String name; static String se

25、x= “男”; int age; 可以用Personname= “張三”;也可以這樣用創(chuàng)建一個對象后,用對象去引用,例如: Person p=new Person(); = “張三”;實例變量是通過類創(chuàng)建的對象來引用的。例如:可以這樣引用實例變量age p.age=20;【例】說明局部變量和實例變量及類變量的區(qū)別。 class MyObject static short s=400; /類變量,可以用類名和具體對象名兩種方法來引用 int i=200; /實例變量,僅僅只能用具體的對象來引用 void f() System.out.println(s=+s); System.out

26、.println(i=+i); short s=300; /局部變量 與類變量同名,在方法體內(nèi),屏蔽類變量 int i=100; /局部變量,與實例變量同名,在方法體內(nèi),屏蔽實例變量 double d=1E100; /局部變量 System.out.println(方法體內(nèi)局部變量的s=+s); System.out.println(方法體內(nèi)局部變量的i=+i); System.out.println(d=+d); public class LocalVariables public static void main(String args) System.out.println(用類名MyO

27、bject調(diào)用的類變量s=+MyObject.s); /* System.out.println(i=+MyObject.i); 這種書寫方式是錯誤。 因為變量i是實例變量,只屬于具體的某個對象。不屬于類MyObject,不能由它來調(diào)用。 */ MyObject myObject=new MyObject();/用具體對象myObject來引用類變量s System.out.println(用具體對象myObject調(diào)用的類變量s=+myObject.s); /用具體對象myObject來引用實例變量i,是正確的。 System.out.println(用具體對象myObject調(diào)用的實例變量

28、i=+myObject.i); myObject.f(); /調(diào)用方法 2、方法的作用域 用static修飾符修飾的修飾的方法稱為靜態(tài)方法,又叫做類方法。不用static修飾符修飾的方法,則稱為實例方法。 實例方法和類方法在整個類內(nèi)都是可見的,即都是可以被引用的。 類方法的本質(zhì)是它屬于整個類,不屬于某個實例(具體的對象),所以只要聲明了類,它的類方法就存在了,就可以調(diào)用;而實例方法則屬于每個實例對象,只能在類的實例和子類的實例中調(diào)用。兩者的區(qū)別說明:非static的實例方法是屬于某個對象的方法,在這個對象創(chuàng)建時,對象的方法在內(nèi)存中擁有自己專用的代碼段。而static的類方法是屬于整個類的,他在內(nèi)存中的代碼段將隨著類的定義進行分配和裝載,不被任何一個對象所

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論