?在非静态方法中是不允许直接调用静态方法的,原因和意义何在?
程序运行的时候是先加载静态常量和方法,然后再加在其他。
但是,利用重组的方法可以实现静态方法中调用非静态方法:
//StaticMethodTest.java
//A ststic method cannot call a non-static method, but we can transfer a object reference, which include a non-static metho to the static method, thus, wo can call that non-static method in a indirect way.
package Test;
public class StaticMethodTest {
void NonStaticMethod() {
System.out.println("This is a non-sataic method.");
}
static void StaticMethod(StaticMethodTest s) {
//这个是静态方法的具体实现,就是打印一个输出语句:
System.out.println("This is a static method.");
//而下面这个方法是静态方法中将非静态方法重组过来的,利用传递过来的实例进行调用:
s.NonStaticMethod();
}
public static void main(String[] args) {
//重组的时候必须声明一个实例进行非静态方法的调用
StaticMethodTest sObj = new StaticMethodTest();
// 在主函数中可以直接调用静态方法
StaticMethod(sObj);
}
}