• 类的相互依赖导致StackOverflowError


    public class SchoolServiceImpl {
    	private static SchoolServiceImpl instance = new SchoolServiceImpl();
    	private static ClassServiceImpl classServiceImpl = ClassServiceImpl.getInstanse();	
    	public static SchoolServiceImpl getInstanse() {
    		if (instance == null)
    			return instance = new SchoolServiceImpl();
    		return instance;
    	}
    
    	public int getSchoolCount() {		
    		return classServiceImpl.getClassesCount();
    	}
        
    	public static void main(String[] args) {
    		System.out.println(classServiceImpl.getClassesCount());
    	}
    }

    public class ClassServiceImpl {
    
    	/**
    	 * @param args
    	 */	
    	private static ClassServiceImpl instance = new ClassServiceImpl();
    	public static  ClassServiceImpl getInstanse() {
    	if (instance == null)
    			return instance = new ClassServiceImpl();
    		return instance;
    	}
    	private static SchoolServiceImpl schoolServiceImpl=SchoolServiceImpl.getInstanse();
    	
    	public int getClassesCount()
    	{   
    		System.out.println(classServiceImpl.toString());
    		return schoolServiceImpl.getSchoolCount();
    	}
    }

    如上两个类彼此依赖当中的方法。导致死循环,终于导致内存溢出。

    从中得到的教训:尽可能降低类的彼此依赖,做到单向依赖。

  • 相关阅读:
    css3 过渡
    2021.1.5 算法实训
    表单 form
    表格 table
    Windows系统重装记录
    多线程【基础】
    关于excuteQuery与execute()
    关于jsp的action如何调用servlet的自定义方法
    selenium
    验证码处理
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/6814120.html
Copyright © 2020-2023  润新知