黑马程序员技术交流社区

标题: 程序报错,如何从静态引用非静态 [打印本页]

作者: 丁亚芝    时间: 2013-2-22 16:09
标题: 程序报错,如何从静态引用非静态
本帖最后由 丁亚芝 于 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, 下载次数: 48)

SJ_%RYG3I9]XM4P{VXV)KNH.jpg

作者: 偏執旳、靑春    时间: 2013-2-22 16:11
本帖最后由 偏執旳、靑春 于 2013-2-22 16:15 编辑

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

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

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

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

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

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

再者你的代码明显有问题 do.move()你少写了一个点
作者: 李桐    时间: 2013-2-22 16:13
写错了 是s.doMove();
作者: 贾文泽    时间: 2013-2-22 16:21
  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方法是静态方法,静态方法不能调用非静态成员


作者: 丁亚芝    时间: 2013-2-22 17:10
谢谢楼上的解答,总结了下是两种解决方法,把doMove方法修饰成静态,或者 System.out.println("s.doMove() returns " + s.doMove());
哇,非常感谢呀
作者: 胥文    时间: 2013-2-22 17:29
在给你补充一个静态访问非静态的方式:通过反射
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";
        }




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