黑马程序员技术交流社区
标题:
程序报错,如何从静态引用非静态
[打印本页]
作者:
丁亚芝
时间:
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)
下载附件
2013-2-22 16:08 上传
作者:
偏執旳、靑春
时间:
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
public class Move {
public static void main(String[] args) {
Move s = new Move();
System.out.println("s.doMove() returns " + doMove());
}
public static String doMove() { //[color=Red]这个方法用static修饰[/color]
return "Do Move ";
}
}
复制代码
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