黑马程序员技术交流社区
标题:
static已解决
[打印本页]
作者:
余宏
时间:
2012-5-21 21:12
标题:
static已解决
本帖最后由 余宏 于 2012-5-21 21:47 编辑
import java.lang.reflect.Field;
public class Something {
public static void main(String[] args) {
Something s = new Something();
System.out.println("s.doSomething() returns " + doSomething());
}
public static String doSomething() {//这里为什么要用static修饰呢?为什么不加static就会报错呢?
return "Do something ...";
}
}
作者:
谭威
时间:
2012-5-21 21:21
System.out.println("s.doSomething() returns " +s. doSomething());
很明显你代码写少了。。像这样的错误最好多认真看下 你前面都写了 Something s = new Something(); 干嘛还这样呢System.out.println("s.doSomething() returns " + doSomething()); 下面又不是静态方法
兄弟 多练啦
作者:
云惟桉
时间:
2012-5-21 21:21
因为main函数是static的,所以静态方法只能调用静态方法
所以doSomething也必须是静态的。
想想内存中的结构和static有什么关系。
楼主都是20分的人了,应该看过视频了,该好好回顾一下了
作者:
谭威
时间:
2012-5-21 21:23
你的技术分为什么20了哇?
作者:
黄奕豪
时间:
2012-5-21 21:25
本帖最后由 黄奕豪 于 2012-5-21 21:36 编辑
class Something
{
public static void main(String[] args)
{
Something s = new Something();
/*报错是:无法从静态函数上下文中引用非静态方法,也就是说你的doSomething()函数是非静态的,无法直接在静态的main()函数中调用,正确的调用方法应该是s.doSomething(),非静态的方法要经过对象来引用*/
System.out.println("s.doSomething() returns " +
doSomething());//改为s.doSomething()
}
/*静态方法是随着类加载就加载到方法区的,无论你有没有对象,类一进去,静态方法就在方法内存区里了,这时就可以直接通过(类名.方法)来调用了,而非静态方法,也就是没加static修饰的方法是要在创建对象的时候才加载到方法区的!你的主函数是static的,程序一运行就加载到方法区,这时候根本就没有创建任何对象,也不可能存在非静态的方法,你就开始调用非静态的doSomething()方法了,这没有的东西怎么调用啊!是吧?所以这里报错了!!*/
public String doSomething()
{
return "Do something ...";
}
}
作者:
杨康
时间:
2012-5-21 21:28
静态函数只能调用静态的,你的一般方法不是静态的,不能调用。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2