Урок J-6. Java переменные и типы данных

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

  • что такое переменные в java и как их объявлять,
  • как правильно именовать переменные,
  • какие существуют типы данных в java:
    • примитивные типы данных,
    • ссылочные типы данных,
    • отдельно рассмотрим тип String.

Java переменные

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

Объявление переменных в java

Пример:

 int x = 1;
 int y = 2;

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

  • тип данных (в данном примере — int — переменная содержит целое число),
  • имя переменной (в данном примере имена — x и y),
  • начальное значение переменной  или, другими словами,  инициализация переменной. В данном примере переменным x и y присвоены значения 1 и 2.  Однако, это не является обязательным условием при объявлении переменной.

Пример: объявление переменных без инициализации:

 int x;
 int y;

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

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

 int x,y;

 

 

Правила именования переменных в java

  1. Имя переменной должно начинаться с буквы (маленькой) и состоять из букв (Unicode) цифр и символа подчеркивания «_». Технически возможно начать имя переменной также с «$» или «_», однако это запрещено соглашением по оформлению кода в Java (Java Code Conventions). Кроме того, символ доллара «$», по соглашению, никогда не используется вообще. В соответствии с соглашением имя переменной должно начинаться именно с маленькой буквы (с заглавной буквы начинаются имена классов). Пробелы при именовании переменных не допускаются.
  2. Имя переменной не должно быть ключевым или зарезервированным словом языка Java.
  3. Имя переменной чувствительно к регистру.  newVariable и newvariable — разные имена.
  4. При выборе имени переменных, следует использовать полные слова вместо загадочных аббревиатур. Это сделает ваш код более удобным для чтения и понимания. Во многих случаях это также сделает ваш код самодокументируемым.
  5. Если выбранное вами имя переменной состоит только из одного слова — запишите его маленькими буквами. Если оно состоит из более чем одного слова, то отделяйте каждое последующее слово в имени переменной заглавной буквой. Например: superCounter, myDomesticAnimal
  6. Если переменная сохраняет постоянное значение, то каждое слово следует писать заглавными буквами и отделять при помощи символа подчеркивания. Пример: static final int NUMBER_OF_HOURS_IN_A_DAY = 24

 

Типы данных в java

Каждая переменная и каждое выражение в Java обладает типом и этот тип строго определен.

Примитивные типы данных

В Java существует 8 примитивных типов данных:

  • byte (целые числа, 1 байт)
  • short (целые числа, 2 байта)
  • int (целые числа, 4 байта)
  • long (целые числа, 8 байтов)
  • float (вещественные числа, 4 байта)
  • double (вещественные числа, 8 байтов)
  • char (символ Unicode, 2 байта)
  • boolean (значение истина/ложь, 1 байт)

Эти 8 типов служат основой для всех остальных типов данных. Примитивные типы обладают явным диапазоном допустимых значений.

byte — диапазон допустимых значений от -128 до 127

 //объявление переменных типа byte.
 byte getByte, putByte;
 // инициализация переменных
 getByte = 0;
 putByte = 0;

Переменные типа byte полезны при работе с  потоком данных, который поступает из сети или файла.

short — диапазон допустимых значений от -32768 до 32767

 //объявление и инициализация переменной типа short.
 short employeeID = 0;

int — диапазон допустимых значений от -2147483648 до 2147483647

 //объявление и инициализация переменной типа int.
 int max = 2147483647;

Тип int используется чаще при работе с целочисленными данными, нежели byte и short, даже если их диапазона хватает. Это происходит потому, что при указании значений типа  byte и short  в выражениях, их тип все равно автоматически  повышается до int при вычислении.

long — диапазон допустимых значений от -9223372036854775808 до 9223372036854775807

 //Использование переменных типа long.
 long days = getDays();
 long seconds;
 seconds = days * 24 * 60 * 60;

Тип удобен для работы с большими целыми числами.

float — диапазон допустимых значений от ~1,4*10-45 до ~3,4*1038

 //Объявление и инициализация переменных типа float.
 float usd = 31.24f;
 float eur = 44.03f;

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

double — диапазон допустимых значений от ~4,9*10-324  до ~1,8*10308

 //Объявление и инициализация переменных типа double.
 double pi = 3.14159; 

Математические функции такие как sin(), cos(), sqrt() возвращают значение double

char — символьный тип данных представляет собой один 16-битный Unicode символ. Он имеет минимальное значение ‘\ u0000’ (или 0), и максимальное значение ‘\ uffff’ (или 65535 включительно).  Символы char  можно задавать также при помощи соответствующих чисел. Например символ ‘Ы’ соответствует числу  1067. Рассмотрим на примере:

public static void main(String[] args) {

        char symb1=1067;
        char symb2 ='Ы';

        System.out.println("symb1 contains "+ symb1);
        System.out.println("symb2 contains "+ symb2);
}

Вывод этой программы будет:

symb1 contains Ы
symb2 contains Ы

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

public static void main(String[] args) {

       char ch = 'J';
       int intCh = (int) ch;

       System.out.println("J corresponds with "+ intCh);
}

На выводе программа показывает, что символу 'J' соответствует число 74.

J corresponds with 74

boolean — предназначен для хранения логических значений. Переменные этого типа могут принимать только одно из 2х возможных значений true или false.

 //Объявление и инициализация переменной типа boolean.
 boolean b = true; 

 

 

Тип String

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

//Создание строки с помощью конструктора 
String myString = new String("The weather was fine");
//Можно также создать строку используя кавычки ""
String myString = "The weather was fine";

Для строк определен оператор «+»

public static void main(String[] args) {

        String s1 = "I have ";
        String s2 = " apples ";
        int num = 3;
        String s = s1 + num + s2;

        System.out.println(s);
}

Вывод программы.

I have 3 apples 

 

 

Ссылочные типы данных

В ссылочные типы входят все классы, интерфейсы, массивы. Описанный выше тип String также относится к ссылочным типам. Этот класс из стандартной библиотеки Java.

Также существуют классы-оболочки:

  • Byte
  • Short
  • Integer
  • Long
  • Float
  • Double
  • Character
  • Boolean

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

В качестве типа также выступает любой созданный нами класс при создании инстанции класса. Вспомним прошлый урок, где мы создали класс Cat, а потом создали переменную ourcat типа Cat при создании экземпляра класса.

 Cat ourcat = new Cat();

На этом закончим наше знакомство с переменными и типами в Java.

 

Итак, в этом уроке мы узнали какие бывают типы данных, научились объявлять переменные. В следующем уроке рассмотрим приведение типов.

Комментарии и пинги к записи запрещены.

Комментариев к записи: 15

  1. Андрей:

    Вопрос по типу String.

    String myString = new String(«The weather was fine»);
    Тут все понятно: создается объект myString класса(типа) String и методу-конструктору этого класса передается «The weather was fine» в качестве параметра.

    Тогда что происходит здесь:

    String myString = «The weather was fine»;

    • Мария (admin):

      И в первом и во втором случае создается и инициализируется переменная типа String второй способ записи короче, и обычно используется он.

      • Андрей:

        Спасибо за ответ (и за ответ по временам года — там все понятно), но тут хотелось бы уточнение. Как я понимаю String — это объектный тип, то есть попросту является классом со своим набором атрибутов и методов, а также имеет конструктор(насколько я правильно понял — это метод класса, имеющий имя своего класса и позволяющий задать параметры при создании объекта этого класса).
        Я рассматриваю тип, как класс, а переменную, как объект.
        Суть вопроса:
        Если:
        String myString = new String(«The weather was fine»);
        тоже самое что:
        String myString = «The weather was fine»;

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

        • Мария (admin):

          Второй вариант это такая фишка, придуманная для типа String, что бы было проще им пользоваться, так как используется он очень часто, поэтому сделали так чтобы создавать переменную типа стринг было так же просто как и переменные примитивных типов. Но на самом деле String это объектный тип со всеми вытекающими, тут вы правы, поэтому как и для любого объектного типа для String имеется возможность создать объект при помощи ключевого слова new. Для своего собственного класса вы не сможете воспользоваться вторым вариантом при создании объекта.

        • Мария (admin):

          Еще добавлю следующее пояснение из Java Tutorial
          Во втором случае, то что заключено между кавычек является строковым литералом, каждый раз, когда такой литерал встречается в коде, компилятор создает объект типа String c этим значением.
          Если с английским хорошо, то можете изучить эту сатью http://www.ntu.edu.sg/home/ehchua/programming/java/j3d_string.html Там подробно расписано про тип String особенно пункт 2.1 посмотрите

  2. Алексей:

    Во первых, спасибо Вам большое за отличный материал и доступную подачу!

    Если я не ошибаюсь, у Вас небольшая ошибка в блоке:
    » //объявление переменных типа byte.
    byte getByte, putByte;
    // инициализация переменных
    byte getByte = 0;
    byte putByte = 0;»

    Во время инициализации переменных Вы указываете их тип, тем самым повторно объявляя их.

  3. Данте:

    Cat ourcat=new cat();

    1.А зачем присваивать переменной ourcat экземпляр класса Cat ?

    2.допустим тип переменной int говорит о том что переменная этого типа будет целым числом, тип char о том что переменная будет символом ,а тип Cat о чем говорит? что переменная будет что ?

    • Мария (admin):

      1. иначе она NULL будет
      2. что переменная будет котом. тип Cat это указание того, что переменная может использовать методы из класса Cat и атрибуты у нее такие как описаны в классе Cat.

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

  4. sanya:

    Здравствуйте!
    Программирую на С++ . Решил посмотреть на Java. И сразу же наткнулся на ваш сайт.
    Я так понимаю Java — это упрощенный C++. Так вот = это перегруженный оператор присвоения,тоесть перегруженная функция.

    • Мария (admin):

      из за того, что у Java подобный синтаксис — считать его упрощенным С++ неправильно

  5. Владислав:

    Как передать значение одной переменной другой, при условии что они разных типов? Например, от типа byte типу float?

    • Мария (admin):

      преобразование переменных описано в уроке 7 https://study-java.ru/uroki-java/urok-7-preobrazovanie-tipov-v-java/ но конкретно перевода byte to float там нет, поэтому придеся гуглить

    • Амир:

      преобразование byte to float можно сделать с помощью кастинга например
      float с;
      byte а = (byte)c; вопрос в том а зачем оно вам нужно? Ведь при таком действии у float с будет отрезано все до размера byte и ваши значения просто будут неккоректными 🙂 но в джава все возможно !

androidprog.com
Все материалы сайта study-java.ru являются результатом труда его авторов. Копирование материалов в некоммерческих целях без указания источника в виде прямой ссылки на сайт study-java.ru запрещено. Использование материалов в коммерческих целях разрешено только с письменного согласия автора. Нарушение авторских прав преследуется по закону.