A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 王勇 于 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. }
复制代码

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



评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1 值得鼓励!

查看全部评分

4 个回复

倒序浏览
你有点钻牛角尖了。
回复 使用道具 举报
本帖最后由 波涛 于 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. }
复制代码


评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

回复 使用道具 举报
波涛 发表于 2014-5-20 02:15
理解是对的,但是有点片面,静态方法在某些情况下也可以特定方式访问非静态方法。

你建立对象了,当然可以··············
回复 使用道具 举报
王勇 发表于 2014-5-20 14:49
你建立对象了,当然可以··············

嗯,是的,那就没问题了~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马