Описание тега java
Java - это высокоуровневый, платформенно-независимый, объектно-ориентированный, функциональный язык программирования и среда выполнения.
Язык Java в значительной степени заимствует свой синтаксис от C и C++, но его объектная модель проще, чем у последнего, и имеет меньше низкоуровневых возможностей. Приложения Java обычно компилируются в байт-код (называемые файлами классов), которые могут выполняться JVM (виртуальной машиной Java) независимо от архитектуры компьютера. JVM часто компилирует код в собственный машинный код для оптимизации производительности.
JVM управляет памятью с помощью сборщика мусора (см. Сборщик мусора), чтобы обрабатывать удаление объекта из памяти, когда объекты больше не используются. Дисциплина типизации в Java статична, сильна, безопасна, именительна и очевидна. Java поддерживает такие функции, как отражение и взаимодействие с C и C++ через JNI (собственный интерфейс Java).
Java спроектирована так, чтобы иметь как можно меньше зависимостей реализации, чтобы позволить разработчикам приложений писать один раз, запускать где угодно или иногда писать один раз, запускать везде (код, который выполняется на одной платформе, не нужно перекомпилировать для запуска на другой). Первоначально Java была разработана Джеймсом Гослингом в Sun Microsystems (которая полностью объединилась с Oracle Corporation 27 января 2010 г.) и была выпущена в 1995 г. как основной компонент платформы Java Sun Microsystems. Java была запущена Джеймсом Гослингом как проект "Дуб" в июне 1991 года.
Платформа Java - это название, данное Sun (ныне Oracle) вычислительным системам, в которых установлены инструменты для разработки и выполнения программ Java. Платформа включает широкий спектр инструментов, которые могут помочь разработчикам эффективно работать с языком программирования Java.
Платформа состоит из двух основных программных пакетов:
- Среда выполнения Java (JRE): требуется для запуска приложений и апплетов Java.
- Java Development Kit (JDK): требуется для разработки приложений и апплетов Java. JDK поставляется с JRE.
В этом разделе мы более подробно рассмотрим, что делают эти два программных компонента платформы Java.
Задний план
Основная эталонная реализация Java - это открытый исходный код ( OpenJDK), который поддерживается крупными компаниями, включая Oracle, Apple, SAP и IBM.
Очень немногие компьютеры могут напрямую запускать программы Java. Следовательно, среда Java обычно становится доступной путем установки подходящего программного компонента. На компьютерах с Windows это обычно делается путем загрузки бесплатной среды выполнения Java (JRE с сайта java.com. На компьютерах Macintosh пользователю предлагается загрузить Java при запуске приложения, требующего этого. В Linux-подобных системах Java обычно устанавливается через менеджер пакетов.
Разработчикам часто требуются дополнительные инструменты, которые доступны в бесплатном Java Development Kit, который для Windows и Mac необходимо загрузить из Oracle и установить вручную.
Java компилируется в байт-код, который затем компилируется JVM в собственный машинный код. Компиляция выполняется точно в срок (JIT). Первоначально это рассматривалось как снижение производительности, но улучшения JVM и JIT-компиляции сделали это менее опасным. В некоторых случаях JVM может быть даже быстрее, чем собственный код, скомпилированный для более старой версии процессора из соображений обратной совместимости. Начиная с Java 9, его можно скомпилировать заблаговременно (AOT).
Примечание. Существуют и другие поставщики, хотя почти у всех есть лицензионные сборы. Для Linux и других платформ обратитесь к документации по операционной системе.
Версии
Известные версии Java, кодовые названия (в скобках []) и даты выпуска (в скобках) включают:
Java SE 14 [JSR 389] (March 17, 2020)
Java SE 13 [JSR 388] (September 17, 2019)
Java SE 12 [JSR 386] (March 19, 2019)
Java SE 11 [JSR 384] (September 25, 2018)
Java SE 10 [JSR 383] (March 20, 2018)
Java SE 9 [JSR 376] (September 21, 2017)
Java SE 8 (1.8) [JSR 337] (March 18, 2014)
Java SE 7 (1.7) [Dolphin] (July 28, 2011)
Java SE 6 (1.6) [Mustang] (December 11, 2006)
J2SE 5.0 (1.5) [Tiger] (September 29, 2004)
J2SE 1.4 [Merlin] (February 13, 2002)
J2SE 1.3 [Kestrel] (May 8, 2000)
J2SE 1.2 [Playground] (December 4, 1998)
JDK 1.1 (February 19, 1997)
JDK 1.0 (January 23, 1996)
JDK Beta (1995)
Начиная с Tiger
, каждая версия имеет два номера версии: внутренний номер, например 1.5.0
, и внешний номер, например 5.0
. посколькуJava SE 10
, новые версии будут выпускаться каждые шесть месяцев.
Последние стабильные версии:
Java Standard Edition 14 (14.0.2) - (July 14, 2020)
Java Standard Edition 13 (13.0.2) - (January 14, 2020)
Java Standard Edition 12 (12.0.2) - (July 16, 2019)
Java Standard Edition 11 (11.0.8) - (July 14, 2020)
Java Standard Edition 10 (10.0.2) - (July 17, 2018)
Java Standard Edition 9 (9.0.4) - (January 16, 2018)
Java Standard Edition 8 Update 261 (1.8.0_261) - (July 14, 2020)
Java Standard Edition 7 Update 80 (1.7.0_80) - (April 14, 2015)
Для получения дополнительных кодовых имен и дат выпуска посетите J2SE Code Names. Чтобы увидеть примечания к выпуску для каждой версии JDK, посетите статью в Википедии об истории версий Java.
Java SE доступна для загрузки.
Конец общественного обновления (прежнее название End Of Life, а также называют EoPU) дат для свободно доступного распределения от Oracle являются:
Java SE 14 - September 2020 for OpenJDK
Java SE 13 - March 2020 for OpenJDK
Java SE 12 - September 2019 for OpenJDK
Java SE 11 - At least September 2022 for AdoptOpenJDK
Java SE 10 - September 2018
Java SE 9 - March 2018
Java SE 8 - January 2019 (commercial user) | December 2020 (personal user)
Java SE 7 - Apr 2015
Java SE 6 - Feb 2013
J2SE 5.0 - Oct 2009
J2SE 1.4 - Oct 2008
Начальная помощь
Новичок в Java или вам нужна помощь, чтобы запустить свою первую Java-программу? См. Раздел " Учебники по Oracle Java" в разделе "Начало работы".
Прежде чем задавать вопрос, поищите, задавался ли он раньше (у нас много дубликатов, некоторые из них перечислены ниже в разделе " Часто задаваемые вопросы"), и прочтите Написание идеального вопроса, чтобы узнать, как заставить Джона Скита ответить на ваш вопрос.
Соглашения об именах
Программы на Java должны придерживаться следующих соглашений об именах, чтобы повысить удобочитаемость и снизить вероятность случайных ошибок. Следуя этим соглашениям об именах, вы упростите другим понимание вашего кода и поможете вам.
- Имена типов (классы, интерфейсы, перечисления и т. Д.) Должны начинаться с заглавной буквы и начинаться с заглавной буквы в каждом последующем слове. Примеры включают:
String
,ThreadLocal
, а такжеNullPointerException
. Иногда это называют PascalCase. - Имена методов и полей должны быть в верблюжьем регистре; то есть они должны начинаться со строчной буквы и начинаться с заглавной буквы в каждом последующем слове. Примеры:
indexOf
,printStackTrace
,interrupt
. - Имена постоянных выражений (
static final
неизменяемые объекты) должны быть записаны в ALL_CAPS_SNAKE_CASE, с подчеркиванием, разделяющим каждое слово. Примеры:YELLOW
,DO_NOTHING_ON_CLOSE
. Это также относится к значениямEnum
учебный класс. Однако,static final
ссылки на не являющиеся-immutable объектов должны быть camelCased.
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), которая может быть выполнена с помощьюjava
команда позже.
Дополнительная информация:
## Полезные IDE для Java
- Eclipse IDE ( затмение)
- Запускать Java-код онлайн
- IDE NetBeans ( netbeans)
- IntelliJ IDEA ( intellij-идея)
- Spring Tool Suite ( набор инструментов Spring на основе Eclipse, включает инструменты для работы со Spring)
- IDE JDeveloper ( jdeveloper)
- Android Studio ( android-студия на базе IntelliJ IDEA, в основном предназначена для работы над проектами Andriod)
- BlueJ ( блюдж)
- ideone - онлайн-среда IDE с поддержкой других популярных языков.
- Текст возвышенного ( 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
Онлайн-компиляторы
Ежедневно обновляемые ресурсы
- Документация по Java SE
- Справочник по API Java 7
- Справочник по API Java 8
- Справочник по API Java 9
- Справочник по API Java 10
- Справочник по API Java 11
- Справочник по API Java 12
- Справочник по API Java 13
- Справочник по API Java 14
Дополнительные ресурсы
- Спецификации языка Java и виртуальной машины
- Другие языки, которые можно смешивать с Java на JVM
- Руководство по Java 8
- Definitive Java Дженерики Advanced FAQ Анжеликой Langer
##Java-фреймворки, библиотеки и программное обеспечение
- Список замечательных фреймворков, библиотек и программного обеспечения Java.
- Полезные ссылки на Java
Книги и ресурсы по программированию на Java
- Разработка приложений Java для Linux, Карл Альбинг и Майкл Шварц (PDF)
- Как думать как компьютерный ученый
- Руководства Spring IO
- Head First Java
- Учебное пособие по Java EE 7 (PDF)
- Программирование тонких клиентов на Java
- Руководства Oracle по Java
- Мышление на Java
- Эффективная Java (PDF)
- Эффективное третье издание Java
- OSGi на практике (PDF)
- Учебники по категориям - J2EE
- Примеры кодов и руководств Java - J2EE
- Обучающее видео по шаблонам Java Design
- Поиск кода для примеров Java
- Глобальный механизм перекрестных ссылок Java
- Учебники по Java 101
- Учебный проект по Java EE 8
Часто задаваемые вопросы
Люди часто спрашивают о следующих темах Java:
Общее:
Путь к классам:
String
, StringBuilder
а также toString
:
- Как сравнить строки в Java?
- Разница между StringBuilder и StringBuffer
- Почему я получаю
SomeType@2f92e0f4
когда я печатаю свой объект? - Неизменяемость строк в Java
equals
а также hashCode
:
Java Platform SE API:
- Пропуская
nextLine()
после использованияnextInt()
- Сравнение дат
- Преобразование между java.util.Date и java.time.LocalDate
- Удаление элементов во время итерации по коллекции, избегая исключения ConcurrentModificationException
- Как отсортировать
Map<Key,Value>
на значениях в Java? - Когда использовать
LinkedList
надArrayList
? -
Arrays.asList()
- Различия между
HashMap
а такжеHashtable
? - Разница между Set и List?
Дженерики:
- Что это
<E>
в яве имеется ввиду? - Является
List<Dog>
подклассList<Animal>
? Почему дженерики Java не являются неявно полиморфными (и почему коллекции не ковариантны)? - Java Generics: что такое PECS?
- Что такое необработанный тип и почему мы не должны его использовать?
- Как создать универсальный массив?
- Как создать экземпляр переменной универсального типа
Классы и объекты:
- Передается ли Java по ссылке?
- В чем преимущество перечисления Java по сравнению с классом с общедоступными статическими конечными полями?
- Разница между общедоступным, защищенным, частным и по умолчанию
Арифметика и преобразования:
- Почему я не могу правильно напечатать двойной?
- Деление целых чисел возвращает 0
- Операторы составного присваивания +=, -=, *=, /= в Java
Отладка:
- Что такое трассировка стека и как ее использовать для отладки ошибок приложения?
- Что такое
NullPointerException
и как мне это исправить? - Что такое
ArrayIndexOutOfBoundsException
и как мне это предотвратить? - Как избежать нулевых проверок?
- Почему я получаю
NoClassDefFoundError
? - Почему я получаю
NoSuchMethodError
?
Thread
и многопоточность:
- Что значит
java.lang.Thread.interrupt()
делать? - Цикл while не видит измененного значения, если в нем нет оператора печати
-
implements Runnable
vs.extends Thread
Взаимодействие с операционной системой:
(Редакторы, пожалуйста, только список вопросов, которые на самом деле являются часто задаваемые.)