请大家帮我解释一下一个JAVA程序

来源:百度知道 编辑:UC知道 时间:2024/05/12 00:59:09
class MyClass
{
static String myName = "SCJP";

MyClass getMyClass()
{
System.out.println(myName);
return null;
}

public static void main(String[ ] args)
{
System.out.println( new MyClass().getMyClass().myName );
}
}
运行结果为什么是输出两个SCJP?

//以下解释思路简单清晰明了~!
new MyClass().getMyClass()调用对方的方法
System.out.println(myName); 打印出"SCJP";
同时返回一个MyClass对象 但是对象是null,虽然对象是空,也就是打印空对象.myName,但是由于myName是个静态字符串,就算是对象值是null也可以调用 因此值还是"SCJP";

因为第一个SCJP System.out.println(myName); 因为打印的是第一个static String myName = "SCJP"; 所以是SCJP

第二个System.out.println( new MyClass().getMyClass().myName ); 因为调用了getMyClass()这个方法 这个方法正好是SCJP 所以打印2个

因为返回的类型为MyClass类型
MyClass中的myName类型是静态域
通过默认的this指针访问
而不是通过return语句返回的引用访问

main方法修改下:
public static void main(String[ ] args)
{
MyClass mc = null;
System.out.println(mc.myName);
System.out.println( new MyClass().getMyClass().myName );
}
运行下试试,然后自己思考下为什么吧

嗯,没错,是两个。getMyClass()方法里面输出一个,main里面又输出一个。

还补充下吧:
你最后一句打印语句的过程是:new一个类调用getClass(),因为方法里也有个打印“SCJP”的语句,所以这时就打印了第一个SCJP,然后这个方法还返回一个null类(也就是空引用),最后由这个空引用调用了你的类变量myName又打印出第二个。