Java では、アプリケーションはクラスで構成されます。クラスは変数で構成されます。これらは、クラスの動作、つまりクラスが提供できるロジック (たとえば、一部のデータの処理、他のメソッドの呼び出しなど) を担うデータとメソッドを格納する責任があります。このようなコンポーネントを変数として議論することは長くできますが、それが今日私たちが集まった理由ではありません。クラスのコンポーネントをメソッドとして詳しく説明しましょう。 メソッドは、クラス内で宣言されたコードの名前付きブロックです。これには、別の問題を解決することを目的とした、再利用可能な特定の完全な一連のアクション (指示) が含まれています。言い換えれば、メソッドは関数、つまりクラスが実行できるものです。他の言語にも関数があります。Java の場合のみ、これらはクラスのメンバーであり、OOP 用語によればメソッドと呼ばれます。先に進む前に、小さな例を見てみましょう。
public String constructHelloSentence(String name) {
String resultSentence = "Hello world! My name is " + name;
System.out.println(resultSentence);
return resultSentence;
}
ここには複雑なことは何もありません。Java メソッドのタスクは、渡した名前を持つ挨拶文字列を生成することです。たとえば、Hello world! My name is Bobby
メソッド宣言内の各キーワードを (左から右に) 見て、メソッドの構造を正しく理解しましょう。最初のキーワードは でpublic
、アクセス修飾子を示します。
アクセス修飾子
これらは、クラス メンバーの可視性の許容範囲、つまり、変数またはメソッドの使用が許可される場所の制限を示します。 Java では次のアクセス修飾子が使用されます。-
パブリック: パブリック。この修飾子を含むメソッドまたはフィールドはパブリックであり、現在のパッケージおよび外部パッケージから他のクラス (またはそのメソッドとフィールド) から参照できます。これは、既知の最も広範なアクセス レベルです。
-
protected : この修飾子を持つメソッドまたは変数は、現在のクラスまたはパッケージ、またはこれを継承するクラスのどこからでもアクセスできます。また、メソッドまたはフィールドは、他のパッケージにある場合でもアクセスできます。
protected String constructHelloSentence(String name) {...}
-
デフォルトの修飾子。クラス フィールドまたはメソッドに修飾子がない場合は、デフォルトの修飾子が適用されます。この場合、フィールドまたはメソッドは現在のパッケージ内のすべてのクラスに表示されます ( protectedと同様ですが、継承時には表示されません)。
String constructHelloSentence(String name) {...}
-
private : public修飾子の反対。このような修飾子を持つメソッドまたは変数は、それが宣言されているクラスでのみ使用できます。
private String constructHelloSentence(String name) {...}
String
メソッド シグネチャ (プロパティを説明するメソッドの最初の行) があります。
戻り値
戻り値は、呼び出し後にその場所に返されるデータ (メソッド実行の結果) です。すべてのメソッドには戻り値があります。か否か?戻り値メソッド
この値は、単純型または参照型の変数など、任意の型のデータにすることができます。この例では、メソッドがタイプ のオブジェクトを返さなければならないことを示しています。String
これは、覚えているとおり、文字列を記述するクラスです。ここでの 2 番目のポイントは、単語ですreturn
。これは戻り値と直接の関係があります。戻り値はメソッドが呼び出された場所に返され、その後メソッド自体がreturn
閉じられます。この単語は通常、メソッドの最後の行に表示されます ( if, else..
. のようなさまざまな分岐があるメソッドを除く)。の次の行にコードを記述すると、次のようになりますreturn
。
private String constructHelloSentence(String name) {
String resultSentence = "Hello world! My name is " + name;
return resultSentence;
System.out.println(resultSentence);
}
その場合、コンパイラから呪いが発生しますが、これはあまり良いことではありません (コンパイラはナンセンスなことを推奨しません)。また、後のデータ型はс
メソッド シグネチャで宣言されたものと一致する必要があることにも注意してください。詳細については、こちらをreturn
ご覧ください。
空所
void
Javaでは何に使われるのでしょうか?すべてのメソッドに戻り値があるわけではありません。何も持っていない、または何も返す必要がない人もいます。それではどうすればいいでしょうか?次に、メソッドのシグネチャに を書きますvoid
。戻り値がなければメソッドはどのようになるでしょうか?
protected void constructHelloSentence(String name) {
String resultSentence = "Hello world! My name is " + name;
System.out.println(resultSentence);
}
おそらく、このメソッドは何も返さないはずなので、戻り値とともにreturn
「So it is」という単語が消えていることに気づいたでしょう。ただし、ここに配置することはできますが、意味はなく、単にreturn
;だけです。最後の行で。これは通常は役に立たないため、void
のメソッドではオプションです。void
ただし、分岐やループなど、メソッドをすぐに終了したいメソッドでは便利に使用できます。次にメソッド宣言には がありますconstructHelloSentence
。
メソッド名
constructHelloSentence
- メソッドの名前。1 つまたは別のメソッドを区別できる独特の特徴。そして、それに応じて、いずれかのメソッドを呼び出します。 メソッド名は小文字で始める必要がありますが、キャメルケース (CamelCase、キャメルケース) も使用します。名前内の次の各単語は前の単語に隣接しており、大文字で書かれます。メソッド名はメソッドを説明するものでなければなりません (最適なコメントは、適切な名前を付けることです)。これを行うには、動詞、または動詞との組み合わせを使用します: getCat
、delete
、createCar
など。1 つのクラス内では、メソッド名は一意である必要があります (メソッドのオーバーロードは考慮しません。これについては後で説明します)。私たちが分析しているメソッドをさらに見てみましょう ( String name
)
メソッドパラメータ
メソッドには、外部、つまりメソッドが呼び出された場所から取得される特定のデータが含まれる場合があります (または含まれない場合もあります)。String
この例では、名前付きの型オブジェクトが到着しname
、後でこの変数をメソッドで使用します。メソッド内で無制限の数のパラメータを使用できますが、7 つを超えるパラメータは推奨されません。要素の正確な数は分からないが、これらすべての要素が同じ目的で必要であり、同じ型になる場合 (たとえば、String
)、省略記号が使用されます。
public void constructHelloSentence(String...name) {
...
}
各要素へのアピールは次のようになります。name[0]
何か思い出しますか? そうだよ、アレイ!次のように書いても何も変わりません。
protected void constructHelloSentence(String[] name) {
...
}
要素へのアクセスも次の形式になります。name[1]
そしてもう 1 つ。メソッドの引数は、finalにすることができます。
public String constructHelloSentence(final String name) {
...
}
これは、名前参照が特定のオブジェクトにバインドされておりString
、オーバーライドできないことを意味します。参照変数の操作および予約語との相互作用については、資料「 Java の参照データ型final
」を参照してください。
メソッドの呼び出し
メソッドの作成について整理しました。次はメソッドの使用について説明します。Javaでメソッドを呼び出すにはどうすればよいですか? Java のすべてのメソッドはクラス内にあります。Java でメソッドの呼び出しがどのように機能するかを理解するために、クラスを取り上げてみましょう。public class StringConstructor {
public String constructHelloSentence(String name) {
String resultSentence = "Hello world! My name is " + name;
System.out.println(resultSentence);
return resultSentence;
}
}
私たちのメソッドは静的ではないため (これは、今日の記事の範囲を超えて別のトピックとして説明します)、これを呼び出すには、まずオブジェクトを作成してから、そのオブジェクトのメソッドを呼び出す必要があります。
class Application{
public static void main(String[] args) {
StringConstructor stringConstructor = new StringConstructor();
stringConstructor.constructHelloSentence("Den");
}
}
メソッドの引数で、画面に表示される結果の文字列に表示したい文字列 (名前) を渡しました。
Hello world! My name is Den
また、メソッドは必要に応じて何度でも再利用でき、制限はないことも覚えておく価値があります。
これ
this
セッターと同様に、 code 内でこのキーワードがよく見られます。
public void setValue(Long value) {
this.value = value;
}
そしてそれは何を意味するのでしょうか? this
Java では、これはこのクラスの現在のオブジェクトへの参照です。たとえば、オブジェクトを作成したとします。
StringConstructor stringConstructor = new StringConstructor();
this
オブジェクト内には 同じstringConstructor
オブジェクトへのリンクが存在します。 this
は、(上記のセッターのように) オブジェクト変数を参照する場合と、何らかのメソッドを呼び出す場合の両方に使用されます。クラスを少し書き直すことができます。
public class StringConstructor {
public String constructHelloSentence(String name) {
String resultSentence = this.getSentence() + name;
System.out.println(resultSentence);
return resultSentence;
}
private String getSentence() {
return "Hello world! My name is ";
}
}
this
このオブジェクトのメソッドを呼び出して、必要な文字列を取得します 。ただし、これがなくても特定のオブジェクトのメソッドへの参照が存在するため、原則として、これはメソッドにはほとんど使用されず、主にオブジェクト変数に使用されます。
メソッドのオーバーロード
本質的に同じロジックを実行するメソッドが必要だとしますが、Hello world
! 代わりに、world
独自の単語 (文字列) を挿入します。しかし、私たちはすでにその方法を持っていますconstructHelloSentence
。では、本質的に同じ機能を実行するメソッドに新しい名前を考える必要があるでしょうか? それがどのようなものであっても、現時点ではメソッドのオーバーロードが役に立ちます。 メソッドのオーバーロードとは、クラスで宣言するときに同じメソッド名を複数回使用することです。言語構文の観点から、ローカル空間に 2 つの同一の名前が存在することはできません。ただし、名前は同じで引数が異なるメソッドを宣言することもできます。つまり、名前は同じだが入力データが異なるメソッドが 2 つ以上ある場合、クラスにはオーバーロードが含まれます。
public class Constructor {
public String constructHelloSentence(String name) {
String resultSentence = "Hello world! My name is " + name;
System.out.println(resultSentence);
return resultSentence;
}
protected String constructHelloSentence(String firstName, String secondName) {
String resultSentence = "Hello " + firstName + "! My name is " + secondName;
System.out.println(resultSentence);
return resultSentence;
}
}
ここで、メソッドに同じアクセス修飾子 (戻り値の型も) を含める必要がないことがわかります。オーバーロードされたメソッドが呼び出される場合、コンパイラは、呼び出し中に指定されたパラメータに基づいて、宣言されたいくつかのメソッドから必要なメソッドを自動的に決定します。
GO TO FULL VERSION