Java-メソッド
Java メソッドは、操作を実行するためにグループ化されたステートメントのコレクションです。 System.out.println() を呼び出すとき たとえば、コンソールにメッセージを表示するために、システムは実際にいくつかのステートメントを実行します。
ここでは、戻り値の有無にかかわらず独自のメソッドを作成する方法、パラメーターの有無にかかわらずメソッドを呼び出す方法、およびプログラム設計にメソッドの抽象化を適用する方法を学習します。
作成方法
メソッドの構文を説明するために次の例を検討します-
構文
public static int methodName(int a, int b) {
// body
}
ここで、
- <リ>
公開静的 − 修飾子
<リ>整数 − リターンタイプ
<リ>メソッド名 − メソッドの名前
<リ>a、b − 仮パラメータ
<リ>int a、int b − パラメータのリスト
メソッド定義は、メソッド ヘッダーとメソッド本体で構成されます。同じことが次の構文に示されています-
構文
modifier returnType nameOfMethod (Parameter List) {
// method body
}
上記の構文には、-
が含まれます。- <リ>
モディファイア − メソッドのアクセス タイプを定義し、オプションで使用できます。
<リ>戻り値 − メソッドは値を返すことがあります。
<リ>メソッド名 − メソッド名です。メソッド シグネチャは、メソッド名とパラメータ リストで構成されます。
<リ>パラメータ一覧 − パラメータのリスト。メソッドのパラメータのタイプ、順序、および数です。これらはオプションです。メソッドにはパラメータが含まれていない場合があります。
<リ>メソッド本体 − メソッド本体は、メソッドがステートメントで何をするかを定義します。
例
上記で定義した min() というメソッドのソース コードを次に示します。 .このメソッドは、2 つのパラメーター num1 と num2 を取り、2 つの間の最大値を返します −
/** 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;
}
メソッド呼び出し
メソッドを使用するには、メソッドを呼び出す必要があります。メソッドが呼び出される方法は 2 つあります。つまり、メソッドが値を返すか、何も返さない (戻り値なし)。
メソッド呼び出しのプロセスは簡単です。プログラムがメソッドを呼び出すと、プログラム制御は呼び出されたメソッドに転送されます。この呼び出されたメソッドは、次の 2 つの条件で呼び出し元に制御を返します。-
- return ステートメントが実行されます。
- メソッド終了中かっこに到達します。
void を返すメソッドは、ステートメントの呼び出しと見なされます。例を考えてみましょう −
System.out.println("This is tutorialspoint.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 キーワードを使用すると、値を返さないメソッドを作成できます。ここで、次の例では、void メソッド methodRankPoints を検討しています。 .このメソッドは値を返さない void メソッドです。 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
パラメータを値で渡す
呼び出しプロセスの下で作業している間、引数が渡されます。これらは、メソッド仕様のそれぞれのパラメーターと同じ順序にする必要があります。パラメータは、値または参照によって渡すことができます。
パラメータを値で渡すとは、パラメータを使用してメソッドを呼び出すことを意味します。これにより、引数の値がパラメーターに渡されます。
例
次のプログラムは、パラメーターを値で渡す例を示しています。メソッド呼び出し後も、引数の値は変わりません。
ライブデモ
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
メソッドのオーバーロード
クラスに同じ名前でパラメーターが異なる 2 つ以上のメソッドがある場合、それはメソッドのオーバーロードとして知られています。オーバーライドとは異なります。オーバーライドでは、メソッドは同じメソッド名、型、パラメーターの数などを持ちます。
整数型の最小数を見つけるための前述の例を考えてみましょう。もし、double 型の最小数を見つけたいとしましょう。次に、オーバーロードの概念を導入して、同じ名前でパラメーターが異なる 2 つ以上のメソッドを作成します。
次の例は同じことを説明しています-
例
ライブデモ
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
メソッドをオーバーロードすると、プログラムが読みやすくなります。ここでは、2 つのメソッドが同じ名前で指定されていますが、パラメーターは異なります。 integer 型と double 型の最小数が結果になります。
コマンドライン引数の使用
プログラムを実行するときに、プログラムに情報を渡したい場合があります。これは、コマンドライン引数を main( ) に渡すことによって実現されます。
コマンド ライン引数は、実行時にコマンド ラインでプログラム名の直後に続く情報です。 Java プログラム内のコマンドライン引数にアクセスするのは非常に簡単です。これらは、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 のキーワードです。 これを使う コンストラクター、変数、メソッドなどのクラスのメンバーを参照できます。
注意 − キーワード this インスタンスメソッドまたはコンストラクター内でのみ使用されます
一般に、キーワード this −
- <リ>
コンストラクターまたはメソッド内で同じ名前を持つ場合は、インスタンス変数とローカル変数を区別します。
class Student {
int age;
Student(int age) {
this.age = age;
}
}
- <リ>
クラス内の別のタイプのコンストラクター (パラメーター化されたコンストラクターまたはデフォルト) を呼び出します。これは、明示的なコンストラクター呼び出しとして知られています。
class Student {
int age
Student() {
this(20);
}
Student(int age) {
this.age = age;
}
}
例
this を使用した例を次に示します。 クラスのメンバーにアクセスするためのキーワード。次のプログラムをコピーして、This_Example.java という名前のファイルに貼り付けます。 .
ライブデモ
public class This_Example {
// Instance variable num
int num = 10;
This_Example() {
System.out.println("This is an example program on keyword this");
}
This_Example(int num) {
// Invoking the default constructor
this();
// Assigning the local variable num to the instance variable num
this.num = num;
}
public void greet() {
System.out.println("Hi Welcome to Tutorialspoint");
}
public void print() {
// Local variable num
int num = 20;
// Printing the local variable
System.out.println("value of local variable num is : "+num);
// Printing the instance variable
System.out.println("value of instance variable num is : "+this.num);
// Invoking the greet method of a class
this.greet();
}
public static void main(String[] args) {
// Instantiating the class
This_Example obj1 = new This_Example();
// Invoking the print method
obj1.print();
// Passing a new value to the num variable through parametrized constructor
This_Example obj2 = new This_Example(30);
// Invoking the print method again
obj2.print();
}
}
これにより、次の結果が生成されます-
出力
This is an example program on keyword this value of local variable num is : 20 value of instance variable num is : 10 Hi Welcome to Tutorialspoint This is an example program on keyword this value of local variable num is : 20 value of instance variable num is : 30 Hi Welcome to Tutorialspoint
変数引数(var-args)
JDK 1.5 では、同じ型の可変数の引数をメソッドに渡すことができます。メソッドのパラメーターは次のように宣言されます-
typeName... parameterName
メソッド宣言では、タイプの後に省略記号 (...) を指定します。メソッドで指定できる可変長パラメーターは 1 つだけであり、このパラメーターは最後のパラメーターでなければなりません。通常のパラメータはその前に置く必要があります。
例
ライブデモ
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( ) がいつ実行されるか、実行されるかどうかさえわからないことを意味します。たとえば、ガベージ コレクションが発生する前にプログラムが終了した場合、finalize( ) は実行されません。
Java