java新手,请教高手一个简单的问题,急盼解决。谢谢!

来源:百度知道 编辑:UC知道 时间:2024/06/07 14:47:26
class SelfCounter {
private static int count = 0;
private int id = count++;
public String toString() {
return "SelfCounter " + id;
}
}

class WithFinalFields {
final SelfCounter scf = new SelfCounter();
static final SelfCounter scsf =
new SelfCounter();
public String toString() {
return "scf = " + scf + "\nscsf = " + scsf;
}
}

public class E18_FinalFields {
public static void main(String args[]) {
System.out.println("First object:");
System.out.println(new WithFinalFields());
System.out.println("Second object:");
System.out.println(new WithFinalFields());
}
}
麻烦高手帮我分析下输出结果,详细更好!谢了...
结果是这样的:
First object:
scf = SelfCounter 1
scsf = SelfCounter 0
Second object:
scf = SelfCounter 2
scsf = SelfCounter 0
有点疑惑!

这还要怎么分析 ?
首先第一个类里头count是静态变量 属于类所有
id的意思是标记当前对象是定义的第几个对象...序列号而已

对于任何类 都有一个toString()方法..就是当当前对象的数据以字符串形式返回....然后程序中是重载了这个方法,返回结果很简单。 就是当前对象是定义的第几个对象

第二个类中..数据中定义了一个第一个类的对象常量..注意常量和静态变量别搞混了 常量是不允许改变的而已
如果你直接System.out.println(对象名) 这样写的时候
这句话实际是System.out.println(对象名.toString()) ;

理解了这个看下面的这段就简单了
public String toString()
{
return "scf = " + scf + "\nscsf = " + scsf;
}
下面这两句也是一样的 也是上面那种情况 自动调用toString()方法
这个方法是每个类本来就有的..你需要修改的时候就自己重载..
如果不重载 也可以直接用 ..不过输出来的字符串到底是什么形式就难说了
基本上是包含了所有的变量信息......
System.out.println(new WithFinalFields());
System.out.println(new WithFinalFields());

如果你不懂这个方法....
你可以随便输出一个Exception.toString()的结果 就会看到对象详细内容