私はJavaを学んでいます。メソッドやメンバが静的なときにpublicとprivateがなぜ使用されるのか不思議です。 staticは、クラスメソッドとクラスメンバであり、オブジェクトを作成せずに他のクラスから使用できるので、publicとprivateは必要ですか?いくつかの助けは、理解するためにpreciateです。申し訳ありませんが、この質問が単純すぎる場合は、いくつかの。なぜ静的メンバーとメソッドにpublicとprivateを使用するのですか?
答えて
フィールドまたはメソッドのアクセシビリティは、静的であるかどうかとは正反対です。
外部からアクセスできる静的メソッドと、静的メソッド(静的メソッドまたは非静的メソッド)をクラス内部からのみ使用する必要があります。同じことがフィールドにも当てはまります。例えば
:私は、Javaを学んでいると私はちょうどメソッドまたはメンバーが静的であるとき、なぜ公共と民間が使用されているだろう
// not visible from the outside
private static final long MILLISECONDS_IN_A_MINUTE = 1000L * 60 * 60;
public static Date addMinutes(Date d, int amount) {
return addMillis(d, MILLISECONDS_IN_A_MINUTE * amount);
}
// not visible from the outside
private static Date addMillis(Date d, long amount) {
return new Date(d.getTime() + amount);
}
OKですが、静的メソッドまたは静的フィールドを呼び出すクラスまたはメソッドも静的でなければならないという規則がありますか? –
いいえ、そのようなルールはありません。しかし、反対のためのルール(のような)があります。静的メソッド内で 'instanceMethod()'を呼び出すことはできません(非静的メソッドを呼び出すインスタンスが必要です)。 – aioobe
これは必須ではありませんが、static
メソッドと内部メンバー専用のデータメンバーがあります。あなたはクラスのインスタンスごとに一意のIDたい場合
このための例は次のとおりです。
class Foo
{
private static int nextId = 0;
private static int generateId() { return ++nextId; }
private int id;
public Foo()
{
id = generateId();
}
}
あなたが見ることができるように、nextId
とgenerateId()
がクラス外で必要とされていないが、また彼らは屋外で使用する必要がありますクラス。クラス自身がidの生成を担当します。しかし、それらをstatic
にする必要があります(nextId
はstatic
になる必要がありますが、非スタティックメンバーにはアクセスしないので、generateId()
を静的にすることもできます)。
オブジェクトFoo
が作成されるたびに、static
カウンタが増分されるため、クラスのインスタンスごとに異なるIDが取得されます。 (この例はスレッドセーフではありません)
静的パブリックメソッドがあり、このメソッドがプライベート属性にアクセスする必要があるとします。このプライベート属性も静的でなければなりません。プライベートスタティックが存在する理由の1つがあります。
例:上記
public class Test {
private static int myattr = 0;
public static void foo() {
myattr = 2;
}
}
、myattr
はfoo()
方法でそれを使用するためには、静的な属性でなければなりません。
はい、必要です。
スタティックメソッドがあり、そのメソッドでプライベート変数を使用する場合は、静的メソッドも宣言する必要があります。
また、静的変数を他のパッケージに表示したくない場合は、パブリック宣言しないでください。
?
は、私はあなたの質問は、アクセス修飾子がインスタンスのためのものであることを一般的な誤解が原因であると考えているが、彼らはありません!
クラスの2つの異なるインスタンスが互いにプライベートメンバーにアクセスできます。
つまり、アクセス修飾子は、クラスレベルで動作します。静的メンバーもいくつかのクラスに属しているため、アクセス修飾子を持つことも意味があります。
(JB Nizetの例のように)同じクラスのコードでのみ使用する静的メソッド(または変数)は、プライベートである必要がありますが、任意のクラスのコードで使用できる静的メソッドまたは変数公開する必要があります。
私は覚えているから、実際にはが必要ですが必要です。しかし、publicは、基本的にどのプログラミング言語でも、外部ファイルで使用できることを意味します。 プライベートはそのファイル内でのみ使用でき、スタティックは前記参照の値を変更できないことを意味します。これらが関数であれ、変数であれ、同じ規則が適用されます。私はオフかもしれません。約1年半でJavaをやっていない。
これらのタイプを組み込む方法はあなた次第です。結局のところ、プログラムはユーザーの多様性だけです。^_^
パブリックとプライベートのキーボードは可視性と関係があります。どのメンバーに他のクラスからアクセスしたいのか、隠したりカプセル化したりする必要がありますか? 静的メンバーはクラス全体に関連し、非静的メンバーはオブジェクトインスタンスに作用します。
静的メソッドをメソッドとともに使用する場合、静的メソッドを他のクラスのメンバーが使用する必要があるだけではありません。 (メソッドを含む) クラス、すなわちないオブジェクトはそのクラスを作成できませんインスタンス化できない場合。
場合、我々はクラスの静的メソッドにアクセスするものです
2つの異なるクラスが同じ名前の静的メソッドを持つ場合があります。その場合、他のクラスのメソッドではなく、同じクラスのメソッドを使用します。
- 1. 静的クラスに非静的メソッドと変数を使用できないのはなぜですか?
- 2. なぜSystem.Arrayのほとんどのメソッドは静的ですか?
- 3. 静的メンバー関数でconstメンバーを使用できないのはなぜですか?
- 4. 静的メソッドで静的メソッドと非静的メソッドにアクセスする方法
- 5. なぜ静的クラスは静的メンバーのみを持つことができますか?
- 6. PHP | public/private関数の代わりにpublic static/private static関数を使うべきですか?
- 7. 静的メソッドから非静的メンバー変数へのアクセス
- 8. 静的メソッドをASMX WebサービスのWebサービス操作として使用できないのはなぜですか?
- 9. 「継承型」から「静的メンバー」にアクセスすると便利なのはなぜですか?
- 10. 静的メンバーとブーストシリアル化
- 11. 静的メンバー関数とスレッドセーフ
- 12. Dim vs Private/Public
- 13. 同じプロジェクトのGit privateとpublic repos
- 14. CustomFieldSerializerに静的メソッドが必要なのはなぜですか?
- 15. 静的クラスと静的メソッド
- 16. ES6 Expressと静的メソッドの使用に関する質問
- 17. なぜタイプパラメータで静的メソッドを呼び出すことが可能ですか?
- 18. 低レベルの違い:静的メソッドを使用した非静的クラスと静的メソッドを使用した静的クラスとの比較
- 19. 静的ライブラリの静的メンバー
- 20. private/protectedメソッドを持つインターフェイスを使用することはできますか?
- 21. C++クラス(public、private、protected)
- 22. PHPで静的メソッドやプロパティを使用すると、メモリ使用量は少なくなりますか?
- 23. 静的メソッドを使用するサービスロケータ
- 24. ブーストラムダを使用して静的メンバーにアクセスする
- 25. PHP - 静的メソッドと非静的メソッドを宣言できますか?
- 26. 静的メソッドと静的変数のjava
- 27. boost :: signals2スロットを非静的関数メンバーとして使用しますか?
- 28. ClassInitializeメソッドを静的にする必要があるのはなぜですか?
- 29. とにかく静的なメンバーは移動可能か固定ですか?
- 30. クラスと派生クラスのインスタンスは、非静的メソッドを介して間接的にクラスの静的メンバーを変更することができます。#
あなたの質問は不明です.public *と* privateとして何かを指定することはできません。静的vsインスタンスメンバーに関係なくアクセシビリティルールは同じです...なぜプライベートvsパブリックの強制はインスタンスメンバーにとって重要ですが、静的メンバーではないと思いますか? –
多分あなたがクラスを作成するときに操作するべきではない値があるかもしれません。クラスサークルは常にプライベートダブルPI = 3.14 ....を持ち、半径は時々異なる可能性があるのでpublicでなければなりません。 –