|
||||||||||||||||
1 | ||||||||||||||||
Java FAQ: для тех кто знает (учил) С/С++13.03.2013, 11:27. Показов 41943. Ответов 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 Для тех кто знает рогалики Процедуры в С++ (для тех, кто знает и Pascal, и C++) |
|
|
13.03.2013, 14:52 [ТС] | 3 |
полноценный: это когда один exe и всё (ну и без всякой эмуляции и врапперов), тоесть полностью нативный код, например такой генерит компилятор gcj из состава gcc
теперь к рефлекшену - если у вас заюзано чёт типа AOP или DI, я уже не говорю про трюки с ASM, то всё приехали, нет ни одного способа превратить динамические вызовы рантайма в нативный аналог.
0
|
|
|||||||
01.07.2013, 00:07 [ТС] | 4 | ||||||
В общем после долгого серфинга в гугле и неудачных попыток нашлось таки решение. Опишу весь процесс создания (работоспособного) 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
|
136 / 67 / 27
Регистрация: 18.06.2014
Сообщений: 216
|
|
19.06.2014, 18:21 | 5 |
Зачем портить переносимость программ? Лучше компилировать нормально без всяких там exe и запускать обычной командой: java -jar program.jar.
0
|
0 / 3 / 0
Регистрация: 30.03.2019
Сообщений: 194
|
|
06.04.2019, 09:10 | 6 |
Без .exe файла, java какой-то неполноценный язык... Готовая программа, может иметь вид "прокладки", в то время как она вполне самостоятельная.
Спасибо конечно, но процесс похож на "танцы с бубном"
0
|
iSmokeJC
|
06.04.2019, 09:56
#7
|
0
|
0 / 3 / 0
Регистрация: 30.03.2019
Сообщений: 194
|
|
06.04.2019, 10:23 | 8 |
Зачем ограничивать функциональные возможности языка, если основная масса людей пользуется windows? java без экзешника, выполняет роль "утилиты" для программиста. Мне например нравится java (возможно потому что я понимаю этот язык), но вопрос развёртывания и запуска проекта - это просто кошмар какой-то...
0
|
19513 / 11053 / 2931
Регистрация: 21.10.2017
Сообщений: 23,301
|
|
06.04.2019, 12:41 | 9 |
Как показывает статистика, в настоящий момент основная масса людей пользуется Android.
С точностью до наоборот
1
|
0 / 3 / 0
Регистрация: 30.03.2019
Сообщений: 194
|
|
06.04.2019, 12:50 | 10 |
Пусть будет так. Но когда я столкнулся впервые с завершением проекта, для меня было всё запутанно и непонятно, как "открепить проект" от Eclipse и сделать привычный экзешник. Вопрос переносимости программы на первых этапах даже не возникает.
0
|
19513 / 11053 / 2931
Регистрация: 21.10.2017
Сообщений: 23,301
|
|
06.04.2019, 13:32 | 11 |
Сообщение от 1Vitaliy
0
|
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
|
|
06.04.2019, 14:38 | 12 |
1Vitaliy, екзешники кроме студентов никому не нужны. На джава почти не пишут десктопных аппликаций.
0
|
0 / 3 / 0
Регистрация: 30.03.2019
Сообщений: 194
|
|
06.04.2019, 15:04 | 13 |
В том то и проблема... Джава замечательно справляется с браузером (интернет), с windows окнами, каталогами и файлами. Имеет широкий спектр возможностей для автоматизации локальных процессов (сортировка, поиск и др.), тестирования ПО и т.д. Но отсутствие .exe и куча всяких "коннекторов" для развёртывания, препятствуют простому и свободному использованию. При этом java - это язык "среднего уровня", и писать программы на нём, могут научится даже не программисты по основной специальности.
0
|
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
|
|
06.04.2019, 16:06 | 14 |
1Vitaliy, Вы не находите противоречия? Java "классная" потому что кроссплатформленная и Java "не классная" потому что проявляется ее кросплатформленность?
1
|
0 / 3 / 0
Регистрация: 30.03.2019
Сообщений: 194
|
|
06.04.2019, 16:21 | 15 |
На сколько я знаю, "крутые программисты" используют java для написания серверов? - А я смотрю с точки зрения среднестатистического (возможно чуточку продвинутого) пользователя ПК.
Нет. Так как в том виде, в котором я её знаю, программы на java (кроме устройств на android), похожи на "полуфабрикат".
0
|
ViktorFX
|
06.04.2019, 17:29
#16
|
Не по теме: 1Vitaliy, Хорошо, тогда я буду руководствоваться вашей логикой. :)
0
|
iSmokeJC
|
||||||
06.04.2019, 17:46
Java FAQ: для тех кто знает (учил) С/С++
#17
|
||||||
0
|
06.04.2019, 17:46 | |
06.04.2019, 17:46 | |
Помогаю со студенческими работами здесь
17
Сравнения (для тех, кто идеально знает питон) для тех кто знает что такое МАН Сортировка вектора сложного класса (Просто для тех кто знает) Типа несложные задачи (особенно для тех, кто не изучал Java)! Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Списки в Haskell
hw_wired 28.01.2025
Haskell является функциональным языком программирования, который отличается лаконичностью синтаксиса и мощными абстракциями. Важным концептом в Haskell являются списки — упорядоченные коллекции. . .
|
Функции высшего порядка в Haskell
hw_wired 28.01.2025
Haskell – это современный функциональный язык программирования, который получил широкое распространение благодаря своей выразительности и мощным абстракциям. Одной из ключевых особенностей Haskell. . .
|
Как в цикле обойти все поля объекта в JavaScript
bytestream 28.01.2025
Объекты в JavaScript представляют собой фундаментальные структуры данных, которые позволяют хранить и организовывать связанную информацию в виде пар ключ-значение. Каждый объект можно представить как. . .
|
Как выбрать строки в DataFrame по значению столбца в Pandas
bytestream 28.01.2025
В области анализа данных библиотека Pandas стала незаменимым инструментом для работы с табличными данными в Python. Эта мощная библиотека предоставляет множество функций для эффективной обработки и. . .
|
Как сделать перенос строки в Bash
bytestream 28.01.2025
При работе с командной оболочкой Bash разработчики часто сталкиваются с необходимостью форматирования текстового вывода, где ключевую роль играет правильное управление переносами строк. Умение. . .
|
Поиск подстроки в строке с помощью Bash
bytestream 28.01.2025
Поиск подстроки в строке является одной из важных задач в программировании и обработке текстов. Применение такого поиска можно найти в самых разных областях, от анализа данных до разработки. . .
|
[golang] 169. Majority Element
alhaos 28.01.2025
Тут надо вернуть "мажористый" элемент который встречается в слайсе больше чем в половине случаев. По условиям задачи во входных данных такой элемент обязан присутствовать.
/ / . . .
|
Когда лучше использовать LinkedList вместо ArrayList в Java
bytestream 28.01.2025
При разработке Java-приложений выбор правильной структуры данных играет ключевую роль в обеспечении эффективности и производительности программы. ArrayList и LinkedList являются двумя. . .
|
Какой ответ HTTP лучше использовать: 403 Forbidden или 401 Unauthorized, когда недостаточно прав
bytestream 28.01.2025
В современной веб-разработке правильная обработка ошибок и точное информирование клиентов о статусе их запросов играют критическую роль в создании надежных и безопасных приложений. Особое внимание. . .
|
Как получить список всех файлов коммита в Git
bytestream 28.01.2025
Система контроля версий Git представляет собой мощный инструмент для управления изменениями в программном коде и других файлах проекта. В основе работы Git лежит концепция коммитов - снимков. . .
|
Как записать только часть изменений файла в Git
bytestream 28.01.2025
В процессе разработки программного обеспечения часто возникает необходимость сохранить только определенные изменения из множества внесенных правок в файлах. Система контроля версий Git предоставляет. . .
|
[golang] 80. Remove Duplicates from Sorted Array II
alhaos 28.01.2025
В предоставленном упорядоченном по возрастанию целочисленном слайсе, оставить уникальные элементы полюс один возможный дубликат. Вернуть количество таких элементов.
/ / . . .
|