鍍金池/ 教程/ Java/ Java 方法
Java 接口
Java 方法
Java 數(shù)字
Java 條件判斷
Java 異常處理
Java 字符
Java 重寫
Java 網絡編程
Java 數(shù)據結構
Java 的對象和類
Java 多線程
Java 封裝
Java 數(shù)組
Java Applet 基礎
Java 庫類
Java 抽象
Java 繼承
Java 正則表達式
Java 描述符的類型
Java 發(fā)送郵件
Java 序列化
Java 泛型
Java 多態(tài)
Java 變量類型
Java 基本數(shù)據類型
Java 包
Java 快速參考指南
Java 基本運算符
Java 概述
Java 字符串
Java 循環(huán)控制
Java 環(huán)境設置
Java 文件注釋
Java 文件和 I/O
Java 集合
Java 基本語法
Java 日期和時間

Java 方法

一個 Java 方法是為了執(zhí)行某個操作的一些語句的組合。舉個例子來說,當你調用 System.out.println 方法時,系統(tǒng)實際上會執(zhí)行很多語句才能在控制臺上輸出信息。

現(xiàn)在你將學習怎么創(chuàng)建你自己的方法,他們可以有返回值也可以沒有返回值,可以有參數(shù),也可以沒有參數(shù),重載方法要使用相同的方法名稱,并在程序設計中利用抽象的方法。

創(chuàng)建方法

我們用下面的例子來解釋方法的語法:

public static int funcName(int a, int b) {
  // body
}

在這里

  • public static:修飾符
  • int:返回值類型
  • funcName:函數(shù)名稱
  • a,b:形式參數(shù)
  • int a,int b:參數(shù)列

方法也包含過程或函數(shù)。

  • 過程:他們不返回值
  • 函數(shù):他們返回值

方法的定義包含方法頭和方法體。如下所示:

modifier returnType nameOfMethod (Parameter List) {
 // method body
}

以上的語法包括

  • modifier:他定義了方法的訪問類型,它是可選的。
  • returnType:方法是可能返回一個值的。
  • nameOfMethod:這是方法的名稱。方法簽名包括方法名稱和參數(shù)列表。
  • Parameter List:參數(shù)列表,它是參數(shù)的次序,類型,以及參數(shù)個數(shù)的集合。這些都是可選的,當然方法也可以沒有參數(shù)。
  • 方法體:方法體定義了這個方法是用來做什么的。

示例

這是上面定義的方法max(),該方法接受兩個參數(shù)num1和num2返回兩者之間的最大值。

/** the snippet returns the minimum between two numbers */
public static int minFunction(int n1, int n2) {
   int min;
   if (n1 > n2)
      min = n2;
   else
      min = n1;

   return min; 
}

方法調用

要想使用一個方法,該方法必須要被調用。方法調用有兩種方式,一種是有返回值的,一種是沒有返回值的。

調用方法很簡單,當程序需要調用一個方法時,控制程序轉移到被調用的方法,方法將會返回兩個條件給調用者:

  • 返回一條執(zhí)行語句
  • 執(zhí)行到方法結束

將返回void的方法作為一個調用語句,讓我看下面的例子:

System.out.println("wiki.jikexueyuan.com!");

該方法的返回值可以通過下面的例子被理解:

int result = sum(6, 9);

示例

下面的例子表明了怎么定義方法和怎么調用它:

public class ExampleMinNumber{

   public static void main(String[] args) {
      int a = 11;
      int b = 6;
      int c = minFunction(a, b);
      System.out.println("Minimum Value = " + c);
   }

   /** returns the minimum of two numbers */
   public static int minFunction(int n1, int n2) {
      int min;
      if (n1 > n2)
         min = n2;
      else
         min = n1;

      return min; 
   }
}

將會產生如下的結果

Minimum value = 6

關鍵字 void

關鍵字 void 允許我們創(chuàng)建一個沒有返回值的方法。這里我們在下一個例子中創(chuàng)建一個 void 方法 methodRankPoints。這個方法是沒有返回值類型的。調用 void 方法必須聲明 methodRankPoints(255.7); Java 語句以分號結束,如下所示:

public class ExampleVoid {

   public static void main(String[] args) {
      methodRankPoints(255.7);
   }

   public static void methodRankPoints(double points) {
      if (points >= 202.5) {
         System.out.println("Rank:A1");
      }
      else if (points >= 122.4) {
         System.out.println("Rank:A2");
      }
      else {
         System.out.println("Rank:A3");
      }
   }
}

這將產生如下的結果:

Rank:A1

通過值來傳遞參數(shù)

在調用函數(shù)時參數(shù)是必須被傳遞的。并且他們的次序必須和他們創(chuàng)建時的參數(shù)次序是一樣的。參數(shù)可以通過值或引用來傳遞。

通過值傳遞參數(shù)意味著調用方法的參數(shù),通過參數(shù)值來傳遞給參數(shù)。

示例

下面的程序給出了一個例子來顯示通過值來傳遞參數(shù)。在調用方法后參數(shù)值是不會發(fā)生變化的。

public class swappingExample {

   public static void main(String[] args) {
      int a = 30;
      int b = 45;

      System.out.println("Before swapping, a = " +
                          a + " and b = " + b);

      // Invoke the swap method
      swapFunction(a, b);
      System.out.println("\n**Now, Before and After swapping values will be same here**:");
      System.out.println("After swapping, a = " +
                         a + " and b is " + b);
   }

   public static void swapFunction(int a, int b) {

      System.out.println("Before swapping(Inside), a = " + a
                           + " b = " + b);
      // Swap n1 with n2
      int c = a;
      a = b;
      b = c;

      System.out.println("After swapping(Inside), a = " + a
                           + " b = " + b);
   }
}

這將產生如下的結果:

Before swapping, a = 30 and b = 45
Before swapping(Inside), a = 30 b = 45
After swapping(Inside), a = 45 b = 30

**Now, Before and After swapping values will be same here**:
After swapping, a = 30 and b is 45

方法的重載

當一個方法有兩個或者更多的方法,他們的名字一樣但是參數(shù)不同時,就叫做方法的重載。它與覆蓋是不同的。覆蓋是指方法具有相同的名字,類型以及參數(shù)的個數(shù)。

讓我們來考慮之前的找最小整型數(shù)的例子。如果我們要求尋找浮點型中最小的數(shù)時,我們就需要利用方法的重載來去創(chuàng)建函數(shù)名相同,但參數(shù)不一樣的兩個或更多的方法。

下面的例子給予解釋:

public class ExampleOverloading{

   public static void main(String[] args) {
      int a = 11;
      int b = 6;
      double c = 7.3;
      double d = 9.4;
      int result1 = minFunction(a, b);
      // same function name with different parameters
      double result2 = minFunction(c, d);
      System.out.println("Minimum Value = " + result1);
      System.out.println("Minimum Value = " + result2);
   }

  // for integer
   public static int minFunction(int n1, int n2) {
      int min;
      if (n1 > n2)
         min = n2;
      else
         min = n1;

      return min; 
   }
   // for double
   public static double minFunction(double n1, double n2) {
     double min;
      if (n1 > n2)
         min = n2;
      else
         min = n1;

      return min; 
   }
}

這將產生如下結果:

Minimum Value = 6
Minimum Value = 7.3

重載方法使程序易讀。在這里,兩種方法名稱相同但參數(shù)不同。產生整型和浮點類型的最小數(shù)作為程序運行結果。

使用命令行參數(shù)

有時你想要在程序運行之前傳遞參數(shù)。這可以通過給 main 函數(shù)傳遞命令行參數(shù)來實現(xiàn)。

在命令行中,當要執(zhí)行程序文件時,一個命令行參數(shù)是緊接著文件名字后面的出現(xiàn)的。要接受命令行參數(shù)在 Java 程序中是十分容易的。它們傳遞到 main 函數(shù)字符數(shù)組內。

示例

下面的例子展示了將所有命令行參數(shù)輸出的程序:

public class CommandLine {

   public static void main(String args[]){ 
      for(int i=0; i<args.length; i++){
         System.out.println("args[" + i + "]: " +
                                           args[i]);
      }
   }
}

通過以下方法來執(zhí)行該程序:

java CommandLine this is a command line 200 -100

這將產生如下的結果:

args[0]: this
args[1]: is
args[2]: a
args[3]: command
args[4]: line
args[5]: 200
args[6]: -100

構造函數(shù)

這是一個簡單的使用構造函數(shù)的例子:

// A simple constructor.
class MyClass {
   int x;

   // Following is the constructor
   MyClass() {
      x = 10;
   }
}

你可以通過以下方法來調用構造函數(shù)來實例化一個對象:

public class ConsDemo {

   public static void main(String args[]) {
      MyClass t1 = new MyClass();
      MyClass t2 = new MyClass();
      System.out.println(t1.x + " " + t2.x);
   }
}

通常,你將需要用構造函數(shù)來接受一個或多個參數(shù)。參數(shù)的傳遞和以上介紹的普通方法的參數(shù)傳遞是一樣的,就是在構造函數(shù)的名字后面列出參數(shù)列表。

示例

這是一個簡單的使用構造函數(shù)的例子:

// A simple constructor.
class MyClass {
   int x;

   // Following is the constructor
   MyClass(int i ) {
      x = i;
   }
}

你可以通過以下方法來調用構造函數(shù)來實例化一個對象:

public class ConsDemo {

   public static void main(String args[]) {
      MyClass t1 = new MyClass( 10 );
      MyClass t2 = new MyClass( 20 );
      System.out.println(t1.x + " " + t2.x);
   }
}

這將產生如下的結果:

10 20

可變長參數(shù)

JDK1.5 能夠允許你傳遞可變長的同一類型的參數(shù)。用如下方法進行聲明:

typeName... parameterName

方法聲明時,你要在省略號前明確參數(shù)類型,并且只能有一個可變長參數(shù),并且可變長參數(shù)必須是所有參數(shù)的最后一個。

示例

public class VarargsDemo {

   public static void main(String args[]) {
      // Call method with variable args  
      printMax(34, 3, 3, 2, 56.5);
      printMax(new double[]{1, 2, 3});
   }

   public static void printMax( double... numbers) {
   if (numbers.length == 0) {
      System.out.println("No argument passed");
      return;
   }

   double result = numbers[0];

   for (int i = 1; i <  numbers.length; i++)
      if (numbers[i] >  result)
      result = numbers[i];
      System.out.println("The max value is " + result);
   }
}

這將產生如下的結果:

The max value is 56.5
The max value is 3.0

finalize() 方法

你可以定義一個方法,僅在被垃圾收集器銷毀之前才會被調用。這個方法叫做 finalize() 方法,它也可以用來確保一個對象被干凈清除了。

舉個例子,你也許用 finalize() 來確保被一個對象打開的文件已經關閉了。

為了給類添加一個終結器,你只需定義 finalize() 方法。Java要回收該類的一個對象時,會調用該方法。

在 finalize() 方法中,你將指定一些必須在對象銷毀之前要做的行為。

finalize()方法一般是如下形似:

protected void finalize( )
{
   // finalization code here
}

這里,關鍵字 protected 是為了保證在類外的代碼不能訪問 finalize() 方法。

這意味著你不能知道 finalize() 什么時候執(zhí)行。舉個例子,如果你的程序在垃圾收集器發(fā)生之前就結束了,finalize() 方法將不會被執(zhí)行。

上一篇:Java 字符串下一篇:Java 概述