Java была выпущена компанией Sun Microsystems в 1995 году. Java известна своей простотой, переносимостью, безопасностью и надежностью. Одна из причин, по которой люди любят Java, — это виртуальная машина Java, которая гарантирует, что один и тот же код Java может выполняться в разных операционных системах и платформах. Слоган Sun Microsystems для Java звучал так: «Напиши один раз, работай везде».

В начале кода Java мы должны инициализировать класс, содержащий имя файла, который мы собираемся использовать, в данном случае это:

Внутри блока класса у нас есть метод main(), который перечисляет задачи нашей программы:

String[] args — это заполнитель для информации, которую мы хотим передать в нашу программу. Этот синтаксис необходим для запуска программы.

Чтобы отобразить текст на экране, мы можем использовать этот оператор:

  • System — это встроенный класс Java, который содержит полезные инструменты для наших программ.
  • out — это сокращение от «выход».
  • println — это сокращение от «строка печати».

Мы можем использовать System.out.println() всякий раз, когда мы хотим, чтобы программа создала новую строку на экране.

Мы также можем выводить информацию, используя System.out.print(). Обратите внимание, что мы используем print(), а не println(). В отличие от System.out.println(), этот тип оператора печати выводит все в одной строке.

Этот приведенный выше код будет иметь следующий вывод:

Hello World!

Когда комментарии короткие, мы используем однострочный синтаксис: //.

Когда комментарии длинные, мы используем многострочный синтаксис: /* и */.

Другим типом комментария является комментарий Javadoc, который представлен /** и */. Комментарии Javadoc используются для создания документации для API (интерфейсов прикладного программирования). При написании комментариев Javadoc помните, что в конечном итоге они будут использоваться в документации, которую могут читать ваши пользователи, поэтому будьте особенно внимательны при написании этих комментариев.

Комментарии Javadoc обычно пишутся перед объявлением полей, методов и классов.

Java не интерпретирует пробелы. Таким образом, эти две части кода похожи для Java.

Java действительно интерпретирует точки с запятой. Точки с запятой используются для обозначения конца оператора, одной строки кода, выполняющей одну задачу.

Фигурные скобки {} обозначают область действия наших классов и методов. В конце фигурной скобки нет точки с запятой.

Java – это компилируемый язык программирования. Это означает, что код, который мы пишем в файле .java, преобразуется компилятором в байтовый код перед его выполнением. с помощью виртуальной машины Java на вашем компьютере.

Компилятор — это программа, которая переводит удобные для человека языки программирования в другие языки программирования, которые могут выполнять компьютеры.

Процесс компиляции выявляет ошибки прежде чем компьютер запускает наш код.

Компилятор Java выполняет ряд проверок, пока преобразует код. Код, не прошедший эти проверки, компилироваться не будет.

Неудачная компиляция выдает список ошибок. Файл .class не создается до тех пор, пока ошибки не будут исправлены и команда компиляции не будет запущена снова.

Чтобы запустить файл .java, мы вводим в терминале javac [filename.java](<http://filename.java>) , что дает нам другой исполняемый файл с именем filename.class.

Правила и рекомендации по написанию программ на Java:

  • Java-программы имеют как минимум один класс и один main() метод.
  • Каждый класс представляет одну реальную идею.
  • Метод main() запускает задачи программы.
  • Комментарии Java добавляют полезный контекст для читателей.
  • В Java есть пробелы, фигурные скобки и точки с запятой.
  • Пробелы предназначены для того, чтобы люди могли легко читать код.
  • Фигурные скобки отмечают область действия класса и метода.
  • Точка с запятой отмечает конец оператора.
  • Java — компилируемый язык.
  • Компиляция выявляет ошибки в нашем коде.
  • Компиляторы преобразуют код в исполняемый класс.

Java — язык, чувствительный к регистру. Чувствительность к регистру означает, что синтаксис слов, понятных нашему компьютеру, должен соответствовать регистру. Например, команда Java для вывода текста на экран — System.out.println(). Если бы вы набрали system.out.println() или System.Out.println(), компилятор не узнал бы, что вы намеревались использовать System или out.

Все программы на Java состоят как минимум из одного класса. Имя класса должно соответствовать файлу: наш файл HelloWorld.java и наш класс HelloWorld. Мы пишем каждое слово с заглавной буквы в стиле, известном как pascal case. Переменные и методы Java именуются в похожем стиле, называемом верблюжий регистр, где слово после первого > пишется с большой буквы.

Каждая программа на Java должна иметь метод с именем main(). Метод — это последовательность задач, которую должен выполнить компьютер. Этот main() метод содержит все инструкции для нашей программы.

Этот код использует метод println() для отправки текста «Hello World!» на терминал в качестве вывода. println() происходит от объекта с именем out, который отвечает за различные типы вывода. Объекты — это наборы состояний и поведения, и они часто моделируются по образцу реальных вещей.

out расположен внутри System, который является еще одним объектом, отвечающим за представление нашего компьютера в программе! Мы можем получить доступ к частям объекта с помощью ., известного как точечная нотация.

Эта строка кода является оператором, поскольку выполняет одну задачу. Операторы всегда заканчиваются точкой с запятой.

Компилятор игнорирует пробелы, но людям они нужны!

А IDE, или интегрированная среда разработки, позволяет программистам объединить различные аспекты написания компьютерной программы.

Среды IDE повышают производительность труда программистов, объединяя общие действия по написанию программного обеспечения в одном приложении: редактирование исходного кода, сборку исполняемых файлов и отладку.

int содержат положительные числа, отрицательные числа и ноль. Они не хранят в себе дроби или числа с десятичными знаками.

Тип данных int допускает значения от -2 147 483 648 до 2 147 483 647 включительно.

Если вам нужно большее число, чем num дает вам доступ, вы можете использовать double, которое имеет максимальное значение 1,797 693 134 862 315,7 E+308, что примерно равно 17, за которым следуют 307 нулей. Минимальное значение 4,9 Е-324, что составляет 324 десятичных знака! В дополнение к этому double содержит дроби.

Тип данных boolean содержит два типа значений: true и false.

Тип данных char может содержать любой символ, например букву, пробел или знак препинания. Он должен быть заключен в одинарные кавычки '.

Strings содержат последовательности символов. Есть два способа создать объект String: использовать литерал String или вызвать класс String для создания нового объекта String. Строковый литерал – это любая последовательность символов, заключенная в двойные кавычки (""). Как и переменные примитивного типа, мы объявляем переменную String, указав сначала тип:

Мы также можем создать новый объект String, вызвав класс String при объявлении String следующим образом:

Существуют тонкие различия в поведении в зависимости от того, создаете ли вы String с помощью литерала String или нового объекта String.

Некоторые символы, известные как управляющие последовательности, имеют альтернативное использование в операторах печати Java. Управляющие последовательности интерпретируются компилятором иначе, чем другие символы. Экранирующие символы начинаются с символа \\.

Управляющая последовательность \\" позволяет нам добавить кавычки " к значению String:

Если бы мы не использовали escape-последовательность, Java подумала бы, что мы используем " для завершения строки!

Использование escape-последовательности \\\\ позволяет нам помещать обратную косую черту в текст String:

Это похоже на последний пример — как и ", \\ обычно имеет особое значение. В этом случае \\ используется для запуска управляющей последовательности. Что ж, если мы не хотим запускать escape-последовательность и просто хотим, чтобы в нашей строке было \\, тогда мы будем использовать \\\\ — мы используем escape-последовательность, чтобы сказать, что мы не хотим, чтобы \\ интерпретировалось как начало escape-последовательности.

Наконец, если мы поместим управляющую последовательность \\n в String, компилятор выведет новую строку текста:

Вы можете думать о \\n как о escape-последовательности для «новой строки».

Язык программирования Java имеет статическую типизацию. Программы Java не будут компилироваться, если переменной присвоено значение неправильного типа. Это ошибка, а именно ошибка объявления типа.

Программа не скомпилируется, если объявленный тип переменной не соответствует типу присваиваемого значения:

Например выше мы видим ошибку в консоли при компиляции:

Статическая типизация Java помогает программистам избежать ошибок во время выполнения и, таким образом, иметь гораздо более безопасный код, свободный от ошибок.

В Java имена переменных чувствительны к регистру. myHeight отличается от myheight переменной. Длина имени переменной не ограничена, но мы должны сделать его кратким, сохраняя при этом ясность смысла.

Переменная начинается с допустимой буквы, или $, или _. Никакие другие символы или цифры не могут начинать имя переменной. 1stPlace и *Gazer не являются допустимыми именами переменных.

Имена переменных только одного слова пишутся строчными буквами. Имена переменных, состоящие из более чем одного слова, имеют первую строчную букву, а начальную букву каждого последующего слова — заглавную. Этот стиль использования заглавных букв называется camelCase.

Когда мы добавляем ++ к числовой переменной, это увеличивает значение на 1. У нас также есть оператор декремента --, который уменьшает значение на 1.

Важно отметить, что если мы попытаемся разделить любое число на 0, то в результате получим ошибку ArithmeticException.

С такими объектами, как Strings, мы не можем использовать примитивный оператор равенства. Для проверки равенства с объектами мы используем встроенный метод под названием .equals(). При сравнении объектов всегда используйте .equals(). == будет иногда работать, но причина, по которой это иногда работает, связана с тем, как объекты хранятся в памяти.

Чтобы использовать его, мы вызываем его на одном String, используя., и передаем String для сравнения в круглых скобках.

Оператор +, на который мы подали в суд за сложение чисел, можно использовать для объединения String. Другими словами, мы можем использовать его, чтобы соединить два String вместе!

Класс — это набор инструкций, описывающих, как может вести себя экземпляр и какую информацию он содержит.

В Java есть предопределенные классы, такие как System, которые мы использовали для вывода текста на экран, но нам также нужно написать свои собственные классы для пользовательских нужд программы.

Чтобы создать объект (экземпляр класса), нам нужен метод-конструктор. Конструктор определен внутри класса.

Чтобы создать экземпляр, нам нужно вызвать или вызвать конструктор в main(). В следующем примере экземпляр Car назначается переменной ferrari:

В этом примере вместо объявления примитивного типа данных, такого как int или boolean, наша переменная ferrari объявляется как ссылочный тип данных. Это означает, что значение нашей переменной является ссылкой на адрес памяти экземпляра. При объявлении имя класса используется как тип переменной. В данном случае это тип Car.

Пропуск new вызывает ошибку.

Адрес памяти ferrari:

Car@76ed5528

Мы можем инициализировать переменную ссылочного типа, не присваивая ей ссылку, если используем специальное значение null. Что-то null не имеет значения; если бы мы присвоили объекту null, у него была бы недействительная ссылка.

Например, в следующем фрагменте кода мы создадим экземпляр Car, назначим ему ссылку, а затем изменим его значение на null:

Важно помнить, что если мы используем ссылку null для вызова метода или доступа к переменной экземпляра, мы получим ошибку NullPointerException.

Поля — это тип состояния, которым будет обладать каждый экземпляр. Один экземпляр может иметь "red" в качестве color, другой "blue" и т. д. Задача конструктора — присвоить этим полям экземпляра начальное значение.

Когда строковое значение передается в Car(), оно присваивается параметру carColor. Затем внутри конструктора carColor будет присвоено значение переменной экземпляра color.

У нашего метода также есть сигнатура, которая определяет имя и параметры метода. В приведенном выше примере подпись Car(String carColor).

Существует два типа параметров: формальные и фактические. Формальный параметр указывает тип и имя данных, которые можно передать в метод. В нашем примере выше String carColor является формальным параметром; carColor будет представлять любое значение String, переданное в конструктор. Мы узнаем о реальных параметрах в следующем упражнении.

В Java из-за перегрузки конструктора класс может иметь несколько конструкторов, если у них разные значения параметров. Сигнатура полезна тем, что помогает компилятору различать разные методы. Например:

В приведенном выше примере есть два конструктора. Когда мы инициализируем объект, компилятор будет знать, какой конструктор использовать, благодаря значениям, которые мы в него передаем. Например, Car myCar = new Car(true, 40) будет создан вторым конструктором, потому что аргументы соответствуют типу и порядку сигнатуры второго конструктора.

Если мы не определим конструктор, компилятор Java сгенерирует конструктор по умолчанию, который не содержит аргументов и присваивает значения объекта по умолчанию. Значения по умолчанию могут быть созданы путем присвоения значений полям экземпляра во время их объявления:

Фактический параметр или аргумент относится к значению, которое передается во время вызова метода.

Вызов по значению — это процесс вызова метода со значением аргумента. При передаче аргумента формальный параметр инициализируется копией значения аргумента.

Объекты не ограничены одним полем экземпляра. Мы можем объявить столько полей, сколько необходимо для требований нашей программы.

Конструктор теперь имеет несколько параметров для получения значений для новых полей. Мы по-прежнему указываем типы, а также имя для каждого параметра.

Заказ имеет значение! Мы должны передавать значения в вызов конструктора в том же порядке, в котором они перечислены в параметрах.

Методы — это повторяющиеся модульные блоки кода, используемые для выполнения определенных задач. У нас есть возможность определить наши собственные методы, которые будут принимать входные данные, что-то делать с ними и возвращать тот вид вывода, который нам нужен.

Методы настолько многоразовые, что мы написали программу для изготовления сэндвичей, которая использовала 20 строк кода, чтобы сделать один сэндвич. Наша программа очень быстро стала бы очень длинной, если бы мы готовили несколько бутербродов.

Код обычно выполняется в порядке сверху вниз, когда выполнение кода начинается в верхней части программы и заканчивается в нижней части программы; однако методы игнорируются компилятором, если только они не вызываются.

При вызове метода компилятор выполняет каждую инструкцию, содержащуюся в методе. После выполнения всех инструкций метода продолжается нисходящий порядок выполнения.

Мы отмечаем область этой задачи с помощью фигурных скобок: { и }. Все, что находится внутри фигурных скобок, является частью задачи. Этот домен называется областью метода.

Мы не можем получить доступ к переменным, которые объявлены внутри метода в коде, который находится вне области действия этого метода.

Переменная message, объявленная и инициализированная внутри drive, не может использоваться внутри main()! Он существует только в пределах области метода drive().

Однако milesDriven, объявленный в начале класса, может использоваться во всех методах класса, поскольку он находится в области действия всего класса.

Благодаря перегрузке методов наши Java-программы могут содержать несколько методов с одинаковыми именами, если список параметров каждого метода уникален.

Когда мы определяем метод toString() для класса, мы можем вернуть String, который будет напечатан при печати объекта:

Когда это запустится, команда System.out.println(myCar) напечатает This is a red car!, что говорит нам об Объекте myCar.

Условные операторы проверяют условие boolean и запускают блок кода в зависимости от условия. Фигурные скобки обозначают область действия условного блока, аналогичного методу или классу.

Если условие true, то блок выполняется. Итак, печатается Hello World!.

Если условие false, блок не запускается.

Этот код также называется операторами if-then: «Если (condition) равно true, то сделайте что-нибудь».

Оператор if-then — это самый простой поток управления, который мы можем написать. Он проверяет выражение на истинность и выполняет некоторый код на его основе.

  • Ключевое слово if отмечает начало условного оператора, за которым следуют круглые скобки ().
  • Скобки содержат тип данных boolean.

Для условия в скобках мы также можем использовать переменные, которые ссылаются на логическое значение, или сравнения, которые оцениваются как логическое значение.

Если условное выражение короткое, мы можем полностью опустить фигурные скобки:

Примечание. Условные операторы не заканчиваются точкой с запятой.

Условный оператор гарантирует, что будет запущен ровно один блок кода. Если условие hasPrerequisite равно false, выполняется блок после else.

Теперь в нашем условном операторе есть два отдельных блока кода. Первый блок запускается, если условие оценивается как true, второй блок запускается, если условие оценивается как false.

Условный оператор теперь имеет несколько условий, которые оцениваются сверху вниз:

Первое условие, которое оценивается как true, будет запускать этот блок кода. Вот пример, демонстрирующий порядок:

Этот связанный условный оператор имеет два условия, которые оценивают true. Поскольку testScore >= 70 предшествует testScore >= 60, выполняется только более ранний блок кода.

Примечание. Будет запущен только один из блоков кода.

Мы можем создать более сложную условную структуру, создав вложенные условные операторы, которые создаются путем размещения условных операторов внутри других условных операторов:

Когда мы реализуем вложенные условные операторы, сначала оценивается внешний оператор. если внешнее условие равно true, то оценивается внутренний вложенный оператор.

В приведенном выше фрагменте кода наш компилятор проверит условие в первом операторе if-then: temp < 60. Поскольку temp имеет значение 45, это условие равно true; поэтому наша программа напечатает Wear a jacket!.

Затем мы оценим условие вложенного оператора if-then: raining == true. Это условие также true, поэтому Bring your umbrella также выводится на экран.

Обратите внимание, что если бы первое условие было false, вложенное условие не оценивалось бы.

Вот пример нашего условного выбора курса вместо оператора switch:

В этом примере учащийся зачисляется на урок истории, проверяя значение, содержащееся в скобках, course, по каждой из меток case. Если значение после круглых скобок, выполняется блок switch.

Блоки переключения отличаются от других блоков кода, поскольку они не отмечены фигурными скобками, и мы используем ключевое слово break для выхода из оператора switch.

Без break запускается код под соответствующей меткой case, включая код под другими метками case, что редко является желаемым поведением.

Java включает операторы, которые используют только логические значения. Эти условные операторы помогают упростить выражения, содержащие сложные логические отношения, путем сведения нескольких логических значений к одному значению: true или false.

Комбинация значений истинности:

Оператор ИЛИ, ||, используется между двумя логическими значениями и возвращает одно логическое значение. Если любое из двух значений равно true, результирующее значение равно true, иначе результирующее значение равно false.

Этот код иллюстрирует каждую комбинацию:

В некоторых случаях компилятор может определить истинность логического выражения, вычислив только первый boolean операнд; это известно как оценка с коротким замыканием. Укороченная оценка работает только с выражениями, которые используют && или ||.

В выражении, использующем ||, результирующее значение будет true, если один из операндов имеет значение true. Если первый операнд выражения равен true, нам не нужно видеть значение другого операнда, чтобы знать, что конечное значение также будет true.

Унарный оператор НЕ, !, работает с одним значением. Этот оператор вычисляет противоположное логическое значение, к которому он применяется.

У нас есть возможность расширять наши логические выражения, используя несколько условных операторов в одном выражении.