黑马程序员技术交流社区

标题: 为什么编译报错? [打印本页]

作者: 王琳    时间: 2013-3-6 16:02
标题: 为什么编译报错?
本帖最后由 王琳 于 2013-3-6 19:34 编辑

public static void main(String[] args)
{
              int num = getNum();
              System.out.println(num);
}
public int getNum()
{
      int num = 1;
      return num++;
}        
开始用眼睛看的时候以为结果会是1,敲了一边代码后,一编译,报错了

为什么会报这个错?
如果说我放在另一个class里调是不是就行了?

作者: 张卫刚    时间: 2013-3-6 16:13
//静态成员只能访问静态的,main是静态方法,你的getNum()方法不是静态的,所以报错了
作者: 戴乾刚    时间: 2013-3-6 16:14
静态放法中不能调用非静态方法,将getSum方法定义成静态的
放在另一个类中,如果该方法没有定义成静态方法,则要先创建该类对象才能调用。
作者: 罗正荣    时间: 2013-3-6 16:19
  1. public static void main(String[] args)
  2. {            
  3.               int num = getNum();
  4.               System.out.println(num);
  5. }
  6. public static int getNum()//这里用static修饰
  7. {
  8.       int num = 1;
  9.       return num++;
  10. }        
复制代码
*************************************************************************

  1. class Demo
  2. {            
  3.            public static void main(String[] args)
  4.    {
  5.               Demo d = Demo();
  6.               int num = d.getNum();
  7.               System.out.println(num);
  8. }
  9. public int getNum()
  10. {
  11.       int num = 1;
  12.       return num++;
  13. }
  14. }  
复制代码
主函数是静态的 而你的getNum是非静态的,静态函数只能调用静态函数,你把getNum方法放在其他类中也是一样。非静态方法可以创建对象用对象调用。
作者: 牛合超    时间: 2013-3-6 16:46
是啊,static使用的时候是有限制的,总结一下,第一点,只能调用其它静态方法 ; 第二点,只能访问
静态数据,,第三点,不能使用关键字this和super,所以你的问题出现在第一点。




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