黑马程序员技术交流社区

标题: 这个调用怎么改啊 [打印本页]

作者: 小子考驾照    时间: 2014-8-23 12:12
标题: 这个调用怎么改啊
本帖最后由 小子考驾照 于 2014-8-23 12:13 编辑

class Test
{
        public static void main(String[] args)
        {
                System.out.println(m());
        }
        public String m()
        {
                System.out.printf("这个返回值可以么");//刚看到有人说这有返回值的,所以拿来用了0.0        }
               
}
下面是报错,刚开始接触调用,这样不对么??
*********************************************************
C:\Users\Zhenhua Xu\Desktop>javac Test.java
Test.java:5: 错误: 无法从静态上下文中引用非静态 方法 m()
                System.out.println(m());
                                   ^
1 个错误

C:\Users\Zhenhua Xu\Desktop>java Test


作者: 小子考驾照    时间: 2014-8-23 12:50
没人回答呀。。。。。我真的不会,不是水的,谁能解答下啊,昨天也碰到过好多次这样的情况了
作者: ☆枫の云    时间: 2014-8-23 12:57
public static String m(){return "测试"}
加个static就好了, 错误提示都说了,不能在静态上下文引入非静态了。
作者: icris    时间: 2014-8-23 13:01
  1.         public static PrintStream m() {
  2.                 return System.out.printf("这个返回值可以么");
  3.         }
复制代码

提示的报错是说,静态方法只能调用静态方法,要用非静态方法需要一个实例对象。解决:加上 static 变成静态方法。
还没提示的错误有,没有写 return 语句,printf 的返回值是 PrintStream 不是 String 。
作者: 小子考驾照    时间: 2014-8-23 13:14
icris 发表于 2014-8-23 13:01
提示的报错是说,静态方法只能调用静态方法,要用非静态方法需要一个实例对象。解决:加上 static 变成静 ...

那为啥if(System.out.printf("Hello")==null)可以这样写呢?疑惑
作者: 小子考驾照    时间: 2014-8-23 13:16
kakasa 发表于 2014-8-23 12:57
主函数是静态,静态只能访问静态,方法也要静态。你的方法定义了String 返回值,所以方法里一定要返回一个S ...

主函数不都是静态的么?都有static啊,那么它调用任何方法都要静态的么,疑惑疑惑呀0.0.0
作者: icris    时间: 2014-8-23 13:21
小子考驾照 发表于 2014-8-23 13:14
那为啥if(System.out.printf("Hello")==null)可以这样写呢?疑惑

它是 PrintStream 不是 String 跟它是不是 null 没有关系啊…
printf 最后的返回值是 this ,这里就是 System.out 这个东西,if(System.out.printf("Hello")==null) 相当于 if(System.out == null)
作者: 小子考驾照    时间: 2014-8-23 13:27
icris 发表于 2014-8-23 13:21
它是 PrintStream 不是 String 跟它是不是 null 没有关系啊…
printf 最后的返回值是 this ,这里就是 Sy ...

是不是打印的是Hello,不过返回值类型和打印的没有关系,是PrintStream的类型,是吧?
作者: c19t043    时间: 2014-8-23 20:35

public String m()
         {
                 System.out.printf("这个返回值可以么");//刚看到有人说这有返回值的,所以拿来用了0.0        }
                 

改几下, 就可以用了
public static String m(){
    System.out.println("这个返回值可以么");
    return  "这个返回值可以么";
}
就不报错了

作者: 丨懒蟲灬Nigh    时间: 2014-8-23 21:54
只有2L和10L改的正确。10L  System.out.println("这个返回值可以么");这个可以省略~
至于String这个我还真没看到 我帮String改成void是不行的  这2个区别你或者用法如果知道麻烦告知下。谢谢
作者: tei0513    时间: 2014-8-23 21:58
静态只能访问静态的
非静态的可以访问静态的
作者: 丨懒蟲灬Nigh    时间: 2014-8-23 22:16
class Test
{
         public static void main(String[] args)
        {
              m();
         }
         public  static String m()
         {
                 System.out.println("这个返回值可以么");//刚看到有人说这有返回值的,所以拿来用了0.0        }
                 
}
不用printf  貌似很少用到 你说的那个帖子地址可以发下嘛 我看你发的那个IF()用printf的 我写的时候是报错的~
作者: Huberry    时间: 2014-8-23 22:46
主函数是静态的,只能调用静态方法

你要是不想把m()方法改静态,那就在主函数内创建一个Test对象,由Test对象来调用

作者: sunny~    时间: 2014-8-23 23:27
。。。。。。。。。。。。。。。
作者: 舍我其谁    时间: 2014-8-24 00:12
楼主加油,




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