1. アクセス修飾子
各メソッドの前に、プログラマはいわゆるアクセス修飾子を指定できます。これらには、次のキーワードが含まれます: public
、protected
、private
。
これらのアクセス修飾子を使用すると、他のクラスのメソッドへのアクセスを制限できます。
たとえば、private
メソッド宣言の前にキーワードを記述した場合、そのメソッドは、そのメソッドが宣言されているのと同じクラスからのみ呼び出すことができます。このpublic
キーワードを使用すると、任意のクラスの任意のメソッドからマークされたメソッドにアクセスできます。
このような修飾子は合計 3 つありますが、メソッドへのアクセスには 4 つのタイプがあります。これは、アクセス修飾子の不在にも意味があるためです。
からのアクセス... | ||||
---|---|---|---|---|
修飾子 | どのクラスでも | こどもクラス | そのパッケージ | そのクラス |
public |
はい | はい | はい | はい |
protected |
いいえ | はい | はい | はい |
修飾子なし | いいえ | いいえ | はい | はい |
private |
いいえ | いいえ | いいえ | はい |
1.public
修飾子
修飾子でマークされたメソッド (または変数、またはクラス) には、プログラム内のどこからでもpublic
アクセスできます。これは最高度のオープン性であり、制限はありません。
2.private
修飾子
修飾子でマークされたメソッド (または変数、またはクラス) は、それが宣言されているのと同じクラスからのprivate
みアクセスできます。他のすべてのクラスでは、マークされたメソッド (または変数) は表示されません。まるで存在しないかのようです。これは最高レベルの制限であり、独自のクラスのみです。
3. 修飾子なし (デフォルトの修飾子)
メソッド (または変数) が修飾子でマークされていない場合、「デフォルトの修飾子」があるとみなされます。その修飾子を持つ変数またはメソッド (つまり、修飾子をまったく持たない) は、それらが宣言されているパッケージ内のすべてのクラスに表示されます。そして彼らだけに。この修飾子は と呼ばれることもありpackage-private
、変数やメソッドへのアクセスがそれらのクラスが含まれるパッケージ全体に開かれていることを示します。
4.protected
修飾子
メソッドが修飾子でマークされている場合protected
、同じクラス、同じパッケージ、および子孫 (メソッドが宣言されているクラスを継承するクラス) からそのメソッドにアクセスできます。このトピックについては、Java Core クエストでさらに詳しく分析します。
public
Java 構文のクエストが終了するまで、すべてのメソッド (すべてのクラスとクラス変数) でこの修飾子を使用できます。OOP を積極的に学習し始めるときは、他の修飾子が必要になります。
アクセス修飾子が必要なのはなぜですか?
これらは、数十人、数百人のプログラマーが同時に作成する大規模なプロジェクトの場合に必要になります。
プログラマが、大きすぎるメソッドを複数の部分に分割し、コードの一部をヘルパー メソッドに移動したい場合があります。しかし同時に、対応するコードが正しく動作しない可能性があるため、他のプログラマがこれらのヘルパー メソッドを呼び出すことも望ましくありません。
そこで彼らはこれらのアクセス修飾子を思いつきました。ヘルパー メソッドをprivate という単語でマークすると、クラス以外のコードはヘルパー メソッドを参照できなくなります。
2.static
キーワード
キーワードstatic
によりメソッドが静的になります。それが何を意味するかは後で見てみましょう。ここでは、静的メソッドに関するいくつかの事実を覚えておいてください。
事実 1. 静的メソッドはどのオブジェクトにも付加されず、そのメソッドが宣言されているクラスに属します。静的メソッドを呼び出すには、次のように記述する必要があります。
ClassName.MethodName()
静的メソッドの例:
クラス名 | 静的メソッド名 | |
---|---|---|
Thread.sleep() |
Thread |
sleep() |
Math.abs() |
Math |
abs() |
Arrays.sort() |
Arrays |
sort() |
静的メソッドをクラス内から呼び出す場合は、静的メソッド名の前のクラス名を省略できます。これが、呼び出される各静的メソッドの名前の前に記述する必要がない理由です。Solution
事実 2. 静的メソッドは、自身のクラスの非静的メソッドにアクセスできません。静的メソッドは静的メソッドのみにアクセスできます。その結果、メソッドから呼び出したいすべてのメソッドをmain
static として宣言します。
なぜ?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
置き換えられません。public
protected
private
メソッドが静的である場合、static
キーワードが表示されます (非静的メソッドの場合は存在しません)。
Type
戻り値の型です (void
結果がない場合)
これで、メソッドの宣言内のすべてのキーワードの意味が理解できたと思いますmain
。
public static void main(String[] args) throws Exception
main()
キーワードで示されているように、どのクラスからでもメソッドにアクセスできますpublic
。
このメソッドは静的であるため、 として明示的に呼び出すことができますSolution.main()
。
このmain
メソッドは結果を返しません。戻り値の型はvoid
(型なし) です。
このmain
メソッドは引数 (!)、つまり文字列の配列を受け取ります。そして、パラメータ名はargs
私たちの心に「議論」を示唆します。プログラムの開始時に、引数 (文字列の配列) を渡すことができます。args
これらはメソッドの配列に含まれますmain()
。
Exception
(またはその子孫)のような未処理のエラーがmain()
メソッド内で発生する可能性があります。
GO TO FULL VERSION