黑马程序员技术交流社区
标题:
static方法中的返回值问题
[打印本页]
作者:
王龙涛
时间:
2013-3-11 23:16
标题:
static方法中的返回值问题
class Staticshow
{
static double PI =3.14;
static int id;
public static void method1()
{
System.out.println(Staticshow.PI);
}
public void method2()
{
System.out.println(Staticshow.id);
Staticshow.method1();
}
public static method3()
{
method2();//静态方法无法访问非静态
return this;
}
public static void main(String[] args)
{
method3();
}
}
复制代码
上述代码编译提示 method3方法声明无效,需要返回值类型,return this不可以吗?为什么?
作者:
何旭程
时间:
2013-3-11 23:18
method3你根本就没有定义返回值类型啊,编译都不能通过~
作者:
边亮
时间:
2013-3-11 23:24
静态方法中可以有非静态方法 但是不能调用
作者:
爪哇攻城狮
时间:
2013-3-11 23:33
你没有定义返回值啊,
this是指当前对象。
不可以在静态方法中引用非静态方法.....
返回值,看需求,没有的话可以返回void,看需求是返回int ,string,..........
作者:
张卫刚
时间:
2013-3-11 23:37
class Staticshow
{
static double PI =3.14;
static int id;
public static void method1()
{
System.out.println(Staticshow.PI);
}
public static void method2() //3 ** 解决问题 2 所以这块加上static
{
System.out.println(Staticshow.id);
Staticshow.method1(); //2 **此方法调用静态方法?静态只能调用静态,所以看上面 3
}
public static Staticshow method3() //1 **首先这块你要加上返回值类型,按你的写法是要返回对象
{
method2();//静态方法无法访问非静态
return new Staticshow(); //静态变量只能访问静态啊,你返回的this,一来你没new对,二来返回没什么用,所以这样改
}
public static void main(String[] args)
{
method3();
}
}
作者:
曾钦
时间:
2013-3-11 23:37
本帖最后由 曾钦 于 2013-3-11 23:39 编辑
你return了一个this 所以必须声明返回值类型。
如果没有return 要声明返回值类型为void
方法的三要素。。方法名,参数,返回值。
你这样写的话,编译都通不过的。。
而且你return 的是this ,this 本身是一个对象,
返回值类型应该为Object 但是this 这个又通不过编译了。会报警告,cannot use this in a static context
在静态区域中不能用 this.
所以额,楼主,你还是想清楚。。你要干嘛先。。{:soso_e113:}
作者:
张宁
时间:
2013-3-11 23:40
你不仅没有返回值类型,而且你的静态方法里的return this,指的是返回 当前对象,你到底想返回什么?你是怎么想的,还有你的主方法里边的method3()直接这样调用对吗?
作者:
王龙涛
时间:
2013-3-12 00:15
张宁 发表于 2013-3-11 23:40
你不仅没有返回值类型,而且你的静态方法里的return this,指的是返回 当前对象,你到底想返回什么?你是怎 ...
谢谢!受教了,我想看下return this的结果,结果没看到,就提示没有返回值类型,我晕菜了,没写返回值类型!
作者:
聂斌
时间:
2013-3-12 02:35
本帖最后由 聂斌 于 2013-3-12 02:38 编辑
呵呵同学:你的代码有4处错误
public static method3() //(a)
{
method2();//静态方法无法访问非静态 //(b)
return this; //(c)
}
public static void main(String[] args)
{
method3(); //(d)
}
(a)处: method3()这里没有加上返回值类型,,,你可以写void
void:代表的是函数没有具体返回值的情况。函数里面是一定要写return语句的,当函数的返回值类型是void时,函数中的return语句可以省略不写。写上也不算错,,你不写的话系统会帮你加一个return,此时return后面是没有具体的值的,,,,return是用来结束函数用的
public static void method3()
{
method2();//静态方法无法访问非静态 //(b)报错
return this; //(c)报错
}
(b)处:静态方法只能访问静态成员,,,,因为你的method2()方法不是静态方法,,所以会报错的,,你可以把method2()加上static修饰
public static void method2()
{
System.out.println(Staticshow.id);
Staticshow.method1();
}
(c)处:静态方法中不可以定义this,super关键字。因为静态优先于对象存在。所以静态方法中不可以出现this。看下面代码
String name;//成员变量,实例变量。
static String country = "CN";//静态的成员变量,类变量。
public static void show()
{
System.out.println("::::"+this.name); //报错:因为this是代表对象,没有对象就没有任何代表,,,,,this这个引用他都没有被初始化过,他怎么能去调用内容
}
this: 代表本类的对象,到底代表哪一个呢?
this代表它所在函数所属对象的引用。
简单说:哪个对象在调用this所在的函数,this就代表哪个对象。也就是说哪个对象在调用相对应的函数,那么this就代表哪个对象,,也就是说这个函数在被哪个对象所调用,那么函 数里的this就代表那个对象,
this的应用:
当定义类中功能(函数)时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。因为你描述功能的时候,这个时候是还没有对象的,这个时候就用this来表示对象.谁后期调用我了我就代表谁..
return this; 因为你mian方法里面写了method3();方法,,,而这个method3()是静态的,所以这个method3()不需要创建对象就能被调用,,既然method3()不属于具体的哪个对象,,那么this就代表不了具体的对象,,,
解决办法:
return this; 去掉this,,直接写return或者不写return;
public static void method3()
{
method2();
return ; //这个return 可以省略不写
}
(d)处报错的原因很简单,,,因为(a)处的method3()报错了,,所以main方法调用了一个无法通过编译的method3()方法时自然也会报错
最终的代码:
static double PI =3.14;
static int id;
public static void method1()
{
System.out.println(Staticshow.PI);
}
public static void method2()
{
System.out.println(Staticshow.id);
Staticshow.method1();
}
public static void method3()
{
method2();
}
public static void main(String[] args)
{
method3();
}
作者:
amen0205
时间:
2013-3-12 04:16
楼上写的真详细
作者:
王亚飞
时间:
2013-3-12 10:09
public static method3()
{
method2();//静态方法无法访问非静态
return this;//return 必须有返回值才行,返回值是比如是int double但是你上面,public static method3 这行又没有说明是什么返回值,没有返回值就用void,也就不用写return,return this.这个应该是错误的写法吧,this的意思是指代当前对象,你没有对象所以用不到this
}
复制代码
作者:
马甲大王
时间:
2013-3-12 16:00
public static method3()
{
method2();//静态方法无法访问非静态
return this;
}
应该写成
public static StaticShow method3()
{
method2();//静态方法无法访问非静态
return this;
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2