如何防止覆盖(override)toString方法时产生递归调用
2008-05-07 16:07
337 查看
在Java中任何对象都继承于Object类,因此,每个类都有一个toString方法用于返回当前对象的字符串形式(可能是对象地址或其他和对象相关的信息)。在每个类中也可以覆盖toString方法以返回自定义的字符串。如下面的代码将以一定的格式返回对象的地址:
package string;
public class InfiniteRecursion
{
public String toString()
{
return "address:" + this;
}
public static void main(String[] args)
{
System.out.println(new InfiniteRecursion().toString());
}
}
[align=left]如果运行上面的程序,将抛出StackOverflowError异常,这说明程序的工作栈溢出了。导致这种情况最常见的错误就是无限递归。这们发现在toString中使用this来返回对象的地址,如果这样调用,将会无限调用InfiniteRecursion类的toString方法。如果要避免这种情况的出现,要将toString改成如下的形式:[/align]
public String toString()
{
return "address:" + super.toString();
}
也就是说,不能再调用当前类的toString方法,必须调用当前类父类的toString方法才能返回正确的结果。
package string;
public class InfiniteRecursion
{
public String toString()
{
return "address:" + this;
}
public static void main(String[] args)
{
System.out.println(new InfiniteRecursion().toString());
}
}
[align=left]如果运行上面的程序,将抛出StackOverflowError异常,这说明程序的工作栈溢出了。导致这种情况最常见的错误就是无限递归。这们发现在toString中使用this来返回对象的地址,如果这样调用,将会无限调用InfiniteRecursion类的toString方法。如果要避免这种情况的出现,要将toString改成如下的形式:[/align]
public String toString()
{
return "address:" + super.toString();
}
也就是说,不能再调用当前类的toString方法,必须调用当前类父类的toString方法才能返回正确的结果。
相关文章推荐
- 如何防止覆盖(override)toString方法时产生递归调用
- 如何防止覆盖(override)toString方法时产生递归调用
- 如何防止重载toString方法时产生递归调用
- 在toString()方法中不要单独使用this关键字,否则会产生递归调用
- Java中的syso方法是如何调用toString()方法的
- toString方法导致的递归调用
- 如何防止私有方法被反射调用?
- JS中子类中如何调用父类的同名方法(继承时候,父类的同名方法被覆盖了)
- 子类如何调用被子类override了的方法?
- java 打印对象时时如何调用对象toString()方法的
- 如何覆盖Object类中的equals(),hashCode(),toString()方法
- iOS 如何防止多次调用didUpdateLocations方法
- 求教!内部类方法与外部类方法同名,是覆盖吗?内部类对象如何调用这个同名的外部类方法?
- Number调用toString()方法产生的问题
- Android的Webview中,javascript如何调用java方法
- 如何调用用户控件(UserControl)的方法 .
- 在JavaScript里防止事件函数高频触发和高频调用的方法
- 如何自动在Eclipse里对指定类或接口生成要覆盖的方法?
- 防止sql注入方法 如何防止java中将MySQL的数据库验证密码加上 ' or '1'= '1 就可以出现万能密码 的PreparedStatement
- 关于自动调用toString方法