Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.
Javaявляется высокоуровневым уровень, независимый от платформы,объектно-ориентированный,функциональныйязык программирования исреда выполнения.
Язык Java в значительной степени основывается на синтаксисе C и C ++, но его объектная модель проще, чем у последнего, и в нем меньше возможностей низкого уровня. Java-приложения обычно компилируются в байт-код(называемый файлы классов), которые могут выполняться JVM (виртуальной машиной Java), независимо от архитектуры компьютера. JVM часто дополнительно компилирует код в машинный код для оптимизации производительности.
JVM управляет памятью с помощью сборщика мусора(см. такжеgarbage-коллекция) для обработки удаления объектов из памяти, когда объекты больше не используются. Это означает, что программисту не нужно вручную удалять объекты из памяти, в отличие от таких языков, как C. статический, сильный, безопасный, номинативный и манифестный. Java поддерживает такие функции, какрефлексия, взаимодействие с C и C++ через JNI (собственный интерфейс Java) и выполнение языки сценариев, такие как JavaScript.
Java спроектирован так, чтобы иметь как можно меньше зависимостей реализации, чтобы разработчики приложений могли писать один раз, запускать где угодно, или иногда написать один раз, запустить везде(код, который выполняется на одной платформе, не нужно перекомпилировать для запуска на другой ) . Первоначально Java была разработана Джеймсом Гослингомв Sun Microsystems (которая полностью слилась с корпорацией Oracle 27 января 2010 года) и была выпущена в 1995 году в качестве основного компонента платформы Java Sun Microsystems. Java была начата как проект под названием «Дуб» Джеймсом Гослингом в июне 1991 года.
платформа Java- это имя, данное Sun (теперь Oracle) для вычислительных систем, в которых установлены инструменты для разработки и запуска Java программы. Платформа содержит широкий спектр инструментов, которые могут помочь разработчикам эффективно работать с языком программирования Java.
Задний план
Основная эталонная реализация Java имеет открытый исходный код (OpenJDK) и поддерживается крупными компаниями, включая Oracle, Apple, Microsoft, SAP и ИБМ.
Java скомпилирован в Bytecode, который затем составлен JVM в родной аппаратный код. Компиляция сделана Just-Time(jit). Это было первоначально рассматривается как удар производительности, но улучшения составления JVM и JIT сделали это меньше озабоченности. В некоторых случаях JVM может даже быть быстрее, чем нативный код, скомпилированный для нацеливания более старой версии процессора для причины обратной совместимости. Поскольку Java 9, он может быть скомпилирован Предполагается время(AOT).
Очень немногие компьютеры могут запускать Java-программы напрямую. До Java 9 предполагалось, что у пользователей, запускающих программы Java, в системе должна быть установлена JRE (Java Runtime Environment). Современные программы Java, предназначенные для запуска непосредственно на клиентских компьютерах, теперь поставляются со своими собственными установщиками.
Версии
Известные версии Java, кодовые имена и даты выпуска включают в себя:
Начиная с Java SE 10
, новые версии будут выпускаться каждые шесть месяцев.
Последние стабильные версии:
Дополнительные кодовые имена и даты выпуска см. На странице Кодовые имена Java SE. Чтобы просмотреть примечания к выпуску для каждой версии JDK, посетите статью в Википедииоб истории версий Java.
Чтобы получить Java JDK, позволяющий разрабатывать (или запускать) Java-код на своем компьютере, вам понадобится поставщик пакета установщика Java. Java - это открытый исходный код, но поставщик позаботится о том, чтобы исходный код java был преобразован в двоичный файл, заключил его в программу установки и поддерживал эту версию на вашем компьютере (например, с обновлениями безопасности).
Java поставляется в версиях LTS (Long-Term-Support) и не-LTS. Каждый поставщик сам выбирает, как поступать с LTS-версиями. Некоторые (Oracle OpenJDK) имеют одинаковое короткое окно поддержки для всех выпусков, LTS или нет. Некоторые (Amazon Corretto) вообще не удосуживаются выпускать версии без LTS. Большинство поставщиков выпускают все версии, которые будут поддерживать версии LTS гораздо дольше.
Версии LTS — это Java 8, 11 и 17.
Основные поставщики:
- AdoptOpenJDK, также известный как Adoptium - бесплатные версии LTS и версии без LTS, версии LTS поддерживаются долгое время. Рекомендуемые.
- Oracle OpenJDK. Обратите внимание, что они поддерживаются только в течение 6 месяцев, даже так называемые выпуски LTS (долгосрочная поддержка). Вам нужно будет обновить как обновления Java.
- Oracle JavaSE— лицензия для тех, кому нужна коммерческая поддержка. Версии LTS и не-LTS, версии LTS поддерживаются в течение длительного времени. Доступна бесплатная, но очень ограниченная по лицензии тестовая версия.
- Amazon Coretto - бесплатно, поддерживается Amazon, оптимизировано только для версий AWS, LTS.
- Еще много коммерческих предложений.
Конец публичных обновлений(ранее назывался End of Life и также называемый EoPU) для свободно доступный дистрибутив от Oracle:
Начальная помощь
Вы новичок в Java или вам нужна помощь для запуска вашей первой Java-программы? См. раздел Oracle Java Tutorials приступая к работе.
Прежде чем задать вопрос, пожалуйста, найдите его, чтобы узнать, задавался ли он раньше (у нас много дубликатов, некоторые перечислены ниже в разделе «Часто задаваемые вопросы») и прочитайте Написание идеального вопроса, чтобы узнать, как заставить Джона Скита ответить на ваш вопрос.
Соглашения об именах
Программы Java должны соответствовать следующим соглашениям об именах, чтобы повысить удобочитаемость и уменьшить вероятность случайных ошибок. Следуя этим соглашениям об именах, вы упростите другим понимание вашего кода и поможете вам.
- Имена типов (классы, интерфейсы, перечисления и т. Д.) Должны начинаться с заглавной буквы и с заглавной буквы первой буквы каждого последующего слова. Примеры включают:
String
,ThreadLocal
иNullPointerException
. Это иногда называют PascalCase. - Имена методов и полей должны быть в camelCased; то есть они должны начинаться со строчной буквы и начинаться с заглавной буквы первой буквы каждого последующего слова. Примеры : {{Х0}} , {{Х1}} , {{Х2}} .
- Имена постоянных выражений (неизменяемые объекты
static final
) должны быть записаны в ALL_CAPS_SNAKE_CASE, с подчеркиванием, разделяющим каждое слово. Примеры:YELLOW
,DO_NOTHING_ON_CLOSE
. Это также относится к значениям классаEnum
. Однако ссылкиstatic final
на неизменяемые объекты должны иметь верблюжий регистр.
Hello World - Ваша первая программа
Код типичной программы Hello World:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
Компиляция и запуск программы Hello World:
javac -d . HelloWorld.java
java -cp . HelloWorld
Исходный код Java скомпилирован в промежуточную форму (инструкции байт-кода для виртуальной машины Java), которую можно выполнить с {{ X0}} позже.
Дополнительная информация:
Полезные IDE для Java
- Код Visual Studio(visual-studio-code)
- Eclipse IDE (eclipse)
- Запустите Java-код онлайн
- IDE NetBeans (netbeans)
- IntelliJ IDEA(intellij-idea)
- Spring Tool Suite(spring-tool-suiteна основе Eclipse, включает инструменты для работы с Spring)
- JDeveloper IDE(jdeveloper)
- Android Studio (на основе android-studio) на IntelliJ IDEA, в основном предназначен для работы над проектами Andriod)
- BlueJ(bluej)
- ideone- интерактивная среда разработки с поддержкой других популярных языков.
- Sublime Text(sublimetext)
Ресурсы для начинающих
- Учебные руководства по Java- Начинается с нуля на Windows / Linux / Mac и охватывает большую часть стандартной библиотеки. Список ключевых слов Java, предлагаемый Oracle, очень хорошо дополняет учебники по Java Что ж.
- Дженерики
- Codecademy (Java) - ознакомьтесь с основами программирования.
- Coding Bat (Java)- Изучив некоторые основы, усовершенствуйте и оттачивайте свои навыки Java с помощью Coding Bat.
- Соглашения о коде для языка программирования Java
- Стэнфордские видео лекции по Java
- Udemy бесплатный курс по Java
- Курс Edx «Введение в вычисления с Java»
- Курсы Coursera на Яве
- Программирование на Java - бесплатный онлайн-курс по изучению Java
Онлайн-компиляторы
Ежедневно обновляемые ресурсы
- Документация по Java SE
- Справочник по API Java 7
- Справочник по API Java 8
- Справочник по API Java 9
- Справочник по Java 10 API
- Справочник по API Java 11
- Справочник по API Java 12
- Справочник по Java 13 API
- Справочник по Java 14 API
- Справочник по API Java 15
- Справочник по API Java 16
- Справочник по API Java 17
- Справочник по API Java 18
- Справочник по API Java 19
- Справочник по API Java 20
Расширенные ресурсы
- Спецификации языка Java и виртуальной машины
- Другие языки, которые могут быть смешаны с Java на JVM
- Руководство по Java 8
- Подробные часто задаваемые вопросы по универсальным Java-разработкам от Angelika Langer
Фреймворки Java, библиотеки и программное обеспечение
Книги и ресурсы по программированию на Java
- Разработка приложений Java для Linux от Карла Альбинга и Михаэля Шварца (PDF)
- Как думать как компьютерный ученый
- Spring IO Guides
- Глава Первая Ява
- Учебник по Java EE 7 (PDF)
- Программирование тонких клиентов Java (и другие Redbooks IBM)
- Oracle по Java
- Мышление на Java
- Эффективная Java (PDF)
- Эффективное Java 3-е издание
- OSGi на практике (PDF)
- Категория мудрых уроков - J2EE
- Примеры кода Java и учебные пособия - J2EE
- Видео Обучение Шаблону Java
- Поиск кода для примеров Java
- Глобальный движок перекрестных ссылок Java
- Учебники по Java 101
- Учебный проект по Java EE 8
Часто задаваемые вопросы
Люди часто спрашивают о следующих темах Java:
Общая:
Classpath :
String
, StringBuilder
и toString
:
- Как сравнить строки в Java?
- Разница между StringBuilder и StringBuffer
- Почему я получаю
SomeType@2f92e0f4
при печати моего объекта? - Неизменность строк в Java
equals
и hashCode
:
API Java Platform SE:
- Пропуск
nextLine()
после использованияnextInt()
- Сравнение дат
- Преобразование между java.util.Date и java.time.LocalDate
- Удаление элементов во время итерации коллекции, избегая исключения ConcurrentModificationException
- Как отсортировать
Map<Key, Value>
по значениям в Java? - Когда использовать
LinkedList
поверхArrayList
? Arrays.asList()
- Различия между
HashMap
иHashtable
? - Разница между Set и List?
Обобщения :
- Что означает
<E>
в Java? - Является ли
List<Dog>
подклассомList<Animal>
? Почему дженерики Java неявно полиморфны (и почему коллекции не являются ковариантными)? - Java Generics: что такое PECS?
- Что такое сырой тип и почему мы не должны его использовать?
- Как создать универсальный массив?
- Как создать переменную универсального типа
Классы и объекты:
- Java передается по ссылке?
- В чем преимущество перечисления Java по сравнению с классом с открытыми статическими полями final?
- Разница между публичной, защищенной, приватной и дефолтной
Арифметика и преобразования:
- Почему я не могу правильно напечатать двойной?
- Деление целых чисел возвращает 0
- Java + +, - =, * =, / = составные операторы присваивания
Отладка :
- Что такое трассировка стека и как я могу использовать ее для отладки ошибок моего приложения?
- Что такое
NullPointerException
и как мне это исправить? - Что такое
ArrayIndexOutOfBoundsException
и как мне его предотвратить? - Как мне избежать нулевых проверок?
- Почему я получаю
NoClassDefFoundError
? - Почему я получаю
NoSuchMethodError
?
Thread
и многопоточность:
- Что делает
java.lang.Thread.interrupt()
? - Цикл while не видит измененное значение, если в нем нет оператора print
- { { X0 } } против . { { X1 } }
Взаимодействие с операционной системой:
(Редакторы, пожалуйста, перечисляйте только те вопросы, которые часто задают.)