Java-methods
Java-メソッド
Javaメソッドは、操作を実行するためにグループ化されたステートメントのコレクションです。 たとえば、System.out。* println()*メソッドを呼び出すと、システムは実際にいくつかのステートメントを実行して、コンソールにメッセージを表示します。
ここでは、戻り値を使用してまたは使用せずに独自のメソッドを作成し、パラメーターを使用してまたは使用せずにメソッドを呼び出し、プログラム設計にメソッド抽象化を適用する方法を学習します。
作成方法
メソッドの構文を説明するために次の例を検討してください-
構文
public static int methodName(int a, int b) {
//body
}
ここに、
- public static -修飾子
- int -戻りタイプ
- methodName -メソッドの名前
- a、b -仮パラメータ
- int a、int b -パラメーターのリスト
メソッド定義は、メソッドヘッダーとメソッド本体で構成されます。 同じことは、次の構文に示されています-
構文
modifier returnType nameOfMethod (Parameter List) {
//method body
}
上記の構文には以下が含まれます-
- 修飾子-それはメソッドのアクセスタイプを定義し、使用するオプションです。
- returnType -メソッドは値を返す場合があります。
- nameOfMethod -これはメソッド名です。 メソッドシグネチャは、メソッド名とパラメーターリストで構成されます。
- パラメータリスト-パラメータのリスト、それはメソッドのパラメータのタイプ、順序、および数です。 これらはオプションであり、メソッドにはパラメータが含まれない場合があります。
- method body -メソッド本体は、メソッドがステートメントに対して行うことを定義します。
例
上記の* min()*というメソッドのソースコードを次に示します。 このメソッドは、num1とnum2の2つのパラメータを取り、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 finddevguides.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つのメソッドが同じ名前で、パラメーターが異なります。 整数型と倍精度型の最小数が結果です。
コマンドライン引数の使用
プログラムを実行するときに、プログラムに情報を渡したい場合があります。 これは、コマンドライン引数を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
thisキーワード
*this* は、インスタンスメソッドまたはコンストラクターで、現在のクラスのオブジェクトへの参照として使用されるJavaのキーワードです。 _this_を使用すると、コンストラクター、変数、メソッドなどのクラスのメンバーを参照できます。
注-キーワード_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 finddevguides");
}
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 finddevguides
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 finddevguides
変数引数(var-args)
JDK 1.5では、同じタイプの可変数の引数をメソッドに渡すことができます。 メソッド内のパラメータは次のように宣言されています-
typeName... parameterName
メソッド宣言では、タイプの後に省略記号(…)を指定します。 1つのメソッドで指定できる可変長パラメーターは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()は実行されません。