本帖最后由 聂斌 于 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();
}
|