![]() |
||||||||||||||||
Java FAQ: для тех кто знает (учил) С/С++13.03.2013, 11:27. Показов 42907. Ответов 16
1. Строки сравниваются не при помощи оператора == а при помощи метода equals
3. Нельзя перегрузить стандартные операторы 4. Нет деструкторов (для тех кому сильно хочется - по завершении использования объекта, явно присваивайте ему null, это гарантирует что у вас не будет утечки памяти и гарбаж коллектор удалит объект из памяти в одном из проходов) 4.1 нельзя форсировать сборку мусора как бы не хотелось5. Нет глобальных переменных 5.1 модификаторы static делает переменную глобальной в рамках класса, а final делает эту переменную константой6. Нет мультинаследования по классам, но есть по интерфейсам Кликните здесь для просмотра всего текста
6.1 В абстрактных тоже нет мультинаследования 7. Нельзя выскочить за границы массива, будет ArrayIndexOutOfBoundsException (HotSpot может эту проверку в рантайме удалить) 8. Если приложение не в фокусе, то не будут обрабатываться листенеры (аналог хука) с клавиатуры и мыши, в том числе когда приложение в виде иконки в трее (обход только через JNI) 9. Нельзя никак закрыть код от декомпиляции, можно затруднить обфускацией или шифровать/дешифровать нативными либками через JNI 10. Нет поддержки unsigned integer 11. byte это -128 .. 127, а не 0 .. 255 12. Символ десятичного разделителя в double и float на вводе с консоли или из потоков, зависит от локали (в русской и украинской это символ запятой, а не точки), в коде в явном виде всегда точка 13. Многомерный массив это массив ссылок на массивы, таким образом в случае с 2-мерным можно получить например треугольный массив, так как нет ограничения на размерность внутренних массивов. 14. Внутреннее представление String всегда в кодировке UTF-16, при работе с БД обычно требуется явное преобразование 15. JDK или JRE не требует установки как типичные программы и может быть копипастнуто в любое место, в таком случае для запуска ява программы требуется полный путь к исполняемому файлу JVM Кликните здесь для просмотра всего текста
например:
16. Нельзя сделать полностью нативный (без обёрток эмуляторов и JVM) exe или бинарный файл из java программы в случае если в коде использована одна из технологий основанная на Reflection или манипуляции с байткодом. Кликните здесь для просмотра всего текста
например: Spring DI, AOP или ASM, нет никакой возможности конвертировать такое поведение в нативный бинарник 17. На этапе компиляции технология Generics позволяет осуществлять контроль за типами, но в рантайме информация о типах стирается и всё превращается в Object. Варианты получить информацию о объекте в рантайме - аннотации. Кликните здесь для просмотра всего текста
18. В остальных вопросах поможет литература
19
|
13.03.2013, 11:27 | |
Ответы с готовыми решениями:
16
Для тех кто знает и паскаль и с++ Для тех, кто знает DBMS_SQL Для тех кто знает рогалики |
![]() ![]() |
|
13.03.2013, 14:21 | |
Интересно, можно поподробней про 16 пункт? Откуда информация, и почему такое ограничение? И еще, что подразумевается под полноценным exe?
0
|
![]() |
|
13.03.2013, 14:52 [ТС] | |
полноценный: это когда один exe и всё (ну и без всякой эмуляции и врапперов), тоесть полностью нативный код, например такой генерит компилятор gcj из состава gcc
теперь к рефлекшену - если у вас заюзано чёт типа AOP или DI, я уже не говорю про трюки с ASM, то всё приехали, нет ни одного способа превратить динамические вызовы рантайма в нативный аналог.
0
|
![]() |
|||||||
01.07.2013, 00:07 [ТС] | |||||||
В общем после долгого серфинга в гугле и неудачных попыток нашлось таки решение. Опишу весь процесс создания (работоспособного) exe файла. 1) Качаем прогу для создания exe launch4j - http://sourceforge.net/project... 1.0-beta1/ 2) Качаем прогу для создания иконки - http://archive.nbuv.gov.ua/libdoc/bmp2ico.rar 3) У вас должна быть готовая программа - файл с расширением .java или txt 4) Cоздайте папку на диске C. Должно получиться - C:\mypackage 5) Откройте вашу программу (файл с расширением .java или txt) и в самом вверху допишите: package mypackage; (если ваша программа состоит не из одного файла - package mypackage; пишем во ВСЕХ файлах) 6) На диске C создайте файл MANIFEST.MF (текстовый файл с измененным расширением - MF) 7) Внутри MANIFEST.MF напишите: Manifest-Version: 1.0 Created-By: 1.6.0_19 (Sun Microsystems Inc.) Main-Class: mypackage.MyProgram После последней строки(Main-Class: mypackage.MyProgram) оставьте одну пустую. MyProgram - название вашей программы - файл с расширением .java или txt. Расширение файла в манифесте указывать ненужно 8) Переместите вашу программу в папку mypackage 9) Пуск>Выполнить - cmd(если семерка то вбивайте cmd прямо в строку поиска) Шаги 10 11 12 пишем в командной строке 10) cd c:\mypackage 11) javac MyProgram.java 12) cd c:\ 13) Теперь в папке mypackage удалите все кроме MyProgram.class (будем создавать jar файл) Если ваша программа консольная то в командной строке напишите: 14) jar cvmf MANIFEST.MF prog.jar mypackage Если же программа оконная возможно вам понадобится вложить в jar необходимые библиотеки. Чтобы узнать какие именно выполните шаг 14, затем в консоли напишите java -jar prog.jar Получите ошибку что не найдены конкретные библиотеки. К примеру если вы использовали менеджер расположения компонентов swing miglayout, тогда будет нужно из архива miglayout15-swing.jar (если вы используете eclipse, архив находится в папке вашего проекта) выдрать папку net и положить ее на диск C и вместо шага 14 выполнить шаг 15 15) jar cvmf MANIFEST.MF prog.jar mypackage net 16) запускаем launch4j в поле output file указываем где создать и имя exe. 17) В поле jar выбираем созданный нами на диске C prog.jar 18) переходим во вкладку JRE в поле Min JRE Version пишем 1.6.0, в поле Max JRE Version пишем 1.7.0 19) нажимаем на шестеренку(build) сверху. В окне log получаем сообщение об успешном создании exe файла. Чтобы создать иконку, в фотошопе создайте холст размерами 32 на 32 или 48 на 48 Потом это изображение в painte сохраните в формате .bmp и в проге bmp2ico сохраните картинку в формате ico Чтобы приделать иконку к exe файлу в launch4j во вкладке basic в поле Icon: укажите на ваш файл .ico
11
|
0 / 3 / 0
Регистрация: 30.03.2019
Сообщений: 194
|
|
06.04.2019, 09:10 | |
Без .exe файла, java какой-то неполноценный язык... Готовая программа, может иметь вид "прокладки", в то время как она вполне самостоятельная.
Спасибо конечно, но процесс похож на "танцы с бубном" ![]()
0
|
0 / 3 / 0
Регистрация: 30.03.2019
Сообщений: 194
|
|
06.04.2019, 10:23 | |
Зачем ограничивать функциональные возможности языка, если основная масса людей пользуется windows? java без экзешника, выполняет роль "утилиты" для программиста. Мне например нравится java (возможно потому что я понимаю этот язык), но вопрос развёртывания и запуска проекта - это просто кошмар какой-то...
0
|
0 / 3 / 0
Регистрация: 30.03.2019
Сообщений: 194
|
|
06.04.2019, 12:50 | |
Пусть будет так. Но когда я столкнулся впервые с завершением проекта, для меня было всё запутанно и непонятно, как "открепить проект" от Eclipse и сделать привычный экзешник. Вопрос переносимости программы на первых этапах даже не возникает.
0
|
0 / 3 / 0
Регистрация: 30.03.2019
Сообщений: 194
|
|
06.04.2019, 15:04 | |
В том то и проблема... Джава замечательно справляется с браузером (интернет), с windows окнами, каталогами и файлами. Имеет широкий спектр возможностей для автоматизации локальных процессов (сортировка, поиск и др.), тестирования ПО и т.д. Но отсутствие .exe и куча всяких "коннекторов" для развёртывания, препятствуют простому и свободному использованию. При этом java - это язык "среднего уровня", и писать программы на нём, могут научится даже не программисты по основной специальности.
0
|
0 / 3 / 0
Регистрация: 30.03.2019
Сообщений: 194
|
|
06.04.2019, 16:21 | |
На сколько я знаю, "крутые программисты" используют java для написания серверов?
![]() Нет. Так как в том виде, в котором я её знаю, программы на java (кроме устройств на android), похожи на "полуфабрикат".
0
|
06.04.2019, 17:29 | |
Не по теме: 1Vitaliy, Хорошо, тогда я буду руководствоваться вашей логикой. :)
0
|
06.04.2019, 17:46 | |||||||
0
|
06.04.2019, 17:46 | ||||||
Помогаю со студенческими работами здесь
17
По известным результатам сравнения трех чисел расположить их в порядке возрастания для тех кто знает что такое МАН Сортировка вектора сложного класса (Просто для тех кто знает)
Искать еще темы с ответами Или воспользуйтесь поиском по форуму:
|
|
Новые блоги и статьи
![]() |
||||
Миграция монолита в Event-Driven микросервисную архитектуру на C#
stackOverflow 11.04.2025
Монолитная архитектура – классический подход к разработке программного обеспечения. Это приложение, построенное как единое целое, где все компоненты тесно связаны между собой. Большинство проектов. . .
|
Go в Kubernetes: Управление ресурсами
golander 11.04.2025
Разработчики Go-приложений в Kubernetes часто сталкиваются с неожиданными проблемами производительности и даже внезапными отказами контейнеров. Причина этого кроется в особенностях взаимодействия. . .
|
Агрегаты и сущности в DDD микросервисах
Javaican 10.04.2025
Разработка современных программных систем часто приводит на распутье: монолит или микросервисы? Даже при выборе микросервисной архитектуры многие команды сталкиваются с проблемой правильного. . .
|
Многопоточность в C#: Task и параллельное программирование
UnmanagedCoder 10.04.2025
Современные процессоры уже давно перестали наращивать тактовую частоту в пользу увеличения количества ядер. Это создало интересную ситуацию: разработчики, привыкшие к последовательному. . .
|
Линейное решение нелинейной задачи будет иметь приблизительный результат вычисления для метода обработки данных из double buffering.
Hrethgir 10.04.2025
Вообще изначально я пренебрёг квадратурой числа, но потом понял, что для вычисления приблизительного значения - сгодится, формулу можно будет корректировать по ходу. Это потому что прямое соотношение. . .
|
Переменные в Python
py-thonny 10.04.2025
Переменная в программировании — это символическое имя, связанное с областью памяти, в которой хранится значение. Она позволяет получать доступ к данным через понятные человеку идентификаторы, а не. . .
|
Многопоточность в C#: Task и асинхронные операции
UnmanagedCoder 10.04.2025
Многопоточность позволяет выполнять несколько операций одновременно, что важно для решения двух основных задач: повышения скорости выполнения вычислительно-сложных операций и сохранения отзывчивости. . .
|
Запуск контейнеров Docker на ARM64
Mr. Docker 09.04.2025
Появление таких решений, как Apple M1/ M2, AWS Graviton, Ampere Altra и Raspberry Pi, сделало использование ARM-систем обыденностью для многих разработчиков и DevOps-инженеров. При этом Docker,. . .
|
Vue SFC компонент на PHP с Fusion
Jason-Webb 09.04.2025
PHP на сервере и JavaScript на клиенте — классическое сочетание, которое, несмотря на свою эффективность, создает определенный когнитивный диссонанс при разработке. В этом контексте появляются. . .
|
TypeScript vs JavaScript: Отличия и когда что использовать
Reangularity 09.04.2025
JavaScript появился в 1995 году как творение Брендана Эйха и быстро стал основой интерактивности в вебе. За свою историю он прошел путь от простого языка для манипуляций с DOM до полноценной. . .
|