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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李节起 中级黑马   /  2012-4-5 23:55  /  1897 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class Something {
     public static void main(String[] args) {
        Something s = new Something();
        System.out.println("s.doSomething() returns " + doSomething());
    }
    public String doSomething() {
        return "Do something ...";
    }
}
这个代码运行报错,为什么?

12 个回复

倒序浏览
主函数是静态,静态只能调用静态,doSomethint函数要加个static修饰
回复 使用道具 举报
调用本类方法时,静态方法不能调用非静态方法。你的代码在静态方法mian中调用了非静态方法 doSomething();
你既然已经new了Something对象,你可以通过Something对象来调用Something方法。如:System.out.println("s.doSomething() returns " + s.doSomething());
回复 使用道具 举报

调用本类方法时,静态方法不能调用非静态方法。你的代码在静态方法mian中调用了非静态方法 doSomething();
你既然已经new了Something对象,你可以通过Something对象来调用doSomething方法。如:System.out.println("s.doSomething() returns " + s.doSomething());
回复 使用道具 举报
public class Something {
      public static void main(String[] args) {
         Something s = new Something();
         System.out.println("s.doSomething() returns " + s.doSomething());//静态方法不可以调用非静态成员,
                                             你的代码在静态方法mian中调用了非静态方法 doSomething(),既然你已经创建的对象,则可以对象来调用
                                              doSomething方法     

     }
     public String doSomething() {
         return "Do something ...";
     }
}
回复 使用道具 举报
静态的只能引用静态的成员变量。方法。。非静态的才什么都可以引用。。。而主函数是静态的。,,你自己写的doSomething()方法时非静态的方法。。所以报错。。。。。。
回复 使用道具 举报
本帖最后由 曹魁 于 2012-4-6 08:33 编辑

静态函数是无法调用非静态函数的,
你的代码在静态方法mian中调用了非静态方法 doSomething(),
因此会出现提示错误:

无法从静态上下文中引用非静态方法
doSomething()
        System.out.println("s.doSomething() returns " + doSomething());
正确做法:
public class Something
        {
     public static void main(String[] args)
                    {
        Something s = new Something();
        System.out.println("s.doSomething() returns " + s.doSomething());   
                     }
    public String doSomething()
        {
        return "Do something ...";
    }
}
回复 使用道具 举报
主函数是静态的,构造方法也应该是静态的,弟弟。毕老师第课程第三天讲函数的时候提到过。我是初学,不知道是为什么,但是知道这是规定。
回复 使用道具 举报
静态函数是不能调用非静态函数的,你的主函数是静态的  当然回报错了。。。。。你把   
public String doSomething() {
         return "Do something ...";
     }
改成静态的就行了
回复 使用道具 举报
毕老师名言:
      静态虽好,只能访问静态。
回复 使用道具 举报
孙国军 来自手机 中级黑马 2012-4-6 13:03:20
11#
主函数是静态的,想要调用非静态的方法需要使用对象调用

即s.doSomething()调用
回复 使用道具 举报
System.out.println("s.doSomething() returns " + doSomething());  这句话有问题啊。如果你要调用doSomething()这个方法 要么把它声明成静态的,要么用对象调用。
回复 使用道具 举报
在静态主函数中调用了非静态方法 doSomething()既然已经有了Something对象s,调用s.doSomething()就好了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马