とは関係ないが、コンポーネントを定義するときにのみその活動の中で使用されるように、以下の定義間の本当の違いは何ですかエンティティ自体が書かれたクラスの内部で使用されることがある場合には、常にプライベートなものを使用することを示唆する(ガベージクリーンアップ、メモリなど) "フードの下"の規則。パブリックまたはプライベート、それは本当にAndroidの変数単一のアクティビティの内部
答えて
プライベートフィールドはそれはあなたが他のクラスのフィールドやメソッドを公開する必要がない限りprivate
を使用することが一般的に受け入れられた慣習だencapsulation
を推進しています。これを習慣にすることは、長期的にはあなたに多くの苦痛を救うでしょう。
ただし、public
フィールドまたはメソッドには本質的に間違ったものはありません。ガーベッジコレクションに違いはありません。
一部の種類のアクセスはパフォーマンスに影響しますが、おそらくこの質問のトピックよりも少し進んでいる可能性があります。
このようなケースの1つは、外部クラスフィールドにアクセスする内部クラスと関係します。
class MyOuterClass
{
private String h = "hello";
// because no access modifier is specified here
// the default level of "package" is used
String w = "world";
class MyInnerClass
{
MyInnerClass()
{
// this works and is legal but the compiler creates a hidden method,
// those $access200() methods you sometimes see in a stack trace
System.out.println(h);
// this needs no extra method to access the parent class "w" field
// because "w" is accessible from any class in the package
// this results in cleaner code and improved performance
// but opens the "w" field up to accidental modification
System.out.println(w);
}
}
}
私はこれらの隠された方法を知りませんでしたので、私はupvote –
変数宣言がアクティビティのスコープ内にある場合、通常はスコープ付き変数として正常に動作します。
ただし、パラメータでない場合は、あるメソッドの変数を別のメソッドで使用することはプログラミングの面では悪いことです。
例:
悪い:
void Foo()
{
int foo = 5;
System.out.println(Bar());
}
int Bar()
{
return foo + 5;
}
foo
が良いBar()
のためのスコープの外で宣言されているので、これは実際に構文エラーがスローされます。
int foo;
void Foo()
{
foo = 5;
System.out.println(Bar(foo)); //prints 10
}
int Bar(int foo)
{
return foo + 5;
}
なぜ「良い」は良いですか? –
@Alexあなたは不要な副作用(設計原則として)を避けたいからです。副作用は、現在のコンテキスト外の情報に影響するものとして定義されます。 – Codeman
あなたの「悪い」はコンパイルされないので、悪くない、むしろ存在しません。ですから、グッドは何にも比べていないので、なぜそれが良いのだろうと思います。 –
private
とpublic
は、オブジェクト指向設計の目的を持つJavaのキーワードの両方です。 http://docs.oracle.com/javase/tutorial/java/concepts/
アクティビティでこれらの変数(オブジェクト)のみを使用する場合は、それらの変数を非公開にすることをお勧めします。
こちらがお役に立てば幸いです。
編集:
私は、プライベート、パブリック、または全くキーワードを使用すると、視点のメモリポイントからアプリあなたを最適化するかはわかりません。限り、私はそれがないと思うと私はあなたのコードを最も読みやすく、直感的でメンテナンスできるものを使用する必要がありますと言うことができます。
ありがとう、私は彼らが何をしているのか知っている私は彼らが私のケースでは公然とする必要はありません知っているが、私は何かのブーストメモリ管理やガベージコレクションがあったかどうかは、公的または私的です。 – Octoth0rpe
視界の範囲は、ガベージコレクタやメモリ管理あなたはとてもあなたのコードは保守が容易になることができますできるだけ多くの視界の範囲を狭めることになるでしょう
とは何の関係もありません。
ありがとう、もう少し周りを掘ると、これはコンベンションのように見えます:ガベージコレクションやメモリ管理の違いはありません。 プライベートです。 – Octoth0rpe
井戸、 重要なポイントは、変数をプライベートとして定義することがJavaプログラミングの標準であることです。 オブジェクトの変数を直接呼び出すことは、コードを読んでいる可能性のある他の人には少なくとも奇妙に見えるでしょう。
他にも、プロジェクトで単独でコーディングするのではない場合、クラス実装のキーとなる属性の可視性を制限することは、他の開発者がやって来る
これらの修飾子がコンパイルや最適化の目的に使用されているかどうか私は個人的にはわかりません。
私はすべての経験豊富なJavaコーダーと思いますが、私はこのパターンを属性の定義に使用することを強く勧めています。
- 1. SPA。それはMVC4内の本当の単一ページアプリケーションですか?
- 2. プライベートvsパブリック変数
- 3. バックボーンビューへのプライベート変数とパブリック変数
- 4. CA1047「メンバーをプライベート、パブリック、または内部のメンバーにする」とC++/CLIのイベント
- 5. それは本当に簡単JEE6
- 6. プライベートまたはパブリックMSMQ
- 7. forループ内の変数がローカルで、私はそれをパブリックにしたい
- 8. Android、システムのプライベート/パブリック証明書にアクセス
- 9. アクティビティが終了した後、アクティビティとそのパブリック変数はどうなりますか?
- 10. パブリック変数はVBAのフォームでは本当に公開されていません
- 11. パブリック変数とプライベート変数の命名規則
- 12. パブリック静的変数とプライベート静的変数の違い
- 13. Androidのアクティビティは本当に視覚的な表現ですか
- 14. Clojureは、DEFN、defn-、パブリック/プライベート、デフォルト
- 15. 単一のステートメント内に複数の複合割当:それは未定義の動作かどうか?
- 16. スレッド内のプライベート変数
- 17. 「プライベート」パブリックURLのベストプラクティスは何ですか?
- 18. 共通変数をプライベートまたはパブリックに設定できないのはなぜですか?
- 19. C#クラスのプライベート、プロテクト、パブリック、および内部メソッドのパフォーマンスに関する違いはありますか?
- 20. Node.jsでのプライベート/パブリック暗号
- 21. 単一アクティビティ、複数のフラグメントに基づくAndroidアプリケーション
- 22. F#コードの最適化、またはそれは本当に遅いですか?
- 23. プライベート内部クラスアクセスメソッド
- 24. 単一の変数に値の範囲を割り当てる
- 25. シナリオに変数または一部の情報を表示
- 26. 本部は、あなたは、単にこの必要
- 27. Webview App内のプライベート内部クラス内の自分のアクティビティへの参照を取得できません
- 28. AWS単一のパブリックIPおよびウェブソケット
- 29. バッシュ:内部使用単一引用符変数
- 30. enum内のプライベートstatic final変数
ほとんどの場合、とりわけ、すべてがただ1つのクラス/アクティビティにあるシナリオでは、使用する変数の範囲を制限するための適切なフォームとみなされます。 –