考虑默认包中的两个类:
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的构造函数,但据我所知,我们无法从静态方法访问非静态方法,并且构造函数是非静态的。
答案 0 :(得分:5)
静态方法不能调用非静态方法或字段。这是对的。
但是构造者很特别。您可以在静态方法中构造一个新对象,然后可以调用该对象的方法,即使它们不是静态的,即使该对象是同一个类的实例。
这样想:
因此,您无法从静态方法调用实例方法,因为没有封装实例。但是,静态方法可以创建一个对象,然后调用该实例的方法。
答案 1 :(得分:1)
静态方法不能调用非静态方法或字段,但非静态方法可以调用静态方法或字段。
构造函数与其他实例方法不同,它是不同的。这就是为什么你可以在静态方法中创建对象。
答案 2 :(得分:0)
类无法从静态方法中访问自己的非静态方法。但是创建对象的实例并访问该对象的方法没有问题。实际上,您甚至可以在main方法中创建TrialExe的实例。