Найти в Дзене
Изучаем Java

Java07: переменные и типы данных

В этом уроке разберем что такое переменные и какие типы данных предоставляет нам язык Java. Переменные В предыдущих уроках нам встречалась конструкция вида В этом коде мы говорим компьютеру: i - называется переменная, мы храним в ней переменные значения. При создании переменной мы должны проинициализировать ее каким-то значением, иначе при попытке прочитать из переменной, получим ошибку на этапе компиляции. Например вот такой код выполнится: а вот такой выдаст ошибку: В строчке System.out.println(i); пытаемся прочитать значение из переменной i и вывести на экран. Компилятор выдаст такое сообщение: Error:(5, 28) java: variable i might not have been initialized Примечание по поводу компилятора: Мы пишем программу в редакторе (IDEA), дальше, когда мы запускаем ее в IDEA, то текст пропускается через компилятор, создается новый файл, который уже выполняется. (Компилятор - это отдельная программа, которая входит в комплект JDK.) Константы С помощью конструкции мы можем задать константное зн
Оглавление

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

Переменные

В предыдущих уроках нам встречалась конструкция вида

В этом коде мы говорим компьютеру:

  • Выдели память, где мы будем хранить целые числовые значения
  • Сразу запиши туда значение 0
  • Дальше по коду мы везде будем ссылаться на эту память используя имя i

i - называется переменная, мы храним в ней переменные значения.

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

Например вот такой код выполнится:

-2

а вот такой выдаст ошибку:

-3

В строчке System.out.println(i); пытаемся прочитать значение из переменной i и вывести на экран. Компилятор выдаст такое сообщение:

Error:(5, 28) java: variable i might not have been initialized

Примечание по поводу компилятора:

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

Константы

С помощью конструкции

-4

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

-5
С помощью двух слешей // отделяется коментарий в программе. Все что находится правее // игнорируется компилятором.

Тип переменной

В определении переменной

-6

Первое слово int задает тип переменной. Типы можно разделить на три группы - примитивные (или примитивы), массивы и классы. Примитивные типы - те, что встроены в язык, массивы - это коллекции типов, классы - композиции примитивных типов, массивов, действий и др. классов.

Примитивные типы

-7

Оператор деления

Хорошо видно отличие целых (int и т.д.) и дробных (double и т.д.) типов на примере деления:

-8

результат деления целых чисел - целое число, результат деления дробных чисел - дробное число.

Порядок выполнения операторов

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

-9

заметьте, что правила пересекаются с правилами из арифметики 1 * 3 - 4 / 2 + 5, т.е. сначала выполняется умножение, деление, потом сложение, вычитание. Так же как в арифметике круглыми скобками можно менять порядок вычисления 1 * (3 - 4) / (2 + 5).

Приведение типов

В примере с интами, где мы делили 3 / 2, можно получить 1.5, если воспользоваться приведением типов. Нужно привести (скастовать) int к double:

-10

В этом примере операция (double)i - это приведение значения переменной iк типу double. И дальше у нас операция деления двух double значений (дробных), результат тоже double (1.5).

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

-11

в выражении double z = (double)i / k переменная k неявно приведется к типу double.

За неявным приведением стоит простое правило - меньшие по размеру типы приводятся к большим. Можно руководствоваться схемой ниже.

-12

Разберем пару выражений

-13

что происходит в double z = y / k:

  • в операции деления участвует два типа y - double, k - int
  • чтобы произвести вычисление переменные приводятся к одному типу
  • т.к. double больше int, то k кастуется в double (неявно)
  • результат y / k тоже double
  • записываем результат выражение y / k в переменную z

что происходит в double w = y / k - i / k :

  • сначала выполняется выражение y / k (пусть результат temp1)
  • дальше выполняется i / k (пусть результат temp2)
  • потом выполняется temp1 - temp2
  • и в финале результат присваивается переменной w

чуть подробнее

  • выражение y / k разбирали выше, здесь у нас результат - тип double, значение 1.5
  • выражение i / k - здесь у нас i int и k int, результат тоже int, значение 1 (инт у нас может содержать только целые числа, дробная часть отбрасывается)
  • теперь получается выражение temp1 - temp2, где temp1 double значение 1.5 и temp2 int значение 1
  • здесь уже начинает работать неявное приведение типов, temp2 приводится к типу double и вычисляется результат оператора " - "
  • получаем 0.5
  • записываем в переменную w

Блоки кода и область видимости переменной

Фигурные скобки определяют отдельный блок кода. Если переменная создается (определяется) внутри блока кода (после открывающей скобки), то она видна только в границах этого блока, освобождается после закрывающей скобки и дальше не видна.

Например:

-14

или так:

-15

Попробуем обратится к переменным за областью видимости:

-16

Так же обратите внимание, что мы не можем два раза определить переменную

-17

но можем определить с таким же именем в коде уровнем выше

-18

добавим уровней вложенности

-19

Если переменная уже определена, то мы не сможем создать такую же в блоке кода уровнем ниже

-20

Полезные ссылки: