LINUX.ORG.RU

java :(

 


0

2
class nekulturno{
	static{
		System.out.println("Как то это печально");
//.100 страниц кода
	}
	public static void main(String[] main){
		System.out.println("\nБезимяные кодовые вставки\n");
	}
}

Нельзя чисто императивщину ,

но можно static {}блок в произвольном пустом классе :(

энтропия

Перемещено mono из talks

★★☆

Ответ на: комментарий от Legioner

энтропия победила.

а как всё ООП-благообразно начиналось

только классы , только методы, только поля, только ООП-хардкор.

qulinxao ★★☆
() автор топика

со времен, когда IoC еще не «изобрели» :)

stevejobs ★★★★☆
()
Ответ на: комментарий от qulinxao

Ну вообще это все сахарочек, ничего нового тут не вводится.

Legioner ★★★★★
()

Здравствуй дорогой блевничок.

hizel ★★★★★
()
Ответ на: комментарий от qulinxao

а еще по стандарту порядок выполнения кода в конструкторе не гарантируется. Т.е. в конструкторах нельзя присваивать ничего большего, чем скопировать параметры конструктора в поля класса. А теперь смотрим на код популярных проектов, и там...

stevejobs ★★★★☆
()

дык java не чистый ООП язык. а вы чего хотели?

BattleCoder ★★★★★
()
Ответ на: комментарий от qulinxao

только классы , только методы, только поля, только ООП-хардкор.

Классы int,char,double,... смотрят на Вас с удивлением.

svu ★★★★★
()
Ответ на: комментарий от morse

Врапперы имеют другие имена, не только первую большую букву.

svu ★★★★★
()
Ответ на: комментарий от stevejobs

а еще по стандарту порядок выполнения кода в конструкторе не гарантируется.

Что ты имеешь в виду? Строки выполняются в случайном порядке?

Legioner ★★★★★
()
Ответ на: комментарий от stevejobs

по стандарту порядок выполнения кода в конструкторе не гарантируется.

эээ, простите? Нельзя ли ссылочку на источник этого бреда?

arkhnchul ★★★
()
Ответ на: комментарий от kovrik

всё в порядке/нормально .

антропологически интересно когда и в какой версии джава

компилятор начнёт допускать

прямое

System.out.println(«Hello world») - как полное содержимое файло с автоматическим оборачиванием кода верхнего уровня в анонимный класс с пустым майном - ну а этот бывший верхнеуровневый код в безимяном {}блоке

энтропия виживание языка/платформы

qulinxao ★★☆
() автор топика

Как насчет не писать то, что не нравится?

vertexua ★★★★★
()
Ответ на: комментарий от Deleted

Статический конструктор полезен для нетривиальной инициализации статических полей. inline конструктор я использовал и видел использование только в библиотеках для забавного синтаксиса вроде new Something() {{ ...; ...; }}.

Legioner ★★★★★
()
Ответ на: комментарий от arkhnchul

Java Memory Model. Но да, «ученный изнасиловал журналиста».

По настоящему, не только в конструкторах, если написать

a=5;
b=7;

в одном потоке, а переменные видит другой поток, то с его точки зрения может оказаться что b=7, но a еще не равно 5

vertexua ★★★★★
()
Ответ на: комментарий от Legioner

Увидел это в одном проекте, испытал попоболь, хотел поубивать. Ведь тогда у нас получается класс-наследник, и некоторые фреймворки (JAX-RS) могут потом не видеть аннотации

vertexua ★★★★★
()

Нельзя чисто императивщину

лолчто?

но можно static {}блок в произвольном пустом классе :(

Ага, торт еще в том, что он не факт что выполнится, только когда класс загрузят

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

При чем тут вообще потоки, не совсем понятно. При работе с потоками надо использовать многопоточные паттерны и/или примитивы синхронизации, но это не значит, что в джаве есть какие-то проблемы.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

Ну да, именно. И JMM подробно описывает все возможные поведения. А некоторые наслушаются историй и потом набегают на форумы «чертовщина с переменными, СТРАШНО ЖИТЬ!!!11»

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

Увидел это в одном проекте, испытал попоболь, хотел поубивать.

Ведь тогда у нас получается класс-наследник, и некоторые фреймворки (JAX-RS) могут потом не видеть аннотации

Ну с умом надо применять.

Еще помню такой вариант:

Map<String, Integer> m = new HashMap<String, Integer>() {{
    put("1", 1);
    put("2", 2);
}};

Или можно сеттерами инициализировать произвольный объект. Но, конечно, техника спорная, плодить классы на пустом месте ради сиюминутного удобства вероятно не стоит.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

Guava:

new ImmutableMap.Builder<String, Integer>()
           .put("one", 1)
           .put("two", 2)
           .put("three", 3)
           .build();
vertexua ★★★★★
()
Последнее исправление: vertexua (всего исправлений: 1)
Ответ на: комментарий от qulinxao

энтропия победила.

а как всё ООП-благообразно начиналось

Чем больше вкуриваю ООП с джавой, тем сильнее люблю родную сишечку. Только графический интерфейс на сях не напишешь, нет(

Deleted
()
Ответ на: комментарий от Deleted

Только графический интерфейс на сях не напишешь, нет(

Только на нём и пишу по большей степени. На сишном gtk+ это кстати намного проще и удобнее делается, чем на ооп. Просто по-другому, переучиватсья надо.

auto12884839
()
Ответ на: комментарий от auto12884839

На сишном gtk+ это кстати намного проще и удобнее делается, чем на ооп. Просто по-другому, переучиватсья надо.

просто_в_гткшном_ооп_методы_снаружи_и_подчеркиваний_больше

Если серьезно - имхо, принятые в основных явовских гуях подходы к к mvc (swing-овские (гусары, молчать!) AbstractTableModel и прочие *Model, несколько в меньшей степени JFace-овые *Content/LabelProvider-ы) куда приятнее большинства остальных.

arkhnchul ★★★
()
Ответ на: комментарий от stevejobs

Выдумываешь. Последовательность выполнения строго определена: если будут несколько блоков {} или static {} - будут выполняться по мере объявления в теле класса. Всё это гуглится на раз.

roy ★★★★★
()
Ответ на: комментарий от roy

мне так мнится, что господин просто не понял, о чем жеж говорится в Java Memory Model. И/или решил потроллить.

arkhnchul ★★★
()
Ответ на: комментарий от stevejobs

и опять: не будете ли так добры ткнуть присутствующих носиком в лужицу документации?

arkhnchul ★★★
()
Ответ на: комментарий от arkhnchul

у конпелятора и jvm нет ограничений на реордеринг в конструкторе согласно стандарту. Все текущие реализации под x86/x86_64, выполняют конструктор последовательно, но это не нечто такое, что где-то специально описано в стандарте. Т.е. кто-то может написать такую реализацию javac/jvm, в которой в конструторе начнется чертовщина, и он все еще будет соответствовать стандарту. И на машине со 128 процессорами и параллельным кодом мы точно это заметим Например, вызов new - это allocation + initialization + pointer assignment, и initialization/pointer assignment могу быть reordered, и с точки зрения внешнего треда это может выглядеть как угодно. Это древний срач на тему, что важнее - стандарт или референсная реализация, и можно ли писать код исходя из характеристик референсной реализации. Я сейчас не кастану пруфов, погугли сам. Лично я поборник стандарта, и в конструкторах не делаю вообще ничего кроме quick field initialization, и сразу после вызова конструктора зову initInstance(), в котором уже есть вычисления, как когда-то было принято в крестах на шиндовсе.

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

Т.е. конструктор зовется в первом треде, потом this передается во второй тред до завершения работы конструктора (потому что после конструктора 100% будет барьер и все изменения все увидят) и второй тред видит хз как сконструированный объект? Я даже не могу себе представить ситуацию, где на такое можно напороться.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

утекший зис - это клиника, чтобы отвязаться от желания того оратора получить пруфы )) (кстати, очень частая ситуация ирл). В срачах на эту тему приводились какие-то примеры, когда менялся результат вычислений, производимых даже внутри конструктора. Конечно, не на референсной реализации, а на специальной умозрительной )) Честно, я не помню, в чем там цимес, просто запомнил, что надо или полностью отказаться от вычислений в конструкторах, или писать перед всем что движется файнал. Интересно, по каким кейвордам нагуглить эти обсуждения...

зис и ирл русскими буквами, ибо у мну сейчас шиндовс 8 и в ней внезапно сломалась переключалка клавиатуры. На переключалке написано «англ.», а в хромиуме печатает русские буквы. Черт.

stevejobs ★★★★☆
()
Ответ на: комментарий от Deleted

Проще, чем на swing'е? Да я бы не сказал. Мучаю один проект, начинал его на гтк, закопался.

Дело привычки. Мне со swing нисколько не легче было, когда приходилось с ним заниматься, чем тебе с gtk+.

auto12884839
()
Ответ на: комментарий от stevejobs

у конпелятора и jvm нет ограничений на реордеринг в конструкторе согласно стандарту.

тащемта есть. «in a single-threaded program, the program should not be able to observe the effects of reorderings», а для нескольких тредов - в Memory Model описано требуемое поведение.

arkhnchul ★★★
()
Ответ на: комментарий от vertexua

Молодец. Умею гтк, но счас это не очень подходит. А вот ООП умею хуже. Под мою текущую задачку рисовать лицо в гтк слегка мазохистично.

Deleted
()
Ответ на: комментарий от auto12884839

Может ты и прав. Заказчик нервничает, вызывает шараханья.

Deleted
()
Ответ на: комментарий от stevejobs

Ты всё перепутал. Вообще, reordering может быть не только в конструкторе, но и в любом методе - так что, теперь во всех методах только «quick field initialization» делать? К тому же, ты правильно заметил, что результат этого reordering-а будет виден только со стороны другого потока. И чтобы всё было хорошо - используй правильную синхронизацию.

roy ★★★★★
()
Ответ на: комментарий от roy

теперь во всех методах только «quick field initialization» делать?

там где нужен immutable. Т.е. везде.

хотя, наверное, ты прав. Я придираюсь, нужно просто использовать эрланг -)

stevejobs ★★★★☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.