黑马程序员技术交流社区

标题: 关于static代码,这个有没有错误? [打印本页]

作者: 李节起    时间: 2012-4-5 23:55
标题: 关于static代码,这个有没有错误?
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 ...";
    }
}
这个代码运行报错,为什么?
作者: 江远云    时间: 2012-4-6 00:02
主函数是静态,静态只能调用静态,doSomethint函数要加个static修饰
作者: 曾晓文    时间: 2012-4-6 00:36
调用本类方法时,静态方法不能调用非静态方法。你的代码在静态方法mian中调用了非静态方法 doSomething();
你既然已经new了Something对象,你可以通过Something对象来调用Something方法。如:System.out.println("s.doSomething() returns " + s.doSomething());
作者: 曾晓文    时间: 2012-4-6 00:37

调用本类方法时,静态方法不能调用非静态方法。你的代码在静态方法mian中调用了非静态方法 doSomething();
你既然已经new了Something对象,你可以通过Something对象来调用doSomething方法。如:System.out.println("s.doSomething() returns " + s.doSomething());
作者: 邓飞飞    时间: 2012-4-6 06:40
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 ...";
     }
}

作者: 郑苑东    时间: 2012-4-6 07:37
静态的只能引用静态的成员变量。方法。。非静态的才什么都可以引用。。。而主函数是静态的。,,你自己写的doSomething()方法时非静态的方法。。所以报错。。。。。。
作者: 曹魁    时间: 2012-4-6 08:09
本帖最后由 曹魁 于 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 ...";
    }
}
作者: 欧阳才志    时间: 2012-4-6 08:50
主函数是静态的,构造方法也应该是静态的,弟弟。毕老师第课程第三天讲函数的时候提到过。我是初学,不知道是为什么,但是知道这是规定。
作者: 程旦    时间: 2012-4-6 09:26
静态函数是不能调用非静态函数的,你的主函数是静态的  当然回报错了。。。。。你把   
public String doSomething() {
         return "Do something ...";
     }
改成静态的就行了
作者: newlaw2013    时间: 2012-4-6 10:50
毕老师名言:
      静态虽好,只能访问静态。
作者: 孙国军    时间: 2012-4-6 13:03
主函数是静态的,想要调用非静态的方法需要使用对象调用

即s.doSomething()调用

作者: 黑马老兵    时间: 2012-4-6 16:47
System.out.println("s.doSomething() returns " + doSomething());  这句话有问题啊。如果你要调用doSomething()这个方法 要么把它声明成静态的,要么用对象调用。

作者: 冯瀚冰    时间: 2012-4-6 16:55
在静态主函数中调用了非静态方法 doSomething()既然已经有了Something对象s,调用s.doSomething()就好了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2