Переменные в Java 8

Цикл статей «Учебник Java 8».

Следующая статья — «Java 8 операции».
Предыдущая статья — «Введение в Java 8».

Содержание

Типы переменных

Соглашение об именовании переменных

Типы данных

Значения по умолчанию

Литералы

Целочисленные литералы

Литералы с плавающей точкой

Символьные и строковые литералы

Другие литералы

Массивы

Синтаксис объявления переменных в Java следующий:

Сначала идёт тип переменной, в данном случае int, затем имя переменной ( ammoCount и weight), затем может идти (но не обязательно) инициализация переменной начальным значением. В примере выше объявлено две переменные: ammoCount  и weight. Обе переменные имеют тип int. Переменная weight инициализирована начальным значением 80.

Типы переменных

В Java есть четыре типа переменных:

  • Переменные экземпляров (Не статические свойства/поля) или Instance Variables (Non-Static Fields). Это те переменные, которые объявлены внутри класса без ключевого слова static . Их значения отличны для каждого экземпляра класса.
  • Переменные класса (Статические свойства/поля) или Class Variables (Static Fields). Это любое свойство класса, объявленное  с ключевым словом static. Это свойство относится к самому классу, а не к его экземплярам. Оно существует всегда в единственном экземпляре.
  • Локальные переменные или Local Variables. Локальные переменные — это переменные, объявленные внутри метода (внутри фигурных скобок метода). Они доступны только внутри метода, в котором они объявлены. В них методы хранят информацию, необходимую только им, например промежуточные значения своих вычислений.
  • Параметры или Parameters. Параметры — это переменные, которые принимают значение переданных аргументов метода. Мы уже видели пример параметров в описании метода  public static void main(String[] args). В этом описании метода args  — параметр метода. Советую также прочитать статьи «Формальные параметры» и «Фактические параметры».

Соглашение об именовании переменных

В языке программирования Java существуют следующие соглашения о именовании переменных:

  • Имена переменных зависят от регистра. Переменные var1 и VAR1 — это две разные переменные. Длина имени переменной не ограничена, оно может содержать любое количество букв Юникода и цифр, может начинаться с буквы, знака доллара «$» или символа подчёркивания «_». Однако согласно соглашению о кодировании в Java имена переменных всегда должны начинаться со строчной буквы английского алфавита, но не с символа «$» или «_». Также согласно соглашению знак доллара не используется совсем. Некоторые утилиты могут генерировать имена переменных с символом доллара, но вы не должны его использовать.
  • Последующие символы могут быть буквами, цифрами, знаком доллара и подчёркивания. Рекомендуется использовать полные английские слова при именовании переменных, а не сокращения.
  • Если имя переменной содержит несколько слов, то первые буквы второго и последующего слова делаются прописными, например energyUsed, moneyFoundOnStreets, abstractProxyFactorySingletonBean.
  • Нельзя использовать зарезервированные (или ключевые) слова в качестве имён переменных.
  • Если значение переменной никогда не меняется, например static final int BUFFER_SIZE=1024;, то согласно соглашению нужно каждую букву делать ЗАГЛАВНОЙ, а между словами использовать символ подчёркивания «_».

Язык программирования Java является строго типизированным языком. Каждая переменная должна быть объявлена перед использованием с указанием своего типа, имени и, возможно, начального значения.

Типы данных

В Java имеется восемь примитивных типов данных:

  • byte — 8-и битное знаковое число. Может хранить значения от -128 до +127 (включительно). Используется, например в массивах, когда нужно сэкономить память.
  • short — 16-и битное знаковое число. Может хранить значения от -32 768 до +32 767 (включительно). Используется вместо int, когда необходимо сэкономить память.
  • int — 32-х битное знаковое число. Может хранить значения от -231 до 231-1. В Java 8 можно использовать этот тип для хранения беззнакового целого числа от 0 до 232-1, используя методы compareUnsigned, divideUnsigned и другие из класса java.lang.Integer.
  • long — 64-х битное знаковое число.Может хранить значения от -263 до 263-1. В Java 8 можно использовать этот тип для хранения беззнакового целого числа от 0 до 264-1, используя методы compareUnsigned, divideUnsigned и другие из класса java.lang.Long.
  • float — 32-битное число с плавающей точкой одинарной точности согласно IEEE 754. Используется вместо double, когда нужно сэкономить память. Нельзя использовать float  для хранения и обработки денежных значений. Для денежных значений нужно использовать java.math.BigDecimal.
  • double — 64-битное число с плавающей точкой двойной точности согласно IEEE 754. Используется при необходимости хранить дробные значения. Нельзя использовать double  для хранения и обработки денежных значений. Для денежных значений нужно использовать java.math.BigDecimal.
  • boolean — логическое значение. Имеет только два возможных значения: true  и false. Используется для флагов. Его размер точно не определён, несмотря на то что он несёт 1 бит полезной информации.
  • char — 16-и битный символ Юникода. Его минимальное значение '\u0000' или 0, а максимальное '\uffff' (65 535 включительно)

Значения по умолчанию

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

С полями классов ситуация несколько иная. Если поле класса (не важно статическое или нет) не инициализировано каким-нибудь значением, то ему будет присвоено значение по умолчанию. Значение по умолчанию — это null  или 0 соответствующего типа.

Следующая таблица показывает соответствие типа данных и значения по умолчанию:

Тип данных Значение по умолчанию для полей
byte 0
short 0
int 0
long 0L
float 0.0f
double 0.0d
char ‘\u0000’
String (или любой объект) null
boolean false

Литералы

Литерал — это запись в исходном коде, представляющая собой фиксированное значение.

Можно присвоить литерал переменной примитивного типа:

Целочисленные литералы

Целочисленный литерал имеет тип int  в обычном случае и тип long, если заканчивается на символ «l» (строчная буква «эл» английского алфавита) или «L» (прописная буква «эл» английского алфавита). Рекомендуется использовать «L», так как «l» трудно отличить от единицы.

Значения типов byte, short, int  и long  могут быть созданы из литералов типа int. Значения типа long, превышающие int, могут быть созданы из литералов типа long.

Десятичные литеры могут быть записаны в четырёх системах счисления:

  • Десятичной. По основанию 10. Цифры от 0 до 9. Эту систему счисления мы используем каждый день.
  • Шестнадцатеричной. По основанию 16. Цифры от 0 до 9 и буквы от A до F. Префикс 0x.
  • Восьмеричной. По основанию 8. Цифры от 0 до 7. Префикс цифра 0.
  • Двоичной. По основанию 2. Цифры от 0 до 1. Начиная с Java SE 7. Префикс 0b.

Пример:

Можно использовать символ подчёркивания между любыми двумя цифрами любой записи целочисленного литерала. Это может использоваться, например, для отделения групп цифр:

Но целочисленный литерал не может заканчиваться или начинаться символом подчёркивания, и символ подчёркивания не может стоять сразу после 0x или 0b у шестнадцатеричной и двоичной системы счисления.

Литералы с плавающей точкой

Литералы с плавающей точкой имеют тип float, если они оканчиваются на «f» или «F», и тип double, если они не имеют окончания или оканчиваются на «d» или «D».

Можно также использовать научную запись числа с помощью «e» или «E», что означает экспоненту (умножить на 10 в степени указанного числа).

Существует также двоично-десятичная запись:

Можно использовать символ подчёркивания для отделения групп в целой части, дробной части и экспоненте (после «e» или «E», «p» или «P»). Символ подчёркивания может стоять только между двумя цифрами!

Примеры:

Символьные и строковые литералы

Строковые и символьные литералы могут содержать любой символ Юникода (UTF-16).  Если ваш редактор текста не поддерживает эти символы, то вы можете вставлять их коды вида '\u00A9' (знак копирайта), где после \u стоит код символа Юникод в шестнадцатеричной системе счисления. Строки всегда заключаются в двойные кавычки, а символы — в одинарные.

Можно также использовать коды \b  (backspace), \t  (табуляция), \n  (подача строки), \f  (конец страницы, такое сейчас почти не используется), \r  (возврат каретки), \"  (двойная кавычка), \'  (одинарная кавычка) и  \\  (косая черта).

Другие литералы

Существует ещё литерал null, которые можно присвоить для ссылочных типов данных.

Плюс ещё есть литерал класса. Он формируется с помощью добавления .class  к имени типа, например String.class. Этот литерал ссылается на объект java.lang.Class, который представляет собой тип.

 

Массивы

Массив — это объект-контейнер, хранящий фиксированное количество элементов одинакового типа. Длина массива фиксируется после создания и не меняется во всём времени существования этого массива.

Нумерация элементов массива начинается с нуля. Первый элемент имеет индекс 0, второй — 1 и так далее. Последний элемент имеет индекс на единицу меньший длины массива.

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

Пример:

Для инициализации массива используется оператор new  и имя типа данных с указанием размерности в квадратных скобках:

После инициализации можно присваивать значения элементам массива. Доступ к элементам происходит по индексу, указанному в квадратных скобках после имени переменной:

Для первоначальной инициализации массива можно использовать вот такую конструкцию:

Общий пример работы с массивами:

 

Класс java.util.Arrays  содержит множество полезных методов для работы с массивами: копирование, поиск, заполнение, сортировка. Имеет смысл ознакомиться с этими методами. Также может быть полезен метод static void java.lang.System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length) , который позволяет копировать элементы одного массива в другой. Я не буду здесь подробно расписывать эти методы. Здесь я хотел дать только общее представление о массивах. Кому интересно может посмотреть официальную документацию на java.util.Arrays и System.arraycopy на сайте Oracle. А я, возможно, когда-нибудь тоже опишу основные методы из java.util.Arrays, но не в этой статье.

Цикл статей «Учебник Java 8».

Следующая статья — «Java 8 операции».
Предыдущая статья — «Введение в Java 8».

Переменные в Java 8: 10 комментариев

  1. Судя по определению, нет разницы между переменными классов и переменными экземпляров. Просьба проехать.

  2. -1 в допустимом диапазоне переменных отображается в степени. Например для инта не 2^(31-1), а 2^(31)-1

  3. Целочисленные литералы. В восьмеричной системе НЕ отображается префикс ни в FireFox, ни в Google Chrome.

    Спасибо за ваш конспект-учебник.

    1. Да, действительно. Какая-то проблема была в этом месте, из-за которой подсветка синтаксиса просто убирала цифру ноль. Теперь поправил. Сделал без подсветки синтаксиса, зато отображается.

  4. «Если значение переменной никогда не меняется, например static int BUFFER_SIZE=1024;»
    Является переменной класса, но не константой -> имеется возможность изменения

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *