为什么其他方法可以是“静态的”而构造函数不能?

新手上路,请多包涵

我不明白为什么主要方法必须是静态的。我了解静态变量,但我很难掌握静态方法。是否存在静态方法,以便可以在两个不会相互冲突的不同类中创建两个具有相同名称的方法?

另外,我不明白为什么我不能创建静态构造函数。

谁能帮忙解释一下这个概念?

原文由 user983246 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 374
2 个回答

Java有[静态构造函数] 静态初始化块,可以看作是“静态构造函数”:

 class Foo {
  static String Bar;
  static {
     // "static constructor"
     Bar = "Hello world!";
  }
}

在任何情况下,主类中唯一 必须 是静态的方法是 main 方法。这是因为它是在 没有 首先创建“主类”的实例的情况下被调用的。一种常见的技术,也是我更喜欢的一种,是快速 脱离 静态上下文:

 class Main {
   int argCount;

   // constructor
   public Main (String[] args) {
     // and back to boring ol' non-static Java
     argCount = args.length;
   }

   void runIt () {
      System.out.println("arg count: " + argCount);
   }

   // must be static -- no Main instance created yet
   public static void main (String[] args) {
      Main me = new Main(args);
      me.runIt();
   }
}

此外,静态与“名称冲突”无关。静态方法(或变量)只是一种与类型的特定实例 无关 的方法(或变量)。我建议通读 Classes and Objects Java TutorialUnderstanding Instance and Class Variables 部分。

快乐的编码。

原文由 user166390 发布,翻译遵循 CC BY-SA 3.0 许可协议

我正在分享“为什么 java 构造函数不是静态的”的原因之一。

简单地说,“Java 构造函数总是非静态的”,因为,

构造函数的目的只是初始化/构造对象,并使继承成为可能。为此,我们需要使用两个有用的 java 关键字(兼非静态变量),例如 this 和 super。我们将使用“this”来初始化对象。我们/Java 将使用 super(ofcourse super()) 来调用超类构造函数,以便首先创建超对象(或 Object 类),然后创建子对象(因此继承)如果构造函数是静态的,那么我们不能使用这两个关键字(构造函数中的非静态变量)(正如我们所知,不能从静态上下文中引用非静态变量)

所以java构造函数不应该是静态的。

原文由 sreejagaths 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题