Latest web development tutorials

Javaメソッド

最初の数章では、我々は多くの場合のSystem.out.println()に使用し、それは何ですか?

println()メソッド(方法)であり、システムが出て、システムクラス(クラス)で標準出力オブジェクト(オブジェクト)です。 この文の使用法)メソッドのprintln(システムクラスシステムの標準出力オブジェクトを呼び出すことです。

だから、それを行うための方法は何ですか?

Javaメソッドは、一緒に機能を実行する文で設定されています。

  • この方法は、問題ステップのクラスを解決するために命じた組み合わせです
  • クラスまたはオブジェクトに含まれるメソッド
  • この方法は、プログラムで作成した他の場所で参照されました

定義されたメソッド

一般的には、次の構文を含む方法の定義:

修饰符 返回值类型 方法名 (参数类型 参数名){
    ...
    方法体
    ...
    return 返回值;
}

メソッドは、メソッドのヘッダーとメソッドの本体を含みます。 ここでは、すべてのプロセスの一部です:

  • 修飾子:オプションです修飾子、メソッドを呼び出す方法をコンパイラに指示します。 これは、メソッドのアクセスタイプを定義します。
  • 戻り値型:メソッドは値を返すことがあります。 returnValueTypeは、メソッドが値のデータ型を返すです。 いくつかの方法は、所望の作用が、ノーリターン値を実行します。 この場合、returnValueTypeキーワードボイド。
  • メソッド名:メソッドの実際の名前。 メソッド名とパラメータリストは、一緒にメソッドシグネチャを構成しています。
  • パラメータタイプ:プレースホルダのようなパラメータです。 メソッドが呼び出されると、値がパラメータに渡されました。 この値は、引数または変数と呼ばれています。 パラメータリストはパラメータ法の種類、順序とパラメータの数です。 パラメータはオプションで、この方法は、任意のパラメータを含めることはできません。
  • 方法ボディ:メソッドは、メソッドの関数を定義する特定のステートメントを含みます。

以下のような:

public static int age(int birthday){...}

あなたは、複数のパラメータを持つことができます。

static float interest(float principal, int year){...}

注:いくつかの他の言語の方法ではプロセスや機能を指します。 呼び出された関数メソッドの戻り値のvoid以外の戻り値の型、メソッドは、プロセスと呼ばれるボイド型の戻り値を返します。

以下の方法は、これら2つのパラメータの最大値を返し、2つのパラメータ値num1とnum2のが含まれています。

/** 返回两个整型变量数据的较大值 */
public static int max(int num1, int num2) {
   int result;
   if (num1 > num2)
      result = num1;
   else
      result = num2;

   return result; 
}

メソッド呼び出し

Javaは、メソッドの戻り値が選択するかどうかに応じて、メソッドを呼び出すための2つの方法をサポートしています。

プログラムは、メソッドを呼び出すと、メソッドを制御するプログラムが呼び出されます。 閉じ括弧は、プログラムに制御を返すときにときに呼び出されるメソッドのreturn文が実行またはメソッドの本体までされています。

メソッドが値を返した場合、メソッド呼び出しは、一般的に値として扱われます。 例えば:

int larger = max(30, 40);

メソッドの戻り値がvoidの場合、メソッド呼び出しがステートメントでなければなりません。 例えば、voidを返すのprintlnメソッド。 次の呼び出しは、文です:

System.out.println("Welcome to Java!");

次の例では、メソッドを定義する方法、およびそれを呼び出す方法を示しています。

public class TestMax {
   /** 主方法 */
   public static void main(String[] args) {
      int i = 5;
      int j = 2;
      int k = max(i, j);
      System.out.println("The maximum between " + i +
                    " and " + j + " is " + k);
   }

   /** 返回两个整数变量较大的值 */
   public static int max(int num1, int num2) {
      int result;
      if (num1 > num2)
         result = num1;
      else
         result = num2;

      return result; 
   }
}

次のような結果をコンパイルした上記の例は次のとおりです。

The maximum between 5 and 2 is 5

このプログラムは、mainメソッドと最大のメソッドが含まれています。 メインJVMの方法はまた、メインと他の方法がないの違いで、呼び出されます。

mainメソッドを頭メソッド名がString []型のパラメータを持つほかに、メインである、publicおよびstatic修飾子と、戻り型voidの値が示されている例と同じです。 引数が文字列の配列であることをString []型。


キーワードのボイド

このセクションでは、宣言し、voidメソッドを呼び出す方法について説明します。

次の例では、printGradeという名前のメソッドを宣言し、与えられたスコアを印刷するためにそれを呼び出します。

public class TestVoidMethod {

   public static void main(String[] args) {
      printGrade(78.5);
   }

   public static void printGrade(double score) {
      if (score >= 90.0) {
         System.out.println('A');
      }
      else if (score >= 80.0) {
         System.out.println('B');
      }
      else if (score >= 70.0) {
         System.out.println('C');
      }
      else if (score >= 60.0) {
         System.out.println('D');
      }
      else {
         System.out.println('F');
      }
   }
}

次のような結果をコンパイルした上記の例は次のとおりです。

C

ここでprintGradeメソッドはvoid型の方法があり、それは値を返しません。

voidメソッド呼び出しがステートメントでなければなりません。 したがって、文の形の3行目の呼び出しの主要な方法です。 すべての文と同様のようにセミコロンで終了します。


値でパラメータを渡します

あなたはパラメータを提供する必要がある場合にメソッドを呼び出して、あなたが指定した順序に従って、パラメータリストを提供する必要があります。

例えば、連続したn回の次のメソッドは、メッセージが出力されます。

public static void nPrintln(String message, int n) {
  for (int i = 0; i < n; i++)
    System.out.println(message);
}

次の例では、値によって渡された効果を示します。

プログラムは、2つの変数を交換するために使用されるメソッドを作成します。

public class TestPassByValue {

   public static void main(String[] args) {
      int num1 = 1;
      int num2 = 2;

      System.out.println("Before swap method, num1 is " +
                          num1 + " and num2 is " + num2);

      // 调用swap方法
      swap(num1, num2);
      System.out.println("After swap method, num1 is " +
                         num1 + " and num2 is " + num2);
   }
   /** 交换两个变量的方法 */
   public static void swap(int n1, int n2) {
      System.out.println("\tInside the swap method");
      System.out.println("\t\tBefore swapping n1 is " + n1
                           + " n2 is " + n2);
      // 交换 n1 与 n2的值
      int temp = n1;
      n1 = n2;
      n2 = temp;

      System.out.println("\t\tAfter swapping n1 is " + n1
                           + " n2 is " + n2);
   }
}

次のような結果をコンパイルした上記の例は次のとおりです。

Before swap method, num1 is 1 and num2 is 2
        Inside the swap method
                Before swapping n1 is 1 n2 is 2
                After swapping n1 is 2 n2 is 1
After swap method, num1 is 1 and num2 is 2

スワップメソッドを呼び出すための2つのパラメータを渡します。 メソッドが呼び出された後興味深いことに、引数の値が変更されていません。


オーバーロードされたメソッド

最大の方法は、唯一のデータ型intに適用されます上記を使用しています。 あなたは、2つの浮動小数点データの最大値を取得したい場合しかし、それを入力?

次のコードに示すように解決策は、同じ名前を持つ他のパラメータが異なるメソッドを作成することです:

public static double max(double num1, double num2) {
  if (num1 > num2)
    return num1;
  else
    return num2;
}

あなたが最大の方法は、int型のパラメータを渡された呼び出した場合、int引数の最大メソッドが呼び出されます。

double型のパラメータを渡す場合は、二重の経験の種類は最大メソッドが呼び出され、これは、メソッドのオーバーロードと呼ばれています。

クラスの二つの方法があるが、異なるパラメータリストで、同じ名前を持ちます。

Javaコンパイラと呼ばれるべき方法を決定するために、メソッドシグネチャに従って。

メソッドのオーバーロードは、プログラムをより読みやすくすることができます。 実行の方法は、密接に関連するタスクが同じ名前を使用する必要があります。

オーバーロードされたメソッドは、異なるパラメータリストを持っている必要があります。 あなただけの修飾子の異なる種類に基づいて、またはオーバーロードメソッドに戻ることはできません。


変数のスコープ

範囲変数は、変数が参照できるプログラムの一部です。

メソッド定義内の変数はローカル変数と呼ばれます。

それを含むブロックの開始から終了までのローカル変数の宣言の有効範囲。

彼らが使用する前にローカル変数を宣言する必要があります。

パラメータの方法の全範囲をカバーする方法。 パラメータは、実際にはローカル変数です。

forループ文の変数の初期化部、サイクルにおけるその役割の範囲。

しかし、可変ループ本体の文は、ループの最後まで、それから、その範囲の文です。 それは次のように宣言された変数が含まれています。

あなたは方法で、異なる非ネストされたブロックは、繰り返し同じ名前のローカル変数を宣言することはできますが、二回のローカル変数を宣言するために、ブロック内にネストすることはできません。

コマンドラインパラメータを使用して

時にはそれは、メッセージを渡されたときにプログラムを実行したいです。 これは、達成するために、main()関数にコマンドライン引数を渡すことに依存します。

コマンドライン引数は、プログラム名の後に実行時間の情報が続いています。

次のプログラムは、すべてのコマンドライン引数を出力します。

public class CommandLine {

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

以下に示すように、プログラムを実行します。

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

コンストラクタ

時コンストラクタは、オブジェクトを初期化するために使用される場合、オブジェクトが作成されます。 そしてそれは、同じ名前のクラスのコンストラクタにありますが、コンストラクタは戻り値はありません。

多くの場合、クラスのインスタンス変数の初期値にコンストラクタを使用するか、または完全なオブジェクトを作成するために、他の必要な手順を実行します。

Javaは自動的にすべてのメンバーがゼロに初期化されているデフォルトのコンストラクタを提供するため、カスタムコンストラクタあるかどうかにかかわらず、すべてのクラスは、コンストラクタを持っています。

あなたがあなた自身のコンストラクタを定義すると、デフォルトコンストラクタは失敗します。

ここでは、コンストラクタを使用しての例です:

// 一个简单的构造函数
class MyClass {
   int x;
   
   // 以下是构造函数
   MyClass() {
      x = 10;
   }
}

あなたがオブジェクトを初期化するために、このコンストラクタのように呼び出すことができます。

public class ConsDemo {

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

時間のほとんどは、コンストラクタのパラメータが必要です。

ここでは、コンストラクタを使用しての例です:

// 一个简单的构造函数
class MyClass {
   int x;
   
   // 以下是构造函数
   MyClass(int i ) {
      x = i;
   }
}

あなたがオブジェクトを初期化するために、このコンストラクタのように呼び出すことができます。

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

変数パラメーター

JDK 1.5のように、Javaサポートは、メソッドに可変パラメータの同じタイプを渡します。

以下のとおりである方法の可変パラメータを宣言します。

typeName... parameterName

メソッド文では、省略記号(...)を追加した後、パラメータの型を指定しました。

この方法は、それが最後のパラメータのメソッドである必要があり、1つの変数のみのパラメータを指定することができます。 任意の一般的なパラメータは、その前に宣言する必要があります。

public class VarargsDemo {

   public static void main(String 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

()メソッドを確定

Javaは、この方法は、回収されたオブジェクトをクリアするために使用されるファイナライズ()、と呼ばれ、あなたがオブジェクトがガベージコレクタのデストラクタ(リサイクル)の前に呼び出されたメソッドを定義することができます。

たとえば、オブジェクト開いているファイルがクローズされることを保証するためにファイナライズ()を使用することができます。

ファイナライズ()メソッドでは、オブジェクトが破棄されるときに実行される動作を指定する必要があります。

ファイナライズ()一般的な形式であります:

protected void finalize()
{
   // 在这里终结代码
}

保護されたキーワードは、そのファイナライズ()メソッドはクラスの外のコードを呼び出されることはありません確実に、修飾子です。

もちろん、Javaのガベージコレクションは、JVMによって自動的に行うことができます。 あなたはマニュアルを使用する場合は、上記の方法を使用することができます。

public class FinalizationDemo {  
    public static void main(String[] args) {  
        Cake c1 = new Cake(1);  
        Cake c2 = new Cake(2);  
        Cake c3 = new Cake(3);  
          
        c2 = c3 = null;  
        System.gc(); //调用Java垃圾收集器
    }  
}  
  
class Cake extends Object {  
    private int id;  
    public Cake(int id) {  
        this.id = id;  
        System.out.println("Cake Object " + id + "is created");  
    }  
      
    protected void finalize() throws java.lang.Throwable {  
        super.finalize();  
        System.out.println("Cake Object " + id + "is disposed");  
    }  
}  

次のように上記のコードを実行し、出力結果は次のとおりです。

C:\1>java FinalizationDemo  
Cake Object 1is created  
Cake Object 2is created  
Cake Object 3is created  
Cake Object 3is disposed  
Cake Object 2is disposed