4

私はこれに疑問を呈していました.なぜすべてのメソッドを静的に宣言できないのですか? ここで少し説明してもらえますか?ありがとう。

メソッドを静的にすると、非静的メンバーにアクセスできないと思いますか?

4

9 に答える 9

5

あなたはできる。そのようなクラスからオブジェクトをインスタンス化する理由はありません。すべての状態は、JVM全体でグローバルになります。

あなたの質問者はおそらく「できない」と「すべきではない」を混同していたでしょう。

于 2012-07-19T07:31:52.020 に答える
4

静的メソッドはインスタンス変数にアクセスできません。:)

public class MyStaticExample{
  private String instanceVariable = "Hello";
  private static String STATIC_VARIABLE = "Hello too";

  public static void staticMethod(){
    System.out.println(this.instanceVariable); // this will result in a compilation error.
    System.out.println(STATIC_VARIABLE); // this is ok
  }

  public void instanceMethod(){
    System.out.println(this.instanceVariable); // this is ok
    System.out.println(STATIC_VARIABLE); // this is ok
  }
}
于 2012-07-19T07:31:42.883 に答える
2

レッスン:オブジェクト指向プログラミングの概念から始めて、JDK からほぼすべてのクラスを選択します。開始する単純なものは、静的メソッドを使用して実装できない TRUE 用と FALSE 用の 2 つのインスタンスを必要とするBooleanです。

于 2012-07-19T07:42:55.773 に答える
2

すべてのメソッドを as として宣言できますstaticが、メソッドはクラス レベルになります。状態が によって保持される異なる状態を持つ 10 個のオブジェクトを作成するとしますproperties。この場合、メソッドを使用してオブジェクトを取得することはできませんstatestatic

Object obj;
public static Object getState(){

    return obj; // compile time error Cannot make a static reference to the non-static field 
}

ユーティリティ クラスでは、すべてのメソッドを静的にすることをお勧めします。

于 2012-07-19T07:34:53.993 に答える
2

あなたはできる。しかし、その結果は、実際の OOP ではなく、既存のクラスを使用した構造化プログラム (C や Pascal を考えてください) になります。オブジェクト指向は Java プログラミングの慣用的なアプローチであるため、コード内の静的キーワードの数を少なくしてください。

于 2012-07-19T07:35:39.727 に答える
1

そんな自粛はありません。クラス内のすべてのメソッドを静的にすることができます。C# では、クラス自体を静的として定義することもできます (クラス内のすべてのメソッドを静的にする必要があります)。

それは、そのクラスで何を達成したいのかという問題です。

于 2012-07-19T07:36:25.163 に答える
1

すべてのメソッドを静的として定義できます。すべきかすべきでないかは、文脈によって異なります。最良のオプションは、静的ライブラリ メソッドを作成することです。たとえば、以下は私が作成した TestHelper ユーティリティ クラスです。

public class TestHelper {
    /**
     * Method echo.
     * 
     * @param heading
     *            String
     */
    public static void echo(String heading) {
        System.out.println("+++++++++++++++++++++++++");
        System.out.println("++++++ " + heading + " ++++++");
    }

    public static void end() {
        System.out.println("=========================");
    }

    public static void mark() {
        System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
    }

    /**
     * Method spot.
     * 
     * @param string
     *            String
     */
    public static void spot(Object string) {
        System.out.println("*****_______" + string + "_______******");
    }

    /**
     * This is a stub method
     */
    public static void stub() {

    }

    public static void error(String string) {
        System.out.println("^^^^^^^^^^^Error Begining^^^^^^^^^^^^^^");
        System.out.println(string);
        System.out.println("^^^^^^^^^^^Error End^^^^^^^");
    }
}
于 2012-07-19T07:41:00.900 に答える
0

すべてを静的に宣言できます。しかし、どのような通常のスケールのオブジェクト モデルですべてのメソッド static が必要になるかは大きな問題です。

于 2012-07-19T07:34:59.770 に答える
0

はい、必要に応じて変更できます。ただし、公開メンバーにアクセスできない場合、「this」キーワードは機能しないことを忘れないでください。

于 2012-07-19T07:38:09.463 に答える