1. アクセス修飾子

各メソッドの前に、プログラマはいわゆるアクセス修飾子を指定できます。これらには、次のキーワードが含まれます: publicprotectedprivate

これらのアクセス修飾子を使用すると、他のクラスのメソッドへのアクセスを制限できます。

たとえば、privateメソッド宣言の前にキーワードを記述した場合、そのメソッドは、そのメソッドが宣言されているのと同じクラスからのみ呼び出すことができます。このpublicキーワードを使用すると、任意のクラスの任意のメソッドからマークされたメソッドにアクセスできます。

このような修飾子は合計 3 つありますが、メソッドへのアクセスには 4 つのタイプがあります。これは、アクセス修飾子の不在にも意味があるためです。

からのアクセス...
修飾子 どのクラスでも こどもクラス そのパッケージ そのクラス
public はい はい はい はい
protected いいえ はい はい はい
修飾子なし いいえ いいえ はい はい
private いいえ いいえ いいえ はい

1.public修飾子

修飾子でマークされたメソッド (または変数、またはクラス) には、プログラム内のどこからでもpublicアクセスできます。これは最高度のオープン性であり、制限はありません。

2.private修飾子

修飾子でマークされたメソッド (または変数、またはクラス) は、それが宣言されているのと同じクラスからのprivateみアクセスできます。他のすべてのクラスでは、マークされたメソッド (または変数) は表示されません。まるで存在しないかのようです。これは最高レベルの制限であり、独自のクラスのみです。

3. 修飾子なし (デフォルトの修飾子)

メソッド (または変数) が修飾子でマークされていない場合、「デフォルトの修飾子」があるとみなされます。その修飾子を持つ変数またはメソッド (つまり、修飾子をまったく持たない) は、それらが宣言されているパッケージ内のすべてのクラスに表示されます。そして彼らだけに。この修飾子は と呼ばれることもありpackage-private、変数やメソッドへのアクセスがそれらのクラスが含まれるパッケージ全体に開かれていることを示します。

4.protected修飾子

メソッドが修飾子でマークされている場合protected、同じクラス、同じパッケージ、および子孫 (メソッドが宣言されているクラスを継承するクラス) からそのメソッドにアクセスできます。このトピックについては、Java Core クエストでさらに詳しく分析します。

publicJava 構文のクエストが終了するまで、すべてのメソッド (すべてのクラスとクラス変数) でこの修飾子を使用できます。OOP を積極的に学習し始めるときは、他の修飾子が必要になります。

アクセス修飾子が必要なのはなぜですか?

これらは、数十人、数百人のプログラマーが同時に作成する大規模なプロジェクトの場合に必要になります。

プログラマが、大きすぎるメソッドを複数の部分に分割し、コードの一部をヘルパー メソッドに移動したい場合があります。しかし同時に、対応するコードが正しく動作しない可能性があるため、他のプログラマがこれらのヘルパー メソッドを呼び出すことも望ましくありません。

そこで彼らはこれらのアクセス修飾子を思いつきました。ヘルパー メソッドをprivate という単語でマークすると、クラス以外のコードはヘルパー メソッドを参照できなくなります。



2.staticキーワード

キーワードstaticによりメソッドが静的になります。それが何を意味するかは後で見てみましょう。ここでは、静的メソッドに関するいくつかの事実を覚えておいてください。

事実 1. 静的メソッドはどのオブジェクトにも付加されず、そのメソッドが宣言されているクラスに属します。静的メソッドを呼び出すには、次のように記述する必要があります。

ClassName.MethodName()

静的メソッドの例:

クラス名 静的メソッド名
Thread.sleep() Thread sleep()
Math.abs() Math abs()
Arrays.sort() Arrays sort()

静的メソッドをクラス内から呼び出す場合は、静的メソッド名の前のクラス名を省略できます。これが、呼び出される各静的メソッドの名前の前に記述する必要がない理由です。Solution

事実 2. 静的メソッドは、自身のクラスの非静的メソッドにアクセスできません。静的メソッドは静的メソッドのみにアクセスできます。その結果、メソッドから呼び出したいすべてのメソッドをmainstatic として宣言します。

なぜ?OOP の学習を開始し、静的メソッドがどのように機能するかを理解すると、この質問に自分で答えることができるようになります。



3.throwsキーワード

おそらくメソッド宣言で見たことがあるもう 1 つのキーワード、throwsキーワードがあります。アクセス修飾子やstaticキーワードとは異なり、このキーワードはメソッド パラメータの後に配置されます。

public static Type name(parameters) throws Exception
{
  method body
}

その正確な意味については、後で例外を検討するときに検討します。

Exception ただし、表面的に触れると、 throws キーワードでマークされたメソッドは、クラス (およびそれを継承するクラス)のインスタンスを意味するエラー (例外) をスローする可能性があると言えます。クラス内で複数の異なるタイプのエラーが発生する可能性がある場合は、それぞれをカンマで区切ってリストする必要があります。


4.main方法

すべての修飾子を含むメソッドが宣言されている行は、このメソッドが他のクラスやメソッドから呼び出される方法に影響します。これはメソッドが返す結果のタイプに影響し、実行時にどのようなエラーが発生する可能性があるかを示します。

このような行はメソッド宣言と呼ばれ、次の一般的な形式になります。

access modifier static Type name(parameters) throws exceptions
メソッド宣言の一般的な形式

ここで、、、 、または何もaccess modifiers 置き換えられません。publicprotectedprivate

メソッドが静的である場合、staticキーワードが表示されます (非静的メソッドの場合は存在しません)。

Type戻り値の型です (void結果がない場合)

これで、メソッドの宣言内のすべてのキーワードの意味が理解できたと思いますmain

public static void main(String[] args) throws Exception
mainメソッドの宣言

main()キーワードで示されているように、どのクラスからでもメソッドにアクセスできますpublic

このメソッドは静的であるため、 として明示的に呼び出すことができますSolution.main()

このmainメソッドは結果を返しません。戻り値の型はvoid(型なし) です。

このmainメソッドは引数 (!)、つまり文字列の配列を受け取ります。そして、パラメータ名はargs私たちの心に「議論」を示唆します。プログラムの開始時に、引数 (文字列の配列) を渡すことができます。args これらはメソッドの配列に含まれますmain()

Exception(またはその子孫)のような未処理のエラーがmain()メソッド内で発生する可能性があります。