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();?谢谢。

4

4 回答 4

15

方法创建它定义的类的新实例并不少见main。但创建实例不会main再次调用。请记住,main它是一个静态方法,不依赖于任何特定实例。

于 2013-08-14T20:11:02.310 回答
5

这里其他成员没有提到的关键点是运行程序和实例化一个类是两件不同的事情。当你用 java 写 Hello World 时,你写了以下内容:

public static void main(String[] args) {
    System.out.println("Hello World");
}

main 方法在您执行包含它的类时运行。但是,在这个 main 方法中(在静态上下文中),您可以执行以下操作:

ArrayList<String> stringList = new ArrayList<String>();

这称为实例化,这里我们实例化一个ArrayListwith type String。发生这种情况时,内部的 main 方法ArrayList不会被调用 - 相反,它的构造函数被调用。因此,在我们的 main 方法中,我们可以实例化包含 main 方法的类,它调用构造函数,而不是 main 方法:

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


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

当从 main 方法中调用构造函数时,将打印一次“Hello World”。

于 2013-08-14T20:26:08.273 回答
3

是的,类的方法调用自己绝对没有问题,

不,它不会循环,因为实例化一个类不会自动调用它的所有方法。

main方法完全运行的原因是因为 Java 将单个main方法作为其入口点。

main是一种static方法,因此无论如何它都不与任何实例相关联。

于 2013-08-14T20:10:27.917 回答
1

该方法只被调用一次,在程序正常启动时。

public static void main(String[] args) {

在此您的程序从ManageEmploye类型创建一个对象,因此可以访问其非静态属性

于 2013-08-14T20:14:36.600 回答