Как работают статические поля в Java

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

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

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

 публичный класс Item {

 private String itemName;


 public Item (String itemName)

 {

 this.itemName = itemName;

 }


 public String getItemName ()

 {

 вернуть itemName;

 }

 } 

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

 открытый класс StaticExample {


 public static void main (String [] args) {

 Item catFood = new Item ("Whiskas");

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

 }

 } 

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

instagram viewer
объявление основного метода:

 общественности статический void main (String [] args) { 

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

 открытый класс StaticExample {


 public static void main (String [] args) {


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

 StaticExample.main (s);

 }

 }


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

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

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

 публичный класс 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.

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

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

 публичный класс 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);

 }

 еще

 {

 this.itemName = itemName;

 }

 itemId = id;

 ID ++;

 } } 

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

 открытый класс StaticExample {


 public static void main (String [] args) {


 Item 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


instagram story viewer