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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class Outer
{
int x = 3;
void method(final int a )
{
  final int  y = 4;
  class Inner
  {
   void function()
   {
    System.out.println( a);
   }
  }
  new Inner().function();
}
}
class  InnerClassDemo3
{
public static void main(String[] args)
{
  Outer out = new Outer();
  Outer.method(7);
  Outer.method(8);
}
}

以上java程序在编译时提示Outer.method(7);
  Outer.method(8);
两个引用非法,即不能从静态上下文引用非静态方法。
void method(final int a )
{
  final int  y = 4;
  class Inner
  {
   void function()
   {
    System.out.println( a);
   }
  }
  new Inner().function();
}
是不是在这个     void method(final int a )      的前面一定要加上static 修饰才可以编译成功?

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

7 个回复

倒序浏览
本帖最后由 贾联国 于 2012-5-2 14:25 编辑

这里必须用对象调用非静态方法,你已经建立的对象,就用
Outer out = new Outer();
   out.method(7);
   out.method(8);

看来是LZ手误

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
Outer.method(7); //这样写,表示method()应该是一个静态的方法,而代码中实际不是静态的,所以报非法引用错误
                 //另外,main是静态方法,要想在其中访问非静态方法,就必须创建其对象,然后使用"对象名.method()"来访问
解决方法:
使用: out.method(7); 或者 method()加static修饰

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
非静态方法不能被类名直接调用,如果要调用要创建Outer对象。把方法改成static,那就可以直接用类名调用

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
静态方法中不能调用非静态方法
非静态方法可以调用静态方法
回复 使用道具 举报
因为主函数main是静态的,所以如果要访问外部成员时,需要对象调用,楼主既然创建了对象直接用:
out.method(7);
out.method(8);
回复 使用道具 举报
你这段代码错误的原因在“Outer.method(7); Outer.method(8);”用类名.调用了非静态的方法,类名.只能调用静态的方法。所以把“Outer.method(7); Outer.method(8);”改成“out.method(7),out.method(8);”或者在 void method(final int a)前添加static都行。
回复 使用道具 举报
贾联国 发表于 2012-5-2 14:04
这里必须用对象调用非静态方法,你已经建立的对象,就用
Outer out = new Outer();
   out.method(7);

恩,是手误,开始找了好久没有找到问题所在,谢谢啦:handshake
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马