天下之事,必先处之难,而后易之。

Java经典重现之方法重载导致java.lang.StackOverflowError异常

由于代码写的不够严谨,经常认为万无一失的地方却出现了重大问题,比如说简单的一个方法重载导致的栈溢出。这种问题已经看到好几次了,虽然代码不是自己写的,还是应该引起重视。

目录

定义接口和实现

错误日志


定义接口和实现

接口:

package com.boonya.stackerror;

public interface Geometry {
    
    /**
     * 工作
     */
    void doWork();

}

实现一:

package com.boonya.stackerror;

public class LineString implements Geometry{

	public void doWork() {
		// TODO Auto-generated method stub
		System.out.println("LineString do work.");
	}

}

实现二:

package com.boonya.stackerror;

public class Polygon implements Geometry{

	public void doWork() {
		// TODO Auto-generated method stub
		System.out.println("Ploygon do work.");
	}

}

 服务方法多重载:

package com.boonya.stackerror;

public class GeometryService {
	
	/**
	 * 栈溢出方法
	 * 
	 * @param geometry
	 * @param polygon
	 */
	public static void  check(LineString geometry,Polygon polygon){
		check(geometry, polygon);
	}
	
	/**
	 * 目标方法
	 * @param geometry
	 * @param geometry2
	 */
    public static void  check(Geometry geometry,Geometry geometry2){
    	geometry.doWork();
    	geometry2.doWork();
	}

}
package com.boonya.stackerror;

public class GeometryService {
	
	/**
	 * 栈溢出方法
	 * 
	 * @param geometry
	 * @param polygon
	 */
	public static void  doWork(LineString geometry,Polygon polygon){
		doWork(geometry, polygon);
	}
	
	/**
	 * 目标方法
	 * @param geometry
	 * @param geometry2
	 */
    public static void  doWork(Geometry geometry,Geometry geometry2){
    	geometry.doWork();
    	geometry2.doWork();
	}

}

 

测试类:

package com.boonya.stackerror;

public class StackErrorTest {

	public static void main(String[] args) {
		LineString lineString = new LineString();
		Polygon polygon = new Polygon();
		GeometryService.check(lineString, polygon);

	}

}
package com.boonya.stackerror;

public class StackErrorTest {

	public static void main(String[] args) {
		LineString lineString = new LineString();
		Polygon polygon = new Polygon();
		GeometryService.doWork(lineString, polygon);

	}

}

 

错误日志

栈溢出的日志会一直打印下去,直到程序被关闭:

Exception in thread "main" java.lang.StackOverflowError
	at com.boonya.stackerror.GeometryService.check(GeometryService.java:12)
	at com.boonya.stackerror.GeometryService.check(GeometryService.java:12)
	at com.boonya.stackerror.GeometryService.check(GeometryService.java:12)
	at com.boonya.stackerror.GeometryService.check(GeometryService.java:12)
	at com.boonya.stackerror.GeometryService.check(GeometryService.java:12)
	at com.boonya.stackerror.GeometryService.check(GeometryService.java:12)
	at com.boonya.stackerror.GeometryService.check(GeometryService.java:12)
	at com.boonya.stackerror.GeometryService.check(GeometryService.java:12)
Exception in thread "main" java.lang.StackOverflowError
	at com.boonya.stackerror.GeometryService.doWork(GeometryService.java:12)
	at com.boonya.stackerror.GeometryService.doWork(GeometryService.java:12)
	at com.boonya.stackerror.GeometryService.doWork(GeometryService.java:12)
	at com.boonya.stackerror.GeometryService.doWork(GeometryService.java:12)
	at com.boonya.stackerror.GeometryService.doWork(GeometryService.java:12)
	at com.boonya.stackerror.GeometryService.doWork(GeometryService.java:12)
	at com.boonya.stackerror.GeometryService.doWork(GeometryService.java:12)
	at com.boonya.stackerror.GeometryService.doWork(GeometryService.java:12)
	at com.boonya.stackerror.GeometryService.doWork(GeometryService.java:12)
	at com.boonya.stackerror.GeometryService.doWork(GeometryService.java:12)

 

这样我们就重现了一个栈溢出的情形。

posted @ 2024-08-28 22:15  boonya  阅读(14)  评论(0)    收藏  举报  来源
我有佳人隔窗而居,今有伊人明月之畔。
轻歌柔情冰壶之浣,涓涓清流梦入云端。
美人如娇温雅悠婉,目遇赏阅适而自欣。
百草层叠疏而有致,此情此思怀彼佳人。
念所思之唯心叩之,踽踽彳亍寤寐思之。
行云如风逝而复归,佳人一去莫知可回?
深闺冷瘦独自徘徊,处处明灯影还如只。
推窗见月疑是归人,阑珊灯火托手思忖。
庐居闲客而好品茗,斟茶徐徐漫漫生烟。

我有佳人在水之畔,瓮载渔舟浣纱归还。
明月相照月色还低,浅近芦苇深深如钿。
庐山秋月如美人衣,画堂春阁香气靡靡。
秋意幽笃残粉摇曳,轻轻如诉画中蝴蝶。
泾水潺潺取尔浇园,暮色黄昏如沐佳人。
青丝撩弄长裙翩翩,彩蝶飞舞执子手腕。
香带丝缕缓缓在肩,柔美体肤寸寸爱怜。
如水之殇美玉成欢,我有佳人清新如兰。
伊人在水我在一边,远远相望不可亵玩。