考虑默认包中的两个类:
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的构造函数,但据我所知,我们无法从静态方法访问非静态方法,并且构造函数是非静态的.
静态方法不能调用非静态方法或字段.那是正确的.
但建设者很特别.您可以在静态方法中构造一个新对象,然后可以调用该对象的方法,即使它们不是静态的,即使该对象是同一个类的实例.
想一想:
因此,您无法从静态方法调用实例方法,因为没有封装实例.但是,静态方法可以创建一个对象,然后调用该实例的方法.