黑马程序员技术交流社区

标题: 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