Java — Самоучитель

  • 15. Java — Массивы
  • 16. Java — Дата и время
  • 17. Java — Регулярные выражения
  • 18. Java — Методы
  • 19. Java — Потоки ввода/вывода, файлы и каталоги
  • 7. Java — Типы переменных, объявление и инициализация

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

    Необходимо объявить все переменные, прежде чем их использовать. Ниже показана основная форма объявления:

    тип данных переменная [ = значение], [переменная [= значение], ...] ;

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

    Ниже приведены примеры объявления переменной и инициализации в Java:

    int a, b, c;          // Объявление трех целых a, b, и c.
    int a = 10, b = 10;   // Пример инициализации.
    byte b = 22;          // Инициализация переменной b типа byte.
    double pi = 3.14159;  // Объявление и присвоение величины пи.
    char a = 'a';         // Переменной a типа char присваивается значение 'a'.
    

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

    • локальные переменные;
    • переменные экземпляра;
    • статические переменные или переменные класса.

    Локальные переменные в Java

    • Локальные переменные объявляются в методах, конструкторах или блоках.
    • Локальные переменные создаются, когда метод, конструктор или блок запускается и уничтожаются после того, как завершиться метод, конструктор или блок.
    • Модификаторы доступа нельзя использовать для локальных переменных.
    • Они являются видимыми только в пределах объявленного метода, конструктора или блока.
    • Локальные переменные реализуются на уровне стека внутри.
    • В Java не существует для локальных переменных значения по умолчанию, так что они должны быть объявлены и начальное значение должны быть присвоено перед первым использованием.

    Пример

    «age» — локальная переменная, определяется внутри метода «pupAge()» и области её действия ограничивается только этим методом.

    public class Test{ 
       public void pupAge(){
          int age = 0;
          age = age + 7;
          System.out.println("Возраст щенка: " + age);
       }
       
       public static void main(String args[]){
          Test test = new Test();
          test.pupAge();
       }
    }

    Будет получен следующий результат:

    Возраст щенка: 7

    Пример без инициализации

    Пример использования «age» без инициализации. Программа выдаст ошибку во время компиляции.

    public class Test{ 
       public void pupAge(){
          int age;
          age = age + 7;
          System.out.println("Возраст щенка: " + age);
       }
       
       public static void main(String args[]){
          Test test = new Test();
          test.pupAge();
       }
    }

    Это приведёт к следующему сообщению об ошибке во время компиляции:

    Test.java:4:variable number might not have been initialized
    age = age + 7;
             ^
    1 error

    Переменные экземпляра

    • Переменные экземпляра объявляются в классе, но за пределами метода, конструктора или какого-либо блока.
    • Когда для объекта в стеке выделяется пространство, создается слот для каждого значения переменной экземпляра.
    • В Java переменные экземпляра создаются тогда, когда объект создан с помощью ключевого слова «new» и разрушаются тогда, когда объект уничтожается.
    • Переменные содержат значения, которые должны ссылаться более чем на один метод, конструктор или блок, или на основные части состояния объекта, которые должны присутствовать на протяжении всего класса.
    • Переменные экземпляра могут быть объявлен на уровне класса, до или после использования.
    • Модификаторы доступа могут быть предоставлены для переменных экземпляра.
    • Переменные экземпляра в Java являются видимыми для всех методов, конструкторов и блоков в классе. Как правило рекомендуется сделать их private (уровень доступа). Однако можно сделать их видимыми для подклассов этих переменных с помощью модификаторов доступа.
    • Переменные экземпляра имеют значения по умолчанию. Для чисел по умолчанию равно 0, для логических — false, для ссылок на объект — null. Значения могут быть присвоены при объявлении или в конструкторе.
    • Переменные экземпляра в Java могут быть доступны непосредственно путем вызова имени переменной внутри класса. Однако в статических методах и различных класса (когда к переменным экземпляра дана доступность) должны быть вызваны используя полное имя — ObjectReference.VariableName.

    Пример

    import java.io.*;
     
    public class Employee{
       // Переменная экземпляра открыта для любого дочернего класса.
       public String name;
       
       // Переменная salary видна только в Employee.
       private double salary;
       
       // Имя переменной присваивается в конструкторе. 
       public Employee (String empName){
          name = empName;
       }
     
       // Переменной salary присваивается значение.
       public void setSalary(double empSal){
          salary = empSal;
       }
       
       // Этот метод выводит на экран данные сотрудников.
       public void printEmp(){
          System.out.println("имя: " + name );
          System.out.println("зарплата:" + salary);
       }
     
       public static void main(String args[]){
          Employee empOne = new Employee("Олег");
          empOne.setSalary(1000);
          empOne.printEmp();
       }
    }

    Программа будет будет производить следующий результат:

    имя: Олег
    зарплата: 1000.0

    Переменные класса или статические переменные в Java

    • Переменные класса, также известные в Java как статические переменные, которые объявляются со статическим ключевым слово в классе, но за пределами метода, конструктора или блока.
    • Там будет только одна копия каждой статической переменной в классе, независимо от того, сколько объектов создано из него.
    • Статические переменные или переменные класса в Java используются редко, кроме когда объявляются как константы. Константы - переменные, которые объявлены как public/private, final и static. Константы никогда не меняются от первоначального значения.
    • В Java статические переменные создаются при запуске программы и уничтожаются, когда выполнение программы остановится.
    • Видимость похожа на переменную экземпляра. Однако большинство статических переменных объявляются как public, поскольку они должны быть доступны для пользователей класса.
    • Значения по умолчанию такое же, как и у переменных экземпляра. Для чисел по умолчанию равно 0, для данных типа Boolean — false; и для ссылок на объект — null. Значения могут быть присвоены при объявлении или в конструкторе. Кроме того, они могут быть присвоены в специальных блоках статического инициализатора.
    • Статические переменные могут быть доступны посредством вызова с именем класса ClassName.VariableName.
    • При объявлении переменных класса как public, static, final, имена находятся в верхнем регистре. Если статические переменные такими не являются, синтаксис такой же, как у переменных экземпляра и локальных.

    Пример

    import java.io.*;
     
    public class Employee{
       // salary(зарплата) переменная private static
       private static double salary;
     
       // DEPARTMENT(отдел) — это константа
       public static final String DEPARTMENT = "Разработка ";
     
       public static void main(String args[]){
          salary = 1000;
          System.out.println(DEPARTMENT+"средняя зарплата: "+salary);
       }
    }
    

    Это будет производить следующий результат:

    Разработка средняя зарплата: 1000

    Примечание: для получения доступа из внешнего класса, константы должны быть доступны как Employee.DEPARTMENT.

    В предыдущих материалах не раз упоминались модификаторы доступа. В следующем уроке мы подробно их рассмотрим.

    Поделитесь:

    О сайте

    Все материалы сайта proglang.su являются результатом труда его авторов. Копирование материалов в некоммерческих целях без указания источника в виде прямой ссылки на сайт proglang.su запрещено. Использование материалов в коммерческих целях разрешено только с письменного согласия автора. Нарушение авторских прав преследуется по закону. Мы это делаем, чтобы защитить плоды своих трудов от воровства. © 2014-2017

    Присоединяйтесь