Javaメソッドは、操作を実行するためのいくつかのステートメントの組み合わせです。たとえば、System.out.printlnメソッドを呼び出すと、システムは実際に多くのステートメントを実行してコンソールに情報を出力します。
これで、独自の方法を作成する方法を学びます。戻り値を持つか、返品値を持たず、パラメーターを持つかパラメーターを持たない可能性があります。オーバーロードメソッドは、同じメソッド名を使用し、プログラミングで抽象的なメソッドを使用する必要があります。
作成方法
次の例を使用して、メソッドの構文を説明しましょう。
public static int funcname(int a、int b){// body}ここ
メソッドには、手順または関数も含まれています。
メソッドの定義には、メソッドヘッダーとメソッド本体が含まれます。以下に示すように:
modifier returnType nameofmethod(パラメーターリスト){//メソッドボディ}上記の構文には含まれます
例
これは、上記で定義されたmax()メソッドであり、2つのパラメーターnum1とnum2を受け入れて、2つの間の最大値を返します。
/**スニペットは2つの数値の間で最小値を返します*/public static int minfunction(int n1、int n2){int min; if(n1> n2)min = n2; else min = n1; Minを返します。 }メソッド呼び出し
メソッドを使用するには、メソッドを呼び出す必要があります。メソッドを呼び出すには2つの方法があります。1つは返品値を持ち、もう1つには返品値がありません。
メソッドを呼び出すのは非常に簡単です。プログラムがメソッドを呼び出す必要がある場合、制御プログラムは呼び出されたメソッドに転送されます。この方法は、2つの条件を発信者に返します。
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( "最小値=" + c); } / **最小2つの数値を返します* / public static int minfunction(int n1、int n2){int min; if(n1> n2)min = n2; else min = n1; Minを返します。 }}次の結果が生成されます
最小値= 6
キーワードボイド
キーワードvoidを使用すると、返品値なしでメソッドを作成できます。ここでは、次の例でvoidメソッドMethodRankPointsを作成します。この方法には、戻り値タイプがありません。 voidメソッドを呼び出す必要があるMethodRankPoints(255.7)を宣言する必要があります。 Javaステートメントは、以下に示すように、セミコロンで終わります。
public class emplervoid {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"); }}}これにより、次の結果が生成されます。
ランク:A1
値でパラメーターを渡します
関数を呼び出すときにパラメーターを渡す必要があります。そして、彼らの順序は、それらが作成されたときのパラメーターの順序と同じでなければなりません。パラメーターは、値または参照によって渡すことができます。
パラメーターを値に渡すことは、メソッドのパラメーターを呼び出すことを意味し、パラメーター値を介してパラメーターに渡されます。
例
次のプログラムは、パラメーターが値によって渡されることを示す例を示しています。メソッドを呼び出した後、パラメーター値は変更されません。
public class swappingexample {public static void main(string [] args){int a = 30; int b = 45; system.out.println( "スワッピング前、a =" + a + "およびb =" + b); //スワップメソッドSwapFunction(a、b)を呼び出します。 System.out.println( "/n **今、値を交換する前後に、ここで同じものが同じになります**:"); system.out.println( "スワッピング後、a =" + a + "とb is" + b); } public static void swapfunction(int a、int b){system.out.println( "スワッピング前(内側)、a =" + a + "b =" + b); // n1とn2 int c = aと交換します。 a = b; b = c; System.out.println( "スワッピング後(内側)、a =" + a + "b =" + b); }}これにより、次の結果が生成されます。
スワッピングの前に、a = 30およびb = 45bebepapping(内側)、a = 30 b = 45スワッピング後(内側)、a = 45 b = 30 **はここで値が同じになります**:スワッピング後、a = 30、bは45です
メソッドオーバーロード
メソッドに2つ以上のメソッドがある場合、その名前は同じですが、パラメーターは異なり、メソッドオーバーロードと呼ばれます。カバーとは異なります。オーバーライドとは、同じ名前、タイプ、パラメーターのメソッドの数を指します。
最小整数数を見つける前の例を考えてみましょう。フローティングポイントタイプの最小数を見つけるように依頼する場合、メソッドの過負荷を使用して、同じ関数名を持つ2つ以上のメソッドを作成する必要がありますが、異なるパラメーターが必要です。
次の例について説明します。
public class emplesoverloading {public static void main(string [] args){int a = 11; int b = 6;ダブルC = 7.3;ダブルD = 9.4; int result1 = minfunction(a、b); //異なるパラメーターを持つ同じ関数名double result2 = minfunction(c、d); System.out.println( "最小値=" + result1); System.out.println( "最小値=" + result2); } //整数public static int minfunction(int n1、int n2){int min; if(n1> n2)min = n2; else min = n1; Minを返します。 } // double public static double minfunction(double n1、double n2){double min; if(n1> n2)min = n2; else min = n1; Minを返します。 }}これにより、次の結果が生成されます。
最小値= 6最小値= 7.3
オーバーロード方法により、プログラムを読みやすくします。ここでは、2つのメソッドには同じ名前がありますが、パラメーターが異なります。プログラムの実行の結果として、整数と浮動小数点タイプの最小数を生成します。
コマンドラインパラメーターを使用します
プログラムが実行される前にパラメーターを渡す場合があります。これは、コマンドラインパラメーターをメイン関数に渡すことで実現できます。
コマンドラインでは、プログラムファイルを実行する場合、ファイル名の直後にコマンドラインパラメーターが表示されます。 Javaプログラムでコマンドラインパラメーターを受け入れるのは非常に簡単です。それらはメイン関数文字配列に渡されます。
例
次の例は、すべてのコマンドラインパラメーターを出力するプログラムを示しています。
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コマンドラインこれはコマンドライン200 -100です
これにより、次の結果が生成されます。
args [0]:thisargs [1]:isargs [2]:aargs [3]:commandargs [4]:lineargs [5]:200args [6]:-100
コンストラクタ
コンストラクターを使用する簡単な例を次に示します。
// simple constructor.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); }}通常、コンストラクターを使用して1つ以上のパラメーターを受け入れる必要があります。パラメーターの通過は、上記で紹介した通常のメソッドのパラメーターの渡されたパラメーターと同じです。これは、コンストラクターの名前の後にパラメーターリストをリストするためです。
例
コンストラクターを使用する簡単な例を次に示します。
// simple constructor.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 =新しいMyClass(20); System.out.println(t1.x + "" + t2.x); }}これにより、次の結果が生成されます。
10 20
可変長パラメーター
JDK1.5を使用すると、同じタイプの可変長パラメーターを渡すことができます。次の方法を使用して宣言します。
TypeName ...パラメーター名
メソッドを宣言する場合、省略記号の前にパラメータータイプを指定する必要があり、変数長パラメーターは1つだけで、変数長さパラメーターはすべてのパラメーターの最後でなければなりません。
例
public class varargsdemo {public static void main(string args []){//可変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( "引数なしに渡されない");戻る; } double result = numbers [0]; for(int i = 1; i <numbers.length; i ++)if(numbers [i]> result)result = numbers [i]; System.out.println( "最大値は" + result); }}これにより、次の結果が生成されます。
最大値は56.5です。最大値は3.0です
finalize()メソッド
ゴミコレクターによって破壊される前にのみ呼び出されるメソッドを定義できます。この方法は、finalize()メソッドと呼ばれます。これは、オブジェクトがクリーニングされるようにするためにも使用できます。
たとえば、finalize()を使用して、オブジェクトによって開かれたファイルが閉じられていることを確認できます。
ファイナルライザーをクラスに追加するには、finalize()メソッドを定義するだけです。 Javaがこのクラスのオブジェクトをリサイクルしたい場合、メソッドは呼び出されます。
finalize()メソッドでは、オブジェクトが破壊される前に行う必要がある動作を指定します。
finalize()メソッドは、一般に次のように似ています。
Protected void finalize(){//ファイナライゼーションコードはこちら}ここで、保護されているキーワードは、クラス外のコードがfinalize()メソッドにアクセスできないことを確認することです。
これは、finalize()がいつ実行されるかを知ることができないことを意味します。たとえば、ガベージコレクターが発生する前にプログラムが終了した場合、finalize()メソッドは実行されません。
一般的な方法:
Javaジェネリックメソッドは、メソッドがコンテナクラスのオブジェクトである値を返す場合に広く使用されています。
public static list <t> find(class <t> clazz、string userid){....}一般的に言えば、Javaジェネリックメソッドを記述する場合、返品値タイプと少なくとも1つのパラメータータイプは汎用であり、タイプは同じでなければなりません。戻り値タイプまたはパラメータータイプの1つのみが汎用を使用する場合、この汎用方法の使用は、基本的にジェネリックを使用しない場合と同じレベルに大きく制限されます。
以下は、主に2つの非常に類似したJavaジェネリックメソッドの使用とそれらの間の違いを導入しています。
最初のタイプ:
public static <t extends commonservice> t getService(class <t> clazz){t service =(t)servicemap.get(clazz.getName()); if(service == null){service =(t)servicelocator.getService(clazz.getName()); servicemap.put(clazz.getName()、service); } return service; } 2番目のタイプ:
public static <t> t getService(class <?extends commonservice> clazz){t service =(t)servicemap.get(clazz.getName()); if(service == null){service =(t)servicelocator.getService(clazz.getName()); servicemap.put(clazz.getName()、service); } return service; }一般的な方法が存在するクラスは次のとおりです。
public abstract class commonservice {private static hashmap <string、commonservice> servicemap = new hashmap <string、commonservice>(); //ここに一般的なメソッド定義があります。 。 }これらの2つの一般的なメソッドには異なる方法の署名しかあり、メソッド本体はまったく同じです。では、違いは何ですか?
それらを使用しましょう。そうすれば、違いがわかります。
最初の一般的な方法を使用します。
public class main {public static void main(string [] args){noticeservice noticeservice = commonservice.getService(noticeservice.class); //エラーをコンパイルせずに最初の汎用メソッドを正しく使用します。 noticeservice noticeservice = commonservice.getService(userservice.class); //最初の汎用メソッドを誤って使用すると、コンパイルエラーが発生します。 }} 2番目の一般的な方法を使用します。
public class main {public static void main(string [] args){noticeservice noticeservice = commonservice.getService(noticeservice.class); // 2番目のジェネリックメソッドを正しく使用すると、コンパイルエラーがなく、ロジックは正しく、実行時に例外はありません。 noticeservice noticeservice = commonservice.getService(userservice.class); // 2番目の汎用メソッドを誤って使用する場合、コンピレーションエラーはありませんが、ロジックは間違っており、ランタイム中に例外が発生します。 }}今、私はこれら2つの非常に類似した一般的な方法の違いを知っていますか?