Описание тега java
Java - это высокоуровневый, независимый от платформы, объектно-ориентированный, функциональный язык программирования и среда выполнения.
Язык Java в значительной степени основывается на синтаксисе из c и c++, но его объектная модель проще, чем у последнего, и у него меньше средств низкого уровня. Java-приложения обычно компилируются в байт-код (называемый файлами классов), который может выполняться jvm (виртуальной машиной Java), независимо от компьютерной архитектуры. jvm часто дополнительно компилирует код в машинный код для оптимизации производительности.
JVM управляет памятью с помощью сборщика мусора (см. garbage-collection), чтобы обрабатывать удаление объектов из памяти, когда объекты больше не используются. Дисциплина Java типирования является статичной, сильной, безопасной, именительной и манифестной. Java поддерживает такие функции, как отражение и взаимодействие с c и c++ через jni (собственный интерфейс Java).
Java спроектирован так, чтобы иметь как можно меньше зависимостей реализации, чтобы разработчики приложений могли писать один раз, запускать где угодно или иногда писать один раз, запускать везде (код, который выполняется на одной платформе, не нужно перекомпилировать для запуска на другой). Первоначально Java была разработана Джеймсом Гослингом в Sun Microsystems (которая полностью слилась с корпорацией Oracle 27 января 2010 года) и была выпущена в 1995 году как основной компонент Java-платформы Sun Microsystems. Ява была начата как проект под названием "Дуб" Джеймсом Гослингом в июне 1991 года.
Платформа Java - это имя, данное Sun (сейчас Oracle) для вычислительных систем, в которых установлены инструменты для разработки и запуска программ на Java. Платформа имеет широкий спектр инструментов, которые могут помочь разработчикам эффективно работать с языком программирования Java.
Платформа состоит из двух основных программных пакетов:
- Java Runtime Environment (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 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 [JSR 337] (March 18, 2014)
Java SE 7 [Dolphin] (July 28, 2011)
Java SE 6 [Mustang] (December 11, 2006)
J2SE 5.0 [Tiger] (September 30, 2004)
J2SE 1.4 [Merlin] (February 6, 2002)
J2SE 1.3 [Kestrel] (May 8, 2000)
J2SE 1.2 [Playground] (December 8, 1998)
JDK 1.1 (February 19, 1997)
JDK 1.0 (January 23, 1996)
JDK Beta (1995)
Последние стабильные версии:
Java Standard Edition 11 (11.0.2) - (January 15, 2019)
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 202 (1.8.0_202) - (January 15, 2019)
Java Standard Edition 7 Update 80 (1.7.0_80) - (April 14, 2015)
Чтобы узнать больше кодовых названий и дат выпуска, посетите Кодовые имена J2SE. Чтобы увидеть примечания к выпуску для каждой версии JDK, посетите статью в Википедии об истории версий Java.
Java SE доступна для скачивания.
Даты окончания публичных обновлений (ранее называвшиеся End Of Life и также именуемые EoPU) для свободно распространяемого дистрибутива от Oracle:
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 Tutorials в разделе Начало работы.
Прежде чем задать вопрос, пожалуйста, найдите его, чтобы узнать, задавался ли он раньше (у нас много дубликатов, некоторые из них перечислены ниже в разделе " Часто задаваемые вопросы"), и прочитайте " Написание идеального вопроса", чтобы узнать, как заставить Джона Скита ответить на ваш вопрос.
Соглашения об именах
Java-программы должны придерживаться следующих соглашений об именах, чтобы повысить удобочитаемость и уменьшить вероятность случайных ошибок. Следуя этим соглашениям об именах, вы упростите другим понимание вашего кода и помощь вам.
- Имена типов (классы, интерфейсы, перечисления и т.д.) Должны начинаться с заглавной буквы и с заглавной буквы первой буквы каждого последующего слова. Примеры включают в себя:
String
,ThreadLocal
иNullPointerException
. Это иногда называют PascalCase. - Имена методов и полей должны быть в camelCased; то есть они должны начинаться со строчной буквы и начинаться с заглавной буквы первой буквы каждого последующего слова. Примеры:
indexOf
,printStackTrace
,interrupt
. - Имена постоянных выражений (
static final
неизменяемые объекты) должны быть записаны в ALL_CAPS_SNAKE_CASE, с подчеркиванием, разделяющим каждое слово. Примеры:YELLOW
,DO_NOTHING_ON_CLOSE
. Это также относится к значениям классаEnum
. Однакоstatic final
ссылки на неизменяемые объекты должны быть в 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 (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, в основном предназначен для работы над проектами
android)
- BlueJ (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 SE
- Справочник по Java 7 API
- Справочник по API Java 8
- Справочник по API Java 9
- Справочник по Java 10 API
- Справочник по API Java 11
Расширенные ресурсы
- Спецификации языка Java и виртуальной машины
- Другие языки, которые можно смешивать с Java на JVM
- Руководство по Java 8
- Подробные часто задаваемые вопросы по универсальной Java-разработке от Angelika Langer
Фреймворки Java, библиотеки и программное обеспечение
Книги и ресурсы по программированию на Java
- Разработка приложений Java для Linux от Карла Альбинга и Михаэля Шварца (PDF)
- Как думать, как ученый
- Spring IO Guides
- Глава Первая Ява
- Учебник по Java EE 7 (PDF)
- Java-программирование для тонких клиентов
- Oracle Java Tutorials
- Мышление на Java
- Эффективная Java (PDF)
- Эффективное Java 3-е издание
- OSGi на практике (PDF)
- Категория мудрых уроков - J2EE
- Примеры кода Java и учебные пособия - J2EE
- Видео-тренинг по Java Design Pattern
- Поиск кода для примеров 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
-
implements Runnable
противextends Thread
Взаимодействие с операционной системой:
(Редакторы, пожалуйста, перечисляйте только те вопросы, которые на самом деле часто задаются.)