如何从静态块创建对象



考虑默认包中的两个类:

    class Trial {
        int a;
        int b;
        public static void main (String [] args){
            System.out.println("test base");
        }

    }
    public class TrialExe {
        int a;
        int b;
        public static void main (String [] args){
            Trial t = new Trial();
            System.out.println("test exe");
        }

    }       

编译TrialExe:javac TrialExe

这是怎么编译的?。考虑到Trial对象是从静态块创建的,要创建对象,需要Trial的构造函数,但据我所知,我们无法从静态方法访问非静态方法,并且构造函数是非静态的。

静态方法不能调用非静态方法或字段。这是正确的。

但建设者是特殊的。您可以从静态方法中构造一个新对象,然后可以调用该对象的方法,即使它们不是静态的,即使该对象是同一类的实例。

这样想:

  • 静态方法属于该类。它们只有一个,不需要建造
  • 实例(非静态)方法属于对象实例

因此,不能从静态方法调用实例方法,因为没有封装实例。但是,静态方法可以创建一个对象,然后调用该实例的方法。

静态方法不能调用非静态方法或字段,但非静态方法可以调用静态方法或域。

构造函数和其他实例方法不一样,它是不同的。这就是为什么您可以在静态方法中创建对象。

类不能从静态方法内部访问自己的非静态方法。但是创建一个对象的实例并访问该对象的方法是没有问题的。事实上,您甚至可以在main方法中创建TrialExe的实例。

最新更新