防止override toString方法時(shí)產(chǎn)生遞歸
在Java中任何對(duì)象都繼承于Object類(lèi),因此,每個(gè)類(lèi)都有一個(gè)toString方法用于返回當(dāng)前對(duì)象的字符串形式(可能是對(duì)象地址或其他和對(duì)象相關(guān)的信息)。在每個(gè)類(lèi)中也可以覆蓋toString方法以返回自定義的字符串。如下面的代碼將以一定的格式返回對(duì)象的地址:
- package string;
- public class InfiniteRecursion
- {
- public String toString()
- {
- return "address:" + this;
- }
- public static void main(String[] args)
- {
- System.out.println(new InfiniteRecursion().toString());
- }
- }
如果運(yùn)行上面的程序,將拋出StackOverflowError異常,這說(shuō)明程序的工作棧溢出了。導(dǎo)致這種情況最常見(jiàn)的錯(cuò)誤就是無(wú)限遞歸。這們發(fā)現(xiàn)在toString中使用this來(lái)返回對(duì)象的地址,如果這樣調(diào)用,將會(huì)無(wú)限調(diào)用InfiniteRecursion類(lèi)的toString方法。如果要避免這種情況的出現(xiàn),要將toString改成如下的形式:
- public String toString()
- {
- return "address:" + super.toString();
- }
也就是說(shuō),不能再調(diào)用當(dāng)前類(lèi)的toString方法,必須調(diào)用當(dāng)前類(lèi)父類(lèi)的toString方法才能返回正確的結(jié)果。
【編輯推薦】