[Java] inner classes -- пара вопросов
а что за статик блоки?
Кстати, про нефинальные переменные было уже. Просто из стека в кучу копировать надо, в случае финальных получается, что как бы без разницы. Им просто это решение показалось логичнее, что будет вызывать меньше ошибок.
A class can have any number of static initialization blocks that appear anywhere in the class body. The runtime system guarantees that static initialization blocks and static initializers are called in the order (left to right, top to bottom) that they appear in the source code.
E.g.
class A {
static int a;
static {
a= 1;
System.out.println("a= "+a);
}
}
Потом ведь все статические дела вроде без проблем можно вынести во внешний класс.
В общем, я так и думал... Тоже не перестаю удивляться, что это нигде не разъяснено.
Что за свинство, заставлять программистов думать самих!
Потом ведь все статические дела вроде без проблем можно вынести во внешний класс.Пожалуй, если учесть, что во внутренних классах нельзя объявлять статические переменные...
забей на это,ни разу за год проганья на джаве не писал inner -классов, это излишки
1. final - это чтобы никто пальцем не трогал. В том числе не разрушал. Иначе как ты этой локальной переменной воспользуешься, если в качестве внутреннего класса выступает какой-нибудь Thread, который обращается к этой переменной уже после того, как эта переменная разрушилась? final говорит "скопируйте-ка мне её куда-нибудь, всё равно никто её менять не собирвается - она же final..."
2. В Java есть точная последовательность выполнения всяческих конструкторов и блоков static { }. Думаю, если позволить внутренним классам иметь блоки static { } (а их точно нет? это сделает эту последовательность слишком сложной. А зачем языку Java что-то слишком сложное? Для этого есть C++
1. нефинальные локальные переменные?Это с чего ты взял?
"8.1.2 Inner Classes and Enclosing Instances
An inner class is a nested class that is not explicitly or implicitly declared static. Inner classes may not declare static initializers (§8.7) or member interfaces. Inner classes may not declare static members, unless they are compile-time constant fields (§15.28).
...
Any local variable, formal method parameter or exception handler parameter used but not declared in an inner class must be declared final, and must be definitely assigned (§16) before the body of the inner class.
..."
Экземпляры классов делят static-элементы между собой. Между кем делить static-элементы внутренних классов? Между всеми экземплярами внутренних классов, сделанных одним внешним классом? Между всеми экземплярами внутренних классов, сделанных ВСЕМИ внешними классами? Так как у внутреннего класса всегда есть this внешнего, то более логичным является первый вариант, но это приуменьшает идею static. Чтобы не возиться со всем этим, решили такие static вообще запретить.
before the body of the inner classа теперь внимательно прочти еще раз
вопрос - локальные переменные кого?
ты вырезал кусок, который на самом деле относился к анонимным внутренним классам.
Да, я об этом тоже уже подумал.
какая хрен разница -- анонимные или нет?
Ну ты парень даешь! Ты еще скажи, без разницы - статический он или нет.
и всё же...
Оставить комментарий
psihodog
Почему в inner-классах нельзя использовать:1. нефинальные локальные переменные?
2. static-блоки?
PS Насчёт нефинальных переменных, кажется начинаю понимать, а вот с блоками-то что не так?