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();}}
The above two classes depend on each other's methods, resulting in an endless loop and eventually leading to memory overflow.
Lessons learned: Minimize the dependency between classes and achieve one-way dependency.