В Java все находится в форме класса.
Если вы хотите использовать любой объект, тогда у вас есть две фазы:
Пример:
Object a;
a=new Object();
То же самое для концепции массива
Item i[]=new Item[5];
i[0]=new Item();
Если вы не дают секцию инициализации, тогда возникает NullpointerException
.
Это сообщение: Рекурсия или Повторение? мог бы помочь.
Короче говоря, оптимизацию последнего вызова трудно сделать в JVM из-за модели обеспечения безопасности и потребности всегда иметь отслеживание стека в наличии. Эти требования могли в теории поддерживаться, но она, вероятно, потребует нового байт-кода (см. неофициальное предложение John Rose).
существует также больше обсуждения в ошибка Sun № 4726340 , где оценка (с 2002) заканчивается:
я полагаю, что это могло быть сделано, тем не менее, но это не маленькая задача.
В настоящее время, существует некоторая работа, продолжающаяся в Машина Da Vinci проект. Состояние подпроекта последнего вызова перечислено как "первичные 80%"; это вряд ли превратит его в Java 7, но я думаю, что это имеет очень хороший шанс в Java 8.
Фундаментальное ограничение просто, что JVM не обеспечивает последние вызовы в своем коде байта и, следовательно, нет никакого прямого пути к языку, положился на JVM для обеспечения последних вызовов саму. Существуют обходные решения, которые могут достигнуть подобного эффекта (например, trampolining), но они прибывают в серьезную стоимость ужасной производительности и запутывания сгенерированного промежуточного кода, который делает отладчик бесполезным.
, Таким образом, JVM не может поддерживать языки функционального программирования производственного качества до последних вызовов реализации Sun в самой JVM. Они обсуждали его в течение многих лет, но я сомневаюсь, что они будут когда-либо реализовывать последние вызовы: это будет очень трудно, потому что они преждевременно оптимизировали свой VM прежде, чем реализовать такую основную функциональность, и усилие Sun сильно фокусируется на динамических языках, а не функциональных языках.
Следовательно существует очень веский довод, что Scala не является реальным языком функционального программирования: эти языки рассматривали последние вызовы как существенную особенность, так как Схема была сначала представлена более чем 30 лет назад.
В дополнение к бумаге, связанной в Лямбде Окончательное (из ссылки mmyers отправленный выше), у John Rose от Sun есть еще немного для высказывания об оптимизации последнего вызова.
http://blogs.oracle.com/jrose/entry/tail_calls_in_the_vm
я услышал, что это могло бы быть реализовано на JVM когда-нибудь. На поддержку последнего вызова среди других вещей смотрят на Машине Da Vinci.
Scala 2.7.x поддерживает оптимизацию хвостового вызова для саморекурсии (вызывающей себя функции) конечных методов и локальных функций.
Scala 2.8 может также поставляться с библиотечной поддержкой трамплина, который представляет собой метод оптимизации взаимно рекурсивных функций.
Большой объем информации о состоянии рекурсии Scala можно найти в блоге Рича Догерти .