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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小子考驾照 中级黑马   /  2014-8-23 12:12  /  1437 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小子考驾照 于 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

15 个回复

倒序浏览
没人回答呀。。。。。我真的不会,不是水的,谁能解答下啊,昨天也碰到过好多次这样的情况了
回复 使用道具 举报
public static String m(){return "测试"}
加个static就好了, 错误提示都说了,不能在静态上下文引入非静态了。
回复 使用道具 举报
主函数是静态,静态只能访问静态,方法也要静态。你的方法定义了String 返回值,所以方法里一定要返回一个String 类型的值,要么把String 改成void
回复 使用道具 举报
  1.         public static PrintStream m() {
  2.                 return System.out.printf("这个返回值可以么");
  3.         }
复制代码

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

那为啥if(System.out.printf("Hello")==null)可以这样写呢?疑惑
回复 使用道具 举报
kakasa 发表于 2014-8-23 12:57
主函数是静态,静态只能访问静态,方法也要静态。你的方法定义了String 返回值,所以方法里一定要返回一个S ...

主函数不都是静态的么?都有static啊,那么它调用任何方法都要静态的么,疑惑疑惑呀0.0.0
回复 使用道具 举报
icris 中级黑马 2014-8-23 13:21:48
8#
小子考驾照 发表于 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)
回复 使用道具 举报
icris 发表于 2014-8-23 13:21
它是 PrintStream 不是 String 跟它是不是 null 没有关系啊…
printf 最后的返回值是 this ,这里就是 Sy ...

是不是打印的是Hello,不过返回值类型和打印的没有关系,是PrintStream的类型,是吧?
回复 使用道具 举报

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

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

你要是不想把m()方法改静态,那就在主函数内创建一个Test对象,由Test对象来调用
回复 使用道具 举报
。。。。。。。。。。。。。。。
回复 使用道具 举报
楼主加油,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马