Рейтинг:
1
Eric Lynch
Потому что в строке 1 каждый раз, когда вы создаете экземпляр GetterSetter, вы создаете дополнительный GetterSetter, который (из-за строки 1) требует, чтобы вы создали дополнительный GetterSetter, который создает дополнительный GetterSetter, и так далее, и так далее on...ad бесконечность.
"Статические" строки отличаются друг от друга, потому что вы создаете только один экземпляр GetterSetter, который является общим для всех экземпляров.
Дополнительные сведения о различиях между статическими и нестатическими полями см. В разделе "статические и нестатические поля" по следующей ссылке:
http://tutorials.jenkov.com/java/fields.html
@k5hu
Сэр, но почему нет ошибки в строке 3?
Eric Lynch
Честно говоря, для линии 3 я удивлен, что вы не видите той же проблемы. Если он действительно создан и используется, я не вижу, почему "проверка" также не вызовет проблемы. Чтобы ответить на вопросы о разнице, мне нужно было бы увидеть как создание экземпляра, так и использование обоих классов.
Поскольку я не могу, я подозреваю, что, возможно, вы предполагаете сходство в создании экземпляра или утлизации, которого не существует. Если вы описываете все точно и полностью, разница в поведении между двумя почти идентичными классами имеет нулевой смысл. Единственное различие в объявлении-это различие в защите класса ("public" против default). Это не имело бы смысла в качестве объяснения разницы в поведении...без сопутствующей разницы в создании / использовании экземпляров.
@k5hu
ouptut:
Ява.яз.StackOverflowError
в ока.GetterSetter.<init>(GetterSetter.java:16)
в ока.GetterSetter.<init>(GetterSetter.java:16)
в ока.GetterSetter.<init>(GetterSetter.java:16)
в ока.GetterSetter.<init>(GetterSetter.java:16)
в ока.GetterSetter.<init>(GetterSetter.java:16)
в ока.GetterSetter.<init>(GetterSetter.java:16)
в ока.GetterSetter.<init>(GetterSetter.java:16)
в ока.GetterSetter.<init>(GetterSetter.java:16)
в ока.GetterSetter.<init>(GetterSetter.java:16)
.
.
.
упоминается только строка 16 которая здесь является строкой 1
но в этом :
образец класса {
Образец s = новый образец();//строка 1
статический образец sa = новый образец();
проверьте недействительным(образец с) {
Системы.из.код println(это.ы == ы);
}
}
общественного класса другим
{ О=новый();//строка 2
статический других ВЗ=новый другие();
публичный статический пустота главный(строка[] аргументы) {
нового образца().регистрация(нового образца().с);
}
}
выход:
та же ошибка в строке 2
и в этом:
образец публичного класса {
Образец s = новый образец();//строка 1
статический образец sa = новый образец();
проверьте недействительным(образец с) {
Системы.из.код println(это.ы == ы);
}
публичный статический пустота главный(строка[] аргументы) {
нового образца().регистрация(нового образца().с);
}
}
класс другой
{ Other o=new Other();//строка 2
статический других ВЗ=новый другие();
}
но вот выход :
та же ошибка в строке 1
наблюдая, я обнаружил, что это происходит только с публичными классами, но я не могу понять точную причину. Не могли бы вы помочь мне понять это, если это возможно?