如何从静态块创建对象?

Rah*_*air 3 java compilation

考虑默认包中的两个类:

    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");
        }


    }       
Run Code Online (Sandbox Code Playgroud)

编译TrialExe:javac TrialExe

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

nos*_*omo 5

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

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

想一想:

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

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