为什么我不能只声明所有方法静态?

时间:2012-07-19 07:29:41

标签: java

我被这个问题质疑,为什么我不能声明所有方法都是静态的?你能在这里给我一个解释吗?感谢。

我相信当你创建一个静态方法时,它无法访问非静态成员吗​​?

9 个答案:

答案 0 :(得分:5)

你可以。没有理由从这样的类中实例化对象。 JVM中的任何州都是全球性的。

你的提问者可能会因为“不应该”而“混淆”而感到困惑。

答案 1 :(得分: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
  }
}

答案 2 :(得分:2)

你可以。但结果将是使用现有类的结构化程序(想想C,Pascal),而不是真正的OOP。面向对象是Java编程的惯用方法,因此请保持代码中静态关键字的数量较少。

答案 3 :(得分:2)

我将从Lesson开始:Object-Oriented Programming Concepts并从JDK中选择几乎所有类。一个简单的开始是Boolean,它需要两个实例,一个用于TRUE,另一个用于FALSE,这些实例无法使用静态方法实现。

答案 4 :(得分:1)

可以将所有方法声明为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 
}

将所有方法设为静态是实用程序类中的良好实践。

答案 5 :(得分:0)

您可以将所有内容声明为静态。但是什么样的正常尺度对象模型需要静态的所有方法,这是一个很大的问题

答案 6 :(得分:0)

没有这样的限制。您可以使类中的所有方法都是静态的。在C#中,您甚至可以将类本身定义为静态(要求其中的所有方法都是静态的)。

这更像是你想要通过该课程实现的目标。

答案 7 :(得分:0)

是的,你可以根据你的需要。但请记住,“this”关键字在这种情况下无法访问公共成员!

答案 8 :(得分:0)

您可以将所有方法定义为静态。这取决于你应该或不应该的背景。最好的选择是制作静态库方法。例如,下面是我创建的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^^^^^^^");
    }
}