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