Статические поля в Java

Иногда бывает полезно иметь значения, общие для всех экземпляров определенного класса. Статические поля и статические константы позволяют использовать этот тип совместного использования, принадлежая к классу , а не к реальным объектам.

Статический модификатор

Обычно поля и методы, определенные в классе, могут использоваться только после создания объекта этого типа класса. Например, рассмотрим простой класс Item, который отслеживает товары в магазине:

 
 Public class Item {

 private String itemName; 

 

 публичный элемент (String itemName)  

 {

 this.itemName = itemName; 

}  

 

 public String getItemName () 

 {

 return itemName; 

} 

} 

Чтобы использовать метод getItemName (), мы должны сначала создать объект Item, в данном случае catFood:

 
 public class StaticExample {

 

 public static void  main (String [] args) {

 Item catFood = new Item ("Whiskas"); 

 System.out  .println (catFood.getItemName ()); 

} 

} 

Однако , если модификатор static включен в объявление поля или метода, для использования поля или метода не требуется экземпляр класса – они связаны с классом, а не с отдельным объектом. Если вы посмотрите на приведенный выше пример, вы увидите, что статический модификатор уже используется в объявлении основного метода:

 
 public  static  void main (String [] args) {

Основной метод – это статический метод, который не требуется, чтобы объект существовал, прежде чем он может быть вызван. Поскольку main () является отправной точкой для любого приложения Java, на самом деле уже не существует объектов, которые могли бы его вызвать. Если вам хочется, чтобы программа постоянно вызывала сама себя, вы могли бы сделать это:

 
 public class StaticExample {

 

 public static void main (String [] args) {

 

 String [] s = {"random", "string"}; 

 StaticExample.main (s  ); 

} 

} 

 

Не очень полезно, но обратите внимание, как метод main () может быть вызван без экземпляра класса StaticExample.

Что такое статическое поле?

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

 
 public class Item {

 

//статическое поле uniqueId 

 private static int uniqueId = 1  ; 

 

 private int itemId; 

 private String itemName  ; 

 

 public Item (String itemName) 

 {  

 this.itemName = itemName; 

 itemId = uniqueId; 

 uniqueId ++; 

} 

} 

 

Поля itemId и itemName являются обычными нестатическими полями. Когда создается экземпляр класса Item, эти поля будут иметь значения, которые хранятся внутри этого объекта. Если создается другой объект Item, он также будет иметь поля itemId и itemName для хранения значений.

Статическое поле uniqueId, однако, содержит значение, которое будет одинаково для всех объектов Item. Если имеется 100 объектов Item, будет 100 экземпляров полей itemId и itemName, но только одно статическое поле uniqueId.

В приведенном выше примере uniqueId используется для присвоения каждому объекту Item уникального номера. Это легко сделать, если каждый созданный объект Item принимает текущее значение в статическом поле uniqueId и затем увеличивает его на единицу. Использование статического поля означает, что каждому объекту не нужно знать о других объектах, чтобы получить уникальный идентификатор. Это может быть полезно, если вы хотите знать порядок, в котором были созданы объекты Item.

Что такое статическая константа?

Статические константы точно такие же, как статические поля, за исключением того, что их значения не могут быть изменены. В объявлении поля используются модификаторы final и static . Например, возможно, класс Item должен наложить ограничение на длину itemName. Мы могли бы создать статическую константу maxItemNameLength:

 
 Public class Item {

 

 private static int id = 1; 

 public static final int maxItemNameLength = 20; 

 

 private int itemId; 

 private String itemName; 

 

 public Item (String itemName) 

 {

 if (itemName.length ()> maxItemNameLength) 

 {

 this.  itemName = itemName.substring (0,20); 

} 

 else 

 {

 это. itemName = itemName; 

} 

 itemId = id; 

 Id ++; 

}} 

Как и в случае со статическими полями, статические константы скорее связаны с классом чем отдельный объект:

 
 public class StaticExample {

  

 public static void main (String [] args) {

 

 Предмет catFood = new Item ("Whiskas"); 

 System.out.println (catFood.getItemName ()); 

 System.out.println (Item.maxItemNameLength); 

} 

} 

 

О статической константе maxItemNameLength следует обратить внимание на два важных момента:

  • Он объявлен как общедоступное поле. Как правило, делать поле общедоступным в любом создаваемом вами классе – плохая идея, но в данном случае это не имеет значения. Значение константы нельзя изменить.
  • Статическая константа используется из имени класса Item, а не объекта Item.

Статические константы можно увидеть в Java API. Например, у целочисленного класса-оболочки есть два, которые хранят максимальное и минимальное значения, которые может иметь тип данных int:

 
  System.out.println ("Максимальное значение для int:" + Integer.MAX_VALUE); 

 System.out.println ("Минимальное значение для int:"  + Integer.MIN_VALUE); 

 

 Вывод: 

  Максимальное значение для int: 2147483647 

 Минимальное значение для int: -2147483648 

 

Оцените статью
recture.ru
Добавить комментарий