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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 余宏 中级黑马   /  2012-5-21 21:12  /  1680 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 余宏 于 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 ...";
}
}

点评

静态虽好但只能调用静态··main是静态  发表于 2012-5-22 01:09

5 个回复

倒序浏览
System.out.println("s.doSomething() returns " +s. doSomething());

很明显你代码写少了。。像这样的错误最好多认真看下  你前面都写了  Something s = new Something();  干嘛还这样呢System.out.println("s.doSomething() returns " + doSomething());  下面又不是静态方法

兄弟  多练啦
回复 使用道具 举报
因为main函数是static的,所以静态方法只能调用静态方法
所以doSomething也必须是静态的。
想想内存中的结构和static有什么关系。
楼主都是20分的人了,应该看过视频了,该好好回顾一下了

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 最后一句我赞同

查看全部评分

回复 使用道具 举报
你的技术分为什么20了哇?
回复 使用道具 举报
本帖最后由 黄奕豪 于 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 ...";
        }
}

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
静态函数只能调用静态的,你的一般方法不是静态的,不能调用。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马