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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 丁亚芝 中级黑马   /  2013-2-22 16:09  /  1620 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 丁亚芝 于 2013-2-22 19:58 编辑

public class Move {
     public static void main(String[] args) {
        Move s = new Move();
        System.out.println("s.doMove() returns " + doMove());
           }
     public String doMove() {
        return "Do Move ";
    }
}

SJ_%RYG3I9]XM4P{VXV)KNH.jpg (15.36 KB, 下载次数: 40)

SJ_%RYG3I9]XM4P{VXV)KNH.jpg

点评

看提示解决问题么,说无法引用非静态方法,那你就把doMove()修饰成静态的么。。。  发表于 2013-2-22 16:22

5 个回复

倒序浏览
本帖最后由 偏執旳、靑春 于 2013-2-22 16:15 编辑

一种修饰符,修饰成员变量和成员函数

当变量和函数被static修饰后,可以用类名。成员直接调用

1.静态比对象先加载,就是不需要具体的实例对象就可以调用

                  2.静态变量被所有对象共享,当一个东西是固定不变的时候,可以定义成静态的

                   3.也就说静态先存在,那么静态不能调用后来才出现的非静态,但后来出现的非静态可以调用前面出现的静态

                  4.静态方法中不能出现this,因为this语句是用来引用对象的,而静态方法优于对象先存在
静态东西先出来,怎么能引用后面的东西。你的那个方法最好不要定义成静态的

再者你的代码明显有问题 do.move()你少写了一个点
回复 使用道具 举报
写错了 是s.doMove();
回复 使用道具 举报
  1. public class Move {
  2.      public static void main(String[] args) {
  3.         Move s = new Move();
  4.         System.out.println("s.doMove() returns " + doMove());
  5.            }
  6.      public static String doMove() {     //[color=Red]这个方法用static修饰[/color]
  7.         return "Do Move ";
  8.     }
  9. }
复制代码
main方法是静态方法,静态方法不能调用非静态成员

回复 使用道具 举报
谢谢楼上的解答,总结了下是两种解决方法,把doMove方法修饰成静态,或者 System.out.println("s.doMove() returns " + s.doMove());
哇,非常感谢呀
回复 使用道具 举报
在给你补充一个静态访问非静态的方式:通过反射
public static void main(String[] args) throws SecurityException, Exception {
               
                Test14 t = new Test14();
                Method showMethod = Test14.class.getMethod("show");
                System.out.println(showMethod.invoke(t));
        }
        public String show()
        {
        return "hello";
        }
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马