В языке Java все переменные должны быть объявлены перед использованием. Основной формат объявления переменных следующий:
type identifier [ = value][, identifier [= value] ...] ;
Описание формата: type — тип данных Java. идентификатор — это имя переменной. Несколько переменных одного типа могут быть объявлены через запятую.
Ниже перечислены некоторые примеры объявлений переменных. Обратите внимание, что некоторые из них включают процесс инициализации.
int a, b, c; // 声明三个int型整数:a、b、c。 int d = 3, e, f = 5; // 声明三个整数并赋予初值。 byte z = 22; // 声明并初始化z。 double pi = 3.14159; // 声明了pi。 char x = 'x'; // 变量x的值是字符'x'。
Типы переменных, поддерживаемые языком Java:
- Локальные переменные: переменные в методах класса.
- Переменные экземпляра: переменные, независимые от методов, но без статической модификации.
- Переменные класса: переменные, независимые от методов, модифицированные с помощью static.
public class Variable{ static int allClicks=0; // 类变量String str="hello world"; // 实例变量public void method(){ int i =0; // 局部变量} }
Локальные переменные Java
- Локальные переменные объявляются в методах, конструкторах или блоках операторов;
- Локальные переменные создаются при выполнении методов, конструкторов или блоков операторов. При их выполнении переменные будут уничтожены;
- Модификаторы доступа нельзя использовать для локальных переменных;
- Локальные переменные видны только в том методе, конструкторе или блоке операторов, в котором они объявлены;
- Локальные переменные размещаются в стеке.
- Локальные переменные не имеют значения по умолчанию, поэтому после объявления локальной переменной ее необходимо инициализировать, прежде чем ее можно будет использовать.
Пример 1
В следующем примере возраст является локальной переменной. Он определен в методе pupAge(), и его область действия ограничена этим методом.
public class Test{ public void pupAge(){ int age = 0; age = age + 7; System.out.println("Puppy age is : " + age); } public static void main(String args[]){ Test test = new Test(); test.pupAge(); } }
Результаты компиляции и запуска приведенного выше примера следующие:
Puppy age is: 7
Пример 2
В следующем примере переменная age не инициализирована, поэтому во время компиляции возникает ошибка.
public class Test{ public void pupAge(){ int age; age = age + 7; System.out.println("Puppy age is : " + 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
переменные экземпляра
- Переменные экземпляра объявляются внутри класса, но вне методов, конструкторов и блоков операторов;
- Когда создается экземпляр объекта, определяется значение каждой переменной экземпляра;
- Переменные экземпляра создаются при создании объекта и уничтожаются при его уничтожении;
- На значение переменной экземпляра должен ссылаться хотя бы один метод, конструктор или блок операторов, чтобы внешний объект мог получить информацию о переменной экземпляра через эти методы;
- Переменные экземпляра могут быть объявлены до или после использования;
- Модификаторы доступа могут изменять переменные экземпляра;
- Переменные экземпляра видны методам, конструкторам или блокам операторов в классе. В общем, переменные экземпляра должны быть закрытыми. Переменные экземпляра можно сделать видимыми для подклассов с помощью модификаторов доступа;
- Переменные экземпляра имеют значения по умолчанию. Значение по умолчанию для числовых переменных — 0, значение по умолчанию для логических переменных — false, а значение по умолчанию для переменных ссылочного типа — null. Значение переменной можно указать во время объявления или в конструкторе;
- Доступ к переменным экземпляра можно получить напрямую через имя переменной. Но в статических методах и других классах следует использовать полное имя: ObjectReference.VariableName.
Пример:
import java.io.*; public class Employee{ // 这个成员变量对子类可见public String name; // 私有变量,仅在该类可见private double salary; //在构造器中对name赋值public Employee (String empName){ name = empName; } //设定salary的值public void setSalary(double empSal){ salary = empSal; } // 打印信息public void printEmp(){ System.out.println("name : " + name ); System.out.println("salary :" + salary); } public static void main(String args[]){ Employee empOne = new Employee("Ransika"); empOne.setSalary(1000); empOne.printEmp(); } }
Результаты компиляции и запуска приведенного выше примера следующие:
name : Ransika salary :1000.0
Переменные класса (статические переменные)
- Переменные класса также называются статическими переменными и объявляются с ключевым словом static в классе, но должны находиться вне методов, конструкторов и блоков операторов.
- Независимо от того, сколько объектов создает класс, класс имеет только одну копию переменных класса.
- Статические переменные используются редко, за исключением случаев, когда они объявлены как константы. Константы относятся к переменным, объявленным как общедоступные/частные, финальные и статические типы. Константы не могут быть изменены после инициализации.
- Статические переменные хранятся в статической области хранения. Переменные, которые часто объявляются как константы, редко объявляются с использованием только статики.
- Статические переменные создаются в начале программы и уничтожаются в конце программы.
- Имеет видимость, аналогичную переменным экземпляра. Но для того, чтобы они были видны пользователям класса, большинство статических переменных объявляются как общедоступные типы.
- Значения по умолчанию аналогичны переменным экземпляра. Значение по умолчанию для числовых переменных — 0, значение по умолчанию для логических переменных — false, а значение по умолчанию для ссылочных типов — null. Значение переменной можно указать при ее объявлении или в конструкторе. Кроме того, статические переменные также можно инициализировать в статических блоках операторов.
- Доступ к статическим переменным можно получить через: ИмяКласса.ИмяПеременной.
- Когда переменная класса объявлена как общедоступный статический конечный тип, имя переменной класса должно содержать заглавные буквы. Если статическая переменная не имеет общедоступного и конечного типа, ее метод именования соответствует методу именования переменных экземпляра и локальных переменных.
Пример:
import java.io.*; public class Employee{ //salary是静态的私有变量private static double salary; // DEPARTMENT是一个常量public static final String DEPARTMENT = "Development "; public static void main(String args[]){ salary = 1000; System.out.println(DEPARTMENT+"average salary:"+salary); } }
Результаты компиляции и запуска приведенного выше примера следующие:
Development average salary:1000
Примечание. Если другие классы хотят получить доступ к этой переменной, они могут получить к ней доступ следующим образом: Сотрудник.DEPARTMENT.
В этой главе мы узнали о типах переменных Java, а в следующей главе мы познакомимся с использованием модификаторов Java.