黑马程序员技术交流社区

标题: 求解为什么主函数内部能直接掉用非静态方法 而非静态方... [打印本页]

作者: 夜默    时间: 2013-6-5 17:02
标题: 求解为什么主函数内部能直接掉用非静态方法 而非静态方...
本帖最后由 4968547610317 于 2013-6-5 17:14 编辑


public class Test {
/**
  * @param args
  */
public static void main(String[] args) {
  show3();//调用静态方法   为什么不能调用非静态方法
    }
public void show1(){
  System.out.println("show1");
  show2();//调用非静态方法    这里却可以
}
public void show2(){
  System.out.println("show2");
}
public static void show3(){
  System.out.println("show3");
}
}



作者: 小冰块    时间: 2013-6-5 17:10
静态方法只能调用静态方法,非静态的方法都可以调用。
因为静态方法在对象创建之前就已经存在于方法区内的,而非静态的方法只有在创建对象后才加载到堆内存里,静态方法又能去哪里调用非静态的函数呢?
作者: 夜默    时间: 2013-6-5 17:12
小冰块 发表于 2013-6-5 17:10
静态方法只能调用静态方法,非静态的方法都可以调用。
因为静态方法在对象创建之前就已经存在于方法区内的 ...

谢了,老是把这个弄错...
作者: 画饼    时间: 2013-6-5 17:13
j静态方法是对象没有new出来就可以调用的,而非静态方法要new出对象才可以调用,静态方法里面不能调用非静态方法,除非你自己在类里面建立个对象!
作者: 闫月乐    时间: 2013-6-5 17:56
主函数是静态的,所以调用的方法只能是静态的,而show1是非静态的,所以可以调用非静态的.
作者: 花心々小土豆    时间: 2013-6-6 08:37
静态方法随类的的加载而加载,这就是为什么main函数需要定义为static,为了让JVM能找到程序入口。
main函数是静态的,所以它只能调用本类中静态的方法。
作者: 夕风秋凉    时间: 2015-10-15 21:52
小白刚刚想到这个问题,现在是明白了.意思就是非静态方法只有在对象建立后,才能加载到内存里,而静态随着类的加载而加载,那就当然非静态能调用静态!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2