初学JAVA,由“无法从静态上下文中引用非静态方法”引出的疑问

聆道 2012-10-10 01:12:19
我在主函数里调用公共类的其它函数(没用static修饰)时显示错误“无法从静态上下文中引用非静态方法”,但当我把方法放到另一个类中,创建对象再调用,却又没这样提示了,是不是说明“无法从静态上下文中引用非静态方法”这样的情况只是针对同一个类里面的?不在同一个类里面就不用考虑static的问题了?混乱了。。。。
...全文
4361 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
大数据新鸟 2012-10-11
  • 打赏
  • 举报
回复 1
如果你在本类中,先实例化该类,再用该类的对象来调用就不会出错。
halfsuccess 2012-10-10
  • 打赏
  • 举报
回复 1
只要记住这一点:
用statci修饰的成员是属于类的,在static的方法里可以用类名直接调用;
不用statci修饰的成员是属于具体实例对象的,需要用对象名调用,且在static的方法里不可以调用。
halfsuccess 2012-10-10
  • 打赏
  • 举报
回复
楼主,你好。因为静态方法的调用不是通过实例对象进行的,所以在静态方法中没有this指针,不能访问所属类的非静态变量和方法,只能访问方法体内的局部变量、自己的参数和静态变量。所以你在在static的主函数里调用非static的方法时肯定报错。所以你把方法放到另一个类,创建对象再调用,不会出错,因为你这个方法不是静态的,即不是属于类的,而是属于具体的一个实例对象的,用对象调用那当然不会错咯!
元心 2012-10-10
  • 打赏
  • 举报
回复
静态方法不需要该方法的类的实例即可,因此不能使用在静态方法中引用非静态方法。
sailor_bzh 2012-10-10
  • 打赏
  • 举报
回复
“无法从静态上下文中引用非静态方法”这个错误是为了避免,当你在静态方法里调用非静态方法时,非静态方法所属的类可能还有没有被实列化。因为要使用非静态方法,必须实例化它所属的类,而使用静态方法不需要去实例化它所属的类。这才是根本原因吧。跟在不在一个类里无关
nmyangym 2012-10-10
  • 打赏
  • 举报
回复
我就会笨办法记:
只要不是static修饰的方法,必须要通过对象进行引用。在非静态方法里,可能省略了(this)。在静态的方法里,看看有没有你这个方法所在类的对象。没有肯定报错。
liuwons 2012-10-10
  • 打赏
  • 举报
回复
这个。。。真的没什么好说的了
cs767976639 2012-10-10
  • 打赏
  • 举报
回复
项目启动时候先加载静态的东西,你静态的方法中要调用静态的,同一个类中没有实例化当然不行,你在不同类中
是实例化以后调用当然就不报错

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧