私はこれに疑問を呈していました.なぜすべてのメソッドを静的に宣言できないのですか? ここで少し説明してもらえますか?ありがとう。
メソッドを静的にすると、非静的メンバーにアクセスできないと思いますか?
私はこれに疑問を呈していました.なぜすべてのメソッドを静的に宣言できないのですか? ここで少し説明してもらえますか?ありがとう。
メソッドを静的にすると、非静的メンバーにアクセスできないと思いますか?
あなたはできる。そのようなクラスからオブジェクトをインスタンス化する理由はありません。すべての状態は、JVM全体でグローバルになります。
あなたの質問者はおそらく「できない」と「すべきではない」を混同していたでしょう。
静的メソッドはインスタンス変数にアクセスできません。:)
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
}
}
レッスン:オブジェクト指向プログラミングの概念から始めて、JDK からほぼすべてのクラスを選択します。開始する単純なものは、静的メソッドを使用して実装できない TRUE 用と FALSE 用の 2 つのインスタンスを必要とするBooleanです。
すべてのメソッドを as として宣言できますstatic
が、メソッドはクラス レベルになります。状態が によって保持される異なる状態を持つ 10 個のオブジェクトを作成するとしますproperties
。この場合、メソッドを使用してオブジェクトを取得することはできません。state
static
Object obj;
public static Object getState(){
return obj; // compile time error Cannot make a static reference to the non-static field
}
ユーティリティ クラスでは、すべてのメソッドを静的にすることをお勧めします。
あなたはできる。しかし、その結果は、実際の OOP ではなく、既存のクラスを使用した構造化プログラム (C や Pascal を考えてください) になります。オブジェクト指向は Java プログラミングの慣用的なアプローチであるため、コード内の静的キーワードの数を少なくしてください。
そんな自粛はありません。クラス内のすべてのメソッドを静的にすることができます。C# では、クラス自体を静的として定義することもできます (クラス内のすべてのメソッドを静的にする必要があります)。
それは、そのクラスで何を達成したいのかという問題です。
すべてのメソッドを静的として定義できます。すべきかすべきでないかは、文脈によって異なります。最良のオプションは、静的ライブラリ メソッドを作成することです。たとえば、以下は私が作成した 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^^^^^^^");
}
}
すべてを静的に宣言できます。しかし、どのような通常のスケールのオブジェクト モデルですべてのメソッド static が必要になるかは大きな問題です。
はい、必要に応じて変更できます。ただし、公開メンバーにアクセスできない場合、「this」キーワードは機能しないことを忘れないでください。