黑马程序员技术交流社区

标题: 关于静态方法只能访问静态方法的一些问题 [打印本页]

作者: 王勇    时间: 2014-5-20 00:00
标题: 关于静态方法只能访问静态方法的一些问题
本帖最后由 王勇 于 2014-5-21 00:15 编辑

今天在学习static关键字时,了解到静态方法只能调用静态方法,因为静态方法随着类的加载而加载,优先于对象而存在,所以只能调用静态成员。但是我们知道主函数也是静态的,那么主函数是否也只能调用静态方法呢???
以下为验证结果:
  1. class MainStatic
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 sop();
  6.         }
  7.         public void sop()
  8.         {
  9.                 System.out.println("hello java!");
  10.         }
  11. }
复制代码
编译结果:


所以,看来主函数是静态的那么其调用的函数也需要是静态的:
修改后
  1. class MainStatic
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 sop();
  6.         }
  7.         public static void sop()
  8.         {
  9.                 System.out.println("hello java!");
  10.         }
  11. }
复制代码

以上为本人今天的学习发现,觉得是平时不易察觉的,有不对的地方,大家指出来,互相学习!!!




作者: zhrnghgwsws    时间: 2014-5-20 01:48
你有点钻牛角尖了。
作者: 波涛    时间: 2014-5-20 02:15
本帖最后由 波涛 于 2014-5-20 02:22 编辑

理解是对的,但是有点片面,静态方法在某些情况下也可以特定方式访问非静态方法。

  1. public class Demo{
  2.   public static void main(String[] args)
  3.   {
  4.    //主函数是程序入口,不依赖于某个特定类;这句代码虽然在静态的main中,但依然可以通过实例化一个类的对象来访问其非静态方法。
  5.      new Demo().sop();
  6.   }
  7.   public void sop()//非静态方法
  8.   {
  9.                  System.out.println("hello java!");
  10.   }
  11. }
复制代码



作者: 王勇    时间: 2014-5-20 14:49
波涛 发表于 2014-5-20 02:15
理解是对的,但是有点片面,静态方法在某些情况下也可以特定方式访问非静态方法。

你建立对象了,当然可以··············
作者: 波涛    时间: 2014-5-20 15:26
王勇 发表于 2014-5-20 14:49
你建立对象了,当然可以··············

嗯,是的,那就没问题了~




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