一个类能否实例化自己?

5

我正在浏览一个网站上的示例代码。这是一个片段:

public class ManageEmployee {
   private static SessionFactory factory; 
   public static void main(String[] args) {
      try{
         factory = new Configuration().configure().buildSessionFactory();
      }catch (Throwable ex) { 
         System.err.println("Failed to create sessionFactory object." + ex);
         throw new ExceptionInInitializerError(ex); 
      }
      ManageEmployee ME = new ManageEmployee();

      /* Add few employee records in database */
      Integer empID1 = ME.addEmployee("Zara", "Ali", 1000);
      Integer empID2 = ME.addEmployee("Daisy", "Das", 5000);
      Integer empID3 = ME.addEmployee("John", "Paul", 10000);

为什么这个类在调用自己?看起来它会一直在循环调用自己。这个类在这里做什么呢,ManageEmployee ME = new ManageEmployee();?谢谢。

6
主方法只会被调用一次。你认为哪里有循环? - Sotirios Delimanolis
4个回答

15

在it技术中,main方法通常会创建一个它所定义的类的新实例。但是创建实例不会再次调用main方法。请记住,main方法是静态方法,不与任何特定实例相关联。


5
其他成员没有提到的关键点是运行程序和实例化类是两种不同的事情。在编写Java中的 Hello World 时,您编写了以下内容:
public static void main(String[] args) {
    System.out.println("Hello World");
}

主方法在执行包含它的类时运行。但在此主方法中(在静态上下文中),您可以执行以下操作:
ArrayList<String> stringList = new ArrayList<String>();

这被称为实例化,这里我们正在实例化一个类型为 StringArrayList。当发生这种情况时,ArrayList 内部的主方法并不被调用 - 而是调用它的构造函数。因此,在我们的主方法中,我们可以实例化包含主方法的类,并调用其构造函数,而不是主方法:

public class TestClass {
    public TestClass(String greeting) {
        System.out.println(greeting);
    }


    public static void main(String[] args) {
         TestClass c = new TestClass("Hello World");
    }
}

当构造函数在主方法中被调用时,会打印一次“Hello World”。

3

是的,一个类的方法调用自身没有任何问题,

而且不会造成循环,因为实例化一个类并不会自动调用所有方法。

main 方法被运行的原因是 Java 寻找单个 main 方法作为其入口点。

main 是一个静态方法,因此它不与任何实例相关联。


1
该方法通常在程序启动时只被调用一次。
public static void main(String[] args) {

在这里,你的程序创建了一个类型为 ManageEmploye 的对象,因此可以访问其非静态属性。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接