Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18

Java FAQ: для тех кто знает (учил) С/С++

13.03.2013, 11:27. Показов 46798. Ответов 16

Студворк — интернет-сервис помощи студентам
1. Строки сравниваются не при помощи оператора == а при помощи метода equals
("a" == "a") == true
Java
1
"a".equals("a") == true
2. В методы всё передаётся по значению, а не по ссылке, поэтому нельзя изменить значение иммутабельных объектов и примитивов, НО так как значение обьектов это ссылка на его адрес в памяти, то можно менять состояние мутабельного объекта изнутри метода (присвоить новый мутабельный объект нельзя, как может показаться на первый взгляд)

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
Кликните здесь для просмотра всего текста
например:
Bash
1
 c:\неизвестно_где\jre1.6\bin\java HeloWord


16. Нельзя сделать полностью нативный (без обёрток эмуляторов и JVM) exe или бинарный файл из java программы в случае если в коде использована одна из технологий основанная на Reflection или манипуляции с байткодом.
Кликните здесь для просмотра всего текста
например: Spring DI, AOP или ASM, нет никакой возможности конвертировать такое поведение в нативный бинарник


17. На этапе компиляции технология Generics позволяет осуществлять контроль за типами, но в рантайме информация о типах стирается и всё превращается в Object. Варианты получить информацию о объекте в рантайме - аннотации.
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
import java.lang.annotation.*;
@Target(value=ElementType.FIELD)
@Retention(value= RetentionPolicy.RUNTIME)
public @interface Name {
     String name();
     String type() default  “string”;
}


18. В остальных вопросах поможет литература
19
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.03.2013, 11:27
Ответы с готовыми решениями:

Для тех кто знает и паскаль и с++
у меня есть программа на с, нужно её на паскаль переписать, просто с этим языком я мало знаком, а так вот все задание а ниже программа...

Для тех, кто знает DBMS_SQL
Задача: обновить данные в табличке. Название таблички известно (например, test_1), а вот количество столбцов нет. Первые два столбца -...

Для тех кто знает рогалики
Есть рогалики которые запускаются в окне (ADOM, DF), но графика, как в консоли ASCII-шная. Я пытался сделать так же в окне. Но вот в чем...

16
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
13.03.2013, 14:21
Интересно, можно поподробней про 16 пункт? Откуда информация, и почему такое ограничение? И еще, что подразумевается под полноценным exe?
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
13.03.2013, 14:52  [ТС]
полноценный: это когда один exe и всё (ну и без всякой эмуляции и врапперов), тоесть полностью нативный код, например такой генерит компилятор gcj из состава gcc
теперь к рефлекшену - если у вас заюзано чёт типа AOP или DI, я уже не говорю про трюки с ASM, то всё приехали, нет ни одного способа превратить динамические вызовы рантайма в нативный аналог.
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
01.07.2013, 00:07  [ТС]
 Комментарий модератора 
форумчанин appricot, провёл хорошую работу по решению вопроса с exe, думаю всем пригодится.


В общем после долгого серфинга в гугле и неудачных попыток нашлось таки решение.
Опишу весь процесс создания (работоспособного) 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
 Аватар для dvano
136 / 67 / 27
Регистрация: 18.06.2014
Сообщений: 216
19.06.2014, 18:21
Зачем портить переносимость программ? Лучше компилировать нормально без всяких там exe и запускать обычной командой: java -jar program.jar.
0
0 / 3 / 0
Регистрация: 30.03.2019
Сообщений: 194
06.04.2019, 09:10
Цитата Сообщение от dvano Посмотреть сообщение
Лучше компилировать нормально без всяких там exe
Без .exe файла, java какой-то неполноценный язык... Готовая программа, может иметь вид "прокладки", в то время как она вполне самостоятельная.
Цитата Сообщение от mutagen Посмотреть сообщение
Опишу весь процесс создания (работоспособного) exe файла.
Спасибо конечно, но процесс похож на "танцы с бубном"
0
06.04.2019, 09:56

Не по теме:

Цитата Сообщение от 1Vitaliy Посмотреть сообщение
Без .exe файла, java какой-то неполноценный язык
Дадада! Без .exe-файлов линукс тоже какая-то неполноценная ОС.

0
0 / 3 / 0
Регистрация: 30.03.2019
Сообщений: 194
06.04.2019, 10:23
Цитата Сообщение от iSmokeJC Посмотреть сообщение
Дадада! Без .exe-файлов линукс тоже какая-то неполноценная ОС.
Зачем ограничивать функциональные возможности языка, если основная масса людей пользуется windows? java без экзешника, выполняет роль "утилиты" для программиста. Мне например нравится java (возможно потому что я понимаю этот язык), но вопрос развёртывания и запуска проекта - это просто кошмар какой-то...
0
Эксперт PythonЭксперт Java
19528 / 11065 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
06.04.2019, 12:41
Цитата Сообщение от 1Vitaliy Посмотреть сообщение
основная масса людей пользуется windows
Как показывает статистика, в настоящий момент основная масса людей пользуется Android.
Цитата Сообщение от 1Vitaliy Посмотреть сообщение
ограничивать функциональные возможности языка
С точностью до наоборот
1
0 / 3 / 0
Регистрация: 30.03.2019
Сообщений: 194
06.04.2019, 12:50
Цитата Сообщение от iSmokeJC Посмотреть сообщение
С точностью до наоборот
Пусть будет так. Но когда я столкнулся впервые с завершением проекта, для меня было всё запутанно и непонятно, как "открепить проект" от Eclipse и сделать привычный экзешник. Вопрос переносимости программы на первых этапах даже не возникает.
0
Эксперт PythonЭксперт Java
19528 / 11065 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
06.04.2019, 13:32
Цитата Сообщение от 1Vitaliy
"открепить проект" от Eclipse
Для этих целей используется мавен\грэдл и создается прекрасный исполняемый jar...
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
06.04.2019, 14:38
1Vitaliy, екзешники кроме студентов никому не нужны. На джава почти не пишут десктопных аппликаций.
0
0 / 3 / 0
Регистрация: 30.03.2019
Сообщений: 194
06.04.2019, 15:04
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
На джава почти не пишут десктопных аппликаций.
В том то и проблема... Джава замечательно справляется с браузером (интернет), с windows окнами, каталогами и файлами. Имеет широкий спектр возможностей для автоматизации локальных процессов (сортировка, поиск и др.), тестирования ПО и т.д. Но отсутствие .exe и куча всяких "коннекторов" для развёртывания, препятствуют простому и свободному использованию. При этом java - это язык "среднего уровня", и писать программы на нём, могут научится даже не программисты по основной специальности.
0
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
06.04.2019, 16:06
1Vitaliy, Вы не находите противоречия? Java "классная" потому что кроссплатформленная и Java "не классная" потому что проявляется ее кросплатформленность?
1
0 / 3 / 0
Регистрация: 30.03.2019
Сообщений: 194
06.04.2019, 16:21
Цитата Сообщение от ViktorFX Посмотреть сообщение
Java "классная" потому что кроссплатформленная и Java "не классная"
На сколько я знаю, "крутые программисты" используют java для написания серверов? - А я смотрю с точки зрения среднестатистического (возможно чуточку продвинутого) пользователя ПК.
Цитата Сообщение от ViktorFX Посмотреть сообщение
Вы не находите противоречия?
Нет. Так как в том виде, в котором я её знаю, программы на java (кроме устройств на android), похожи на "полуфабрикат".
0
06.04.2019, 17:29

Не по теме:

1Vitaliy, Хорошо, тогда я буду руководствоваться вашей логикой. :)
Насколько я знаю, геодезисты и космонавты используют ее(кривизну) в своих работах, а я смотрю как обычный человек, есть плоскость, есть верх и глубь.
В том виде в котором я ее знаю (а книги по геодезии я не читал и в космосе не бывал и не видел что земля круглая) все эти ваши азимуты, долгота и широта надуманы и малоприменимы, "полуфабрикаты" короче. Она плоская? ))))

0
06.04.2019, 17:46
 Комментарий модератора 
Обсуждение вышло далеко за рамки темы, поэтому прекращаем оффтоп.
Если уж очень хочется подискутировать, создайте новую тему. Например в ветке "Священные войны"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.04.2019, 17:46
Помогаю со студенческими работами здесь

Процедуры в С++ (для тех, кто знает и Pascal, и C++)
Недавно начал учить С++ и столкнулся с такой вещью. Из того, что я понял, у С++ есть только функции, а процедур нет, хотя они есть, но...

По известным результатам сравнения трех чисел расположить их в порядке возрастания
Сравнения Про три числа (обозначенных a, b, c) известны все результаты сравнения их друг с другом. Требуется расположить эти числа в...

для тех кто знает что такое МАН
решил написать в этом году МАН. Подскажите тему. Ну точнее хочу на МАН написать программу на винду, подскажите какую. И чтобы была нужная....

Сортировка вектора сложного класса (Просто для тех кто знает)
Есть класс: class Tovar { protected: Date_class expiry; string articul, name, catigory,barcode; double price; public: ...

Типа несложные задачи (особенно для тех, кто не изучал Java)!
Добрые люди! Пожалста помогите с задачами. Буду очень благодарен!!! Заранее спасибо! 1.1. Вычислить функцию ch(x) с точностью...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

Новые блоги и статьи
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
PowerShell и онлайн сервисы. Валюта (floatrates.com руб.)
iNNOKENTIY21 11.11.2025
PowerShell функция floatrates-rub Примеры вызова: # Указанная валюта 'EUR' floatrates-rub -Code 'EUR' # Список имеющихся кодов валют floatrates-rub -Available function floatrates-rub {
PowerShell и онлайн сервисы. Погода (RP5.ru)
iNNOKENTIY21 11.11.2025
PowerShell функция Get-WeatherRP5rss для получения погоды с сервиса RP5 Примеры вызова Get-WeatherRP5rss с указанием id 5484 — Москва (восток, Измайлово) и переносом строки:. . .
PowerShell и онлайн сервисы. Погода (wttr)
iNNOKENTIY21 11.11.2025
PowerShell Функция для получения погоды с сервиса wttr Примеры вызова: Погода в городе Омск с прогнозом на день, можно изменить прогноз на более дней, для этого надо поменять запрос:. . .
PowerShell и онлайн сервисы. Валюта (ЦБР)
iNNOKENTIY21 11.11.2025
# Получение курса валют function cbr (] $Valutes = @('USD', 'EUR', 'CNY')) { $url = 'https:/ / www. cbr-xml-daily. ru/ daily_json. js' $data = Invoke-RestMethod -Uri $url $esc = 27 . . .
И решил я переделать этот ноут в машину для распределенных вычислений
Programma_Boinc 09.11.2025
И решил я переделать этот ноут в машину для распределенных вычислений Всем привет. А вот мой компьютер, переделанный из ноутбука. Был у меня ноут асус 2011 года. Со временем корпус превратился. . .
Мысли в слух
kumehtar 07.11.2025
Заметил среди людей, что по-настоящему верная дружба бывает между теми, с кем нечего делить.
Новая зверюга
volvo 07.11.2025
Подарок на Хеллоуин, и теперь у нас кроме Tuxedo Cat есть еще и щенок далматинца: Хочу еще Симбу взять, очень нравится. . .
Инференс ML моделей в Java: TensorFlow, DL4J и DJL
Javaican 05.11.2025
Python захватил мир машинного обучения - это факт. Но когда дело доходит до продакшена, ситуация не так однозначна. Помню проект в крупном банке три года назад: команда data science натренировала. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru