1 | ||||||||||||||||
Java FAQ: для тех кто знает (учил) С/С++13.03.2013, 11:27. Просмотров 24633. Ответов 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. В остальных вопросах поможет литература
18
|
|
13.03.2013, 11:27 | |
Для тех кто знает и паскаль и с++ Для тех, кто знает DBMS_SQL Для тех кто знает рогалики
|
|
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
|
134 / 65 / 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
|
Супер-модератор
![]() ![]() 6309 / 3569 / 1378
Регистрация: 21.10.2017
Сообщений: 10,413
|
|
06.04.2019, 12:41 | 9 |
Как показывает статистика, в настоящий момент основная масса людей пользуется Android.
![]() С точностью до наоборот
1
|
0 / 3 / 0
Регистрация: 30.03.2019
Сообщений: 194
|
|
06.04.2019, 12:50 | 10 |
Пусть будет так. Но когда я столкнулся впервые с завершением проекта, для меня было всё запутанно и непонятно, как "открепить проект" от Eclipse и сделать привычный экзешник. Вопрос переносимости программы на первых этапах даже не возникает.
0
|
Супер-модератор
![]() ![]() 6309 / 3569 / 1378
Регистрация: 21.10.2017
Сообщений: 10,413
|
|
06.04.2019, 13:32 | 11 |
![]()
0
|
![]() 2355 / 2187 / 556
Регистрация: 28.12.2010
Сообщений: 8,561
|
|
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
|
524 / 260 / 69
Регистрация: 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 | |
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
|
06.04.2019, 17:46 |
Привет! Вот еще темы с ответами:
17
Сравнения (для тех, кто идеально знает питон) для тех кто знает что такое МАН Сортировка вектора сложного класса (Просто для тех кто знает)
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |