Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 Вопрос про статику и пчм получается StackOverflowError =)  [new]
Andrey53791
Member

Откуда:
Сообщений: 24
Привет ребята. Столкнулся с проблемой, не могу понять почему код выдаёт ошибку.
Есть 2 класса, Test и Test1, почему в 1 примере код работает, а во 2 выдаёт ошибку, после того как я убрал static в классе Test1.

А вот и ошибка, которую выдаёт ошибочный пример
Exception in thread "main" java.lang.StackOverflowError
at Test.<init>(Test.java:2)

Пример 1, правильный.
class Test{
static Test s = new Test();
Test() {
System.out.println("s");}}


public class Test1{
public static void main(String[] str) {
Test f = new Test();}}

Пример 2, ошибочный.
class Test{
Test s = new Test();
Test() {
System.out.println("s");}}



public class Test1{
public static void main(String[] str) {
Test f = new Test();}}
8 авг 19, 00:24    [21944248]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про статику и пчм получается StackOverflowError =)  [new]
Alexander A. Sak
Member

Откуда: Омск
Сообщений: 1028
Стек трейс же должен выдаваться. Там должно быть видно где ошибка происходит.

Подсказка: в какой момент выполняется
static Test s = new Test();
и
Test s = new Test();
?
8 авг 19, 08:04    [21944300]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про статику и пчм получается StackOverflowError =)  [new]
Tsyklop
Member

Откуда: Украина
Сообщений: 1018
Andrey53791, Все просто. static - один объект для всех созданных объектов. А если без статики то при каждом создании нового объекта класса Test будет создаваться еще объект класса Test, а в том еще один и т.д. А
8 авг 19, 10:17    [21944391]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про статику и пчм получается StackOverflowError =)  [new]
Andrey53791
Member

Откуда:
Сообщений: 24
Tsyklop, Добрый день. На самом деле не совсем понятно, почему выкидывает ошибку, ведь если будет создаваться еще 1 объект класса Test, то в чем проблема, это же грубо говоря будет как переменная или я не прав?
8 авг 19, 10:45    [21944431]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про статику и пчм получается StackOverflowError =)  [new]
Andrey53791
Member

Откуда:
Сообщений: 24
Alexander A. Sak, Добрый день.
Test s = new Test(); выполняется при создании объекта класса
static Test s = new Test(); выполняется при любом "использовании" класса.
Верно?
8 авг 19, 10:48    [21944433]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про статику и пчм получается StackOverflowError =)  [new]
Andrey53791
Member

Откуда:
Сообщений: 24
При создании экземпляра класса, объекты созданного экземпляра класса не наследуются, если они не статик, я пришёл только к этому выводу, скоординируйте пожалуйста..
8 авг 19, 11:57    [21944531]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про статику и пчм получается StackOverflowError =)  [new]
Dmitry.
Member

Откуда: Львів
Сообщений: 839
Andrey53791,

StackOverflowError - это значит ты забил всю память

тепер как ты это сделал:

без статика у тебя класс Test имеет переменную типа Test которая имеет свою переменную типа Test и эта цепочка объектов нигде не заканчивается и ограничена только памятью джава машины... от чего и происходит StackOverflowError.
8 авг 19, 12:15    [21944553]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про статику и пчм получается StackOverflowError =)  [new]
Tsyklop
Member

Откуда: Украина
Сообщений: 1018
Dmitry.
Andrey53791,

StackOverflowError - это значит ты забил всю память

тепер как ты это сделал:

без статика у тебя класс Test имеет переменную типа Test которая имеет свою переменную типа Test и эта цепочка объектов нигде не заканчивается и ограничена только памятью джава машины... от чего и происходит StackOverflowError.
8 авг 19, 12:27    [21944563]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про статику и пчм получается StackOverflowError =)  [new]
Tsyklop
Member

Откуда: Украина
Сообщений: 1018
Dmitry.
Andrey53791,

StackOverflowError - это значит ты забил всю память

тепер как ты это сделал:

без статика у тебя класс Test имеет переменную типа Test которая имеет свою переменную типа Test и эта цепочка объектов нигде не заканчивается и ограничена только памятью джава машины... от чего и происходит StackOverflowError.


StackOverflowError - значит что стек переполнен. В многопоточке, в каком-то потоке может переполниться стек, но это не приведет к крашу программы.

А за "переполнение" памяти отвечает OutOfMemoryError. Даже правильней сказать когда она заканчивается. И вот тут уже приложение упадет в любом случае.
8 авг 19, 12:29    [21944568]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про статику и пчм получается StackOverflowError =)  [new]
Andrey53791
Member

Откуда:
Сообщений: 24
Теперь я всё понял, спасибо большое, за уделенное время
8 авг 19, 18:49    [21945091]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить