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


Переменная предоставляется нам именем хранения, чтобы нашей программой можно было манипулировать. Каждая переменная в 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.

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