8 Haziran 2020 Pazartesi

StackOverflowError Sınıfı

Giriş
JVM tarafından fırlatılan error sınıflarından bir tanesidir.

Genellikle sonsuz döngüye giren recursive kodlar bu exception'ın fırlatılmasına sebep olur. Çıktı şuna benzer
 Exception in thread "main" java.lang.StackOverflowError
Örnek
Elimizde şöyle bir kod olsun. Bu kod StackOverflowError fırlatır.
public class StackOverflowErrorDemo {
  public static void main(String[] args) {
    javaKeeper();
  }
  private static void javaKeeper() {
    javaKeeper();
  }
}
Örnek
Elimizde şöyle bir kod olsun. Bu kod StackOverflowError fırlatır.
ArrayList<ArrayList> list = new ArrayList();
list.add(list);
list.hashCode();
Açıklaması şöyle.
For each element in the list, this calls hashCode. In your case list has itself as it's sole element. Now this call never ends. The method calls itself recursively and the recursion keeps winding until it encounters the StackOverflowError
Örnek
Elimizde şöyle bir kod olsun. Course sınıfının toString() metodunu çağırınca StackOverflowError alırız.
public record Course(String name, Student topper) {}
public record Student(String name, List<Course> enrolled) {}
Açıklaması şöyle.
Course#toString needs Student#toString and Student#toString needs Course#toString. So if you try to print Student then all enrolled Course will be printed along. Those Courses needs Student so they will print Student inside. This loop will continue till you get StackOverflow exception.

Hiç yorum yok:

Yorum Gönder