English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Статические переменные-Статические переменные также называются классовыми переменными. Вы можете использовать ключевое слово для объявления статической переменной. После объявления статической переменной, независимо от того, сколько объектов создано в классе, в классе существует только один экземпляр.
public static int num = 39;
Переменные-экземпляры-Эти переменные都属于 экземпляру класса (объекту). Эти в классе, но вне методов. Эти инициализируются при инстанцировании класса. Их можно получить из любого метода, конструктора или блока конкретного класса.
Вы должны использовать объект для доступа к переменным-экземплярам. То есть, чтобы получить доступ к переменным-экземплярам, вам нужно создать объект класса и использовать этот объект, чтобы получить доступ к этим переменным.
final-После объявления переменной final вы не сможете ей переассигновать значение.
Неинициализированные конечные переменные называются пустыми конечными переменными. Как и переменные-экземпляры, конечные переменные не инициализируются по умолчанию. Поэтому,После объявления конечных переменных их необходимо инициализировать..
Однако, если вы пытаетесь использовать пустые переменные в коде, это генерирует компиляционную ошибку.
В следующем Java-программе класс Student содержит два конечных переменных name и age, и они еще не инициализированы.
public class Student { public final String name; public final int age; public void display() { System.out.println("Имя студента: " + this.name); System.out.println("Возраст студента: " + this.age); } public static void main(String args[]) { new Student().display(); } }
При компиляции программа выдает следующие ошибки:
Student.java:3: ошибка: переменная name не инициализирована в конструкторе по умолчанию private final String name; ^ Student.java:4: ошибка: переменная age не инициализирована в конструкторе по умолчанию private final int age; ^ 2 ошибок
Чтобы решить эту проблему, вам нужно инициализировать объявленные конечные переменные следующим образом:
public class Student { public final String name; public final int age; public Student() { this.name = "Raju"; this.age = 20; } public void display() { System.out.println("Имя студента: " + this.name); System.out.println("Возраст студента: " + this.age); } public static void main(String args[]) { new Student().display(); } }
результат вывода
Имя студента: Raju Возраст студента: 20
Так же, если вы объявите статическую переменную final без инициализации, она будет рассматриваться как конечная статическая переменная.
Когда переменная объявлена как статическая и конечная, вы можете инициализировать ее только в статическом блоке. Если вы пытаетесь инициализировать ее в другом месте, компилятор предположит, что вы пытаетесь присвоить значение, уже присвоенное переменной, и сгенерирует ошибку компиляции:
class Data{ static final int num; Data(int i){ num = i; } } public class ConstantsExample { public static void main(String args[]) { System.out.println("worth of the constant: " + Data.num); } }
ConstantsExample.java:4: ошибка: cannot assign a value to final variable num num = i; ^ 1 ошибка
Таким образом, конечную статическую переменную необходимо инициализировать в статическом блоке.
Чтобы сделать вышеупомянутый код рабочим, вам нужно�始化 конечную статическую переменную в статическом блоке, например:
class Data{ static final int num; static{ num = 1000; } } public class ConstantsExample { public static void main(String args[]) { System.out.println("worth of the constant: " + Data.num); } }
результат вывода
worth of the constant: 1000