Что делают поля в java
Перейти к содержимому

Что делают поля в java

  • автор:

Что делают поля в java

На этом шаге мы поговорим про статические поля и методы

При объявлении метода main() во всех рассматривавшихся ранее примерах программ мы использовали модификатор static . Рассмотрим назначение этого модификатора доступа.

Поле с модификатором доступа static существует в одном экземпляре для всего класса. Но если поле не статическое, то каждый объект содержит его копию. Допустим, требуется присвоить уникальный идентификационный номер каждому сотруднику. Для этого достаточно добавить в класс Employee поле id и статическое поле nextId , как показано ниже.

class Employee < . private int id; private static int nextId = 1; public void setId() < id = nextId++; >>

Теперь у каждого объекта типа Employee имеется свое поле id , а также поле nextId , которое одновременно принадлежит всем экземплярам данного класса. Иными словами, если существует тысяча объектов типа Employee , то в них есть тысяча полей id : по одному на каждый объект. В то же время существует только один экземпляр статического поля nextId . Даже если не создано ни одного объекта типа Employee , статическое поле nextId все равно существует. Оно принадлежит классу, а не конкретному объекту.

Статические переменные используются довольно редко. В то же время статические константы (то есть полями, объявленными с ключевым словом final ) применяются намного чаще. Примером такой константы служит число π , определенное в классе Math . Как уже упоминалось не раз, делать поля открытыми в коде не рекомендуется, поскольку любой объект сможет изменить их значения. Но открытыми константами можно пользоваться смело.

Статическими называются методы, которые не оперируют объектами. Примером такого метода является метод pow(x, a) из класса Math (результатом метода является выражение x a ). При выполнении этого метода не используется ни один из экземпляров класса Math . Иными словами, у него нет неявного параметра this . Это означает, что в статических методах не используется текущий объект по ссылке this .

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

public static int getNextId() < return nextId; >

Чтобы вызвать этот метод, нужно указать имя класса следующим образом:

int n = Employee.getNextId();

Статические методы следует применять в двух случаях:

  • Когда методу не требуется доступ к данным о состоянии объекта, поскольку все необходимые параметры задаются явно.
  • Когда методу требуется доступ лишь к статическим полям класса.

На следующем шаге мы поговорим про параметры методов

Переменные (локальные переменные и поля класса)

Здесь мы будем рассматривать только простые переменные Java.

В зависимости от того, где объявлена переменная, это может быть:

  • Локальная переменная — вспомогательная временная переменная, существующая только во время выполнения определенной функции или блока операторов — строк кода, или
  • Переменная класса(или поле класса — более точный термин Java) — переменная, присутствующая в любом объекте класса, время жизни которой равно времени жизни объекта.

Локальные (временные) переменные

Локальные переменные объявляются в таких разделах Java кода, как блок, оператор цикла или тело функции. Они создаются и инициализируются при начале выполнения секции кода и уничтожаются после завершения его выполнения. Объявление состоит из типа переменной, имени и необязательной инициализации. Объявление представляет собой оператор (statement), поэтому его нужно заканчивать точкой с запятой. Например:

double sum = 0; // вещественная переменная sum, изначально равна 0 int k; // целочисленная переменная k, не проинициализирована String msg = ok ? "OK" : "Not OK"; // текстовая переменная msg, проинициализированная выражением

Локальные переменные можно объявить и использовать в тех полях AnyLogic, в которых задаются действия (последовательности операторов — строк кода), таких, как действие При запуске типа агента, Действие событий и переходов, Действие при входе и Действие при выходе состояний, действиях При входе и При выходе библиотечных объектов. В приведенном на рисунке ниже примере переменные sum и p объявляются в коде действия события endOfYear и существуют только во время выполнения этого фрагмента кода.

Локальные переменные, объявленные в коде Действия события

Переменные класса (поля)

Переменные Java (поля) типа агента являются частью «памяти» или «состояния» агентов. Они могут быть объявлены как графически (с помощью элемента простая переменная), так и в коде.

Переменная агента, объявленная в графическом редакторе

На рисунке выше переменная income типа int объявлена в типе агента (или эксперимента). Тип доступа — public, поэтому она будет доступна отовсюду. Начальное значение: 10000. Графическое объявление переменной эквивалентно строке кода, которую можно написать, например, в Дополнительном коде класса в секции Java для экспертов свойств типа агента, см. рисунок ниже:

Аналогичная переменная, объявленная в Дополнительном коде класса

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

Поле и/или переменная? Вот в чем вопрос

По ходу моего обучения языка Java термин «поле» не дает мне покоя. Я ни в книгах, ни в сети не нашел понятного объяснения этого явления. Кто-то говорит, что «поле» — это «переменная», просто название другое (для примера: объект и экземпляр). В других источниках — это разные вещи. Так вот, что такое «поле»? Дополнил примером. Он верный?

class MyClass< int weigth = 50; //---поле int height = 100; //---поле String str; //---поле int myMethod()< int a; //---локальная переменная (НЕ поле) int b; //---локальная переменная (НЕ поле) str = "Это строка"; //---полю присваивается значение . >> 

Отслеживать
9,009 4 4 золотых знака 19 19 серебряных знаков 28 28 бронзовых знаков
задан 16 июн 2018 в 20:58
Алексей Ефимов Алексей Ефимов
351 2 2 серебряных знака 13 13 бронзовых знаков

Поле — это скорее не просто переменная, а переменная типа инстанса, то есть то, что Вы в классе объявляете. Например, public class A . Так вот str — это поле aka. field. Есть еще локальные переменные и параметры, но это уже не филды.

16 июн 2018 в 21:02

поле — это то на что вы пишите гетеры и сетеры, а переменная это то, что внутри функции вы объявляете

16 июн 2018 в 21:03

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

16 июн 2018 в 21:14

А вообще это из-за того, что ООП по сути парадигма, которая представляет все объекты окружающего мира в виде свойств(вес, длина, кол-во ног и т.д.) и действий которые можно совершать с ним(бежать, кидать, кричать, вычислять). Объекты названы классами, их свойства названы полями, а совершаемые действия с ними методами. Когда переносим эту абстракцию на сам язык программирования, то для полей используем переменные, а для методов функции.

16 июн 2018 в 21:24

Все верно, грубо говоря это та переменная, что указывается сразу после объявления класса. Дальше просто для информации, если вы не слышали про модификаторы public и static, то потом встретите, сейчас вы используете private — видна только методам внутри класса. 1) Поле не обязательно объявлять сразу, можно их раскидать по всему телу класса, это не будет ошибкой. 2) Можно ее объявить публичной, тогда к ней можно обратиться извне: MyClass instance = new MyClass(); instance.**SomeField** = 10; 3) Она может быть статичной, тогда доступна из самого класса MyClass.**SomeField** = 10.

16 июн 2018 в 21:47

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Понятие «поле» отнюдь не является чем-то новым в Java. Оно скорее переехало из других языков, существовавших задолго до Java. Так для меня «поле» всегда ассоциировалось с названием колонки в таблице. В Java объекты имеют определенный тип, который может быть классом, интерфейсом, или перечисляемым типом. Внутри этих объектов мы можем определять переменные, которые определяют состояние этих объектов. И наподобие с таблицами, которые имею названия полей для каждой записи, мы имеем названия переменных для каждого объекта класса.

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

Понятие «поле» также имеет широкий спектр значений принятых в информатике и означает место, где находятся данные.

Отслеживать
ответ дан 17 июн 2018 в 11:58
9,009 4 4 золотых знака 19 19 серебряных знаков 28 28 бронзовых знаков
Здорово! Спасибо! Информация по ссылкам расширяет мое понимание этих терминов.
17 июн 2018 в 15:31

На английском языке 2 разных терминов:

  • field — для атрибута (переменной) в классе,
  • array — для агрегатной переменной (переменной с многими значениями, доступными через индекс).

Оба эти термины переводятся как поле.

И так ваш пример может быть верным или нет — но в его контексте можно его считать верным.

Отслеживать
ответ дан 17 июн 2018 в 15:27
16.7k 4 4 золотых знака 21 21 серебряный знак 31 31 бронзовый знак

  • java
  • ооп
  • классы
  • переменные
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.2.16.5008

Поля класса Java – подробно для новичков

Поле Java – это переменная внутри класса. Например, в классе, представляющем сотрудника, класс Работник может содержать следующие поля:

  • имя;
  • позиция;
  • оплата труда;
  • дата поступления на работу.

Может быть определен так:

public class Employee

Синтаксис объявления поля

[access_modifier] [static] [final] type name [= initial value] ;

Квадратные скобки [] вокруг некоторых ключевых слов означают, что этот параметр является необязательным. Требуется только тип и имя.

  1. Сначала модификатор доступа может быть объявлен для него. Он определяет, какие классы объектов могут получить доступ к полю. В приведенном выше примере Employee не было модификаторов доступа.
  2. Тип данных должен быть назначен. В приведенном выше примере Employee использовались типы данных String, int и Date.
  3. Может быть статическим. В Java статические поля принадлежат классу, а не экземплярам класса. Таким образом, все экземпляры любого класса будут иметь доступ к одной и той же переменной статического поля.
  4. Нестатическое значение может быть различным для каждого объекта (экземпляра) класса.
  5. Может быть объявлено как окончательное или нет. В первом случае не может изменить свое значение. Во-втором – должно иметь начальное значение, назначенное ему, и после установки значение не может быть изменено снова. Окончательное поле часто также объявляется статическим, объявляемым как static и final, также называемым « константой ».
  6. Имеет имя. Вы можете выбрать это имя свободно, но есть некоторые ограничения на то, какие символы могут содержать имя.
  7. Можете при желании установить начальное значение для него.

Некоторые из приведенных выше вариантов более подробно описаны в следующих разделах.

Модификаторы доступа

Модификатор доступа определяет, можно ли получить доступ к полю другим классам, кроме класса, владеющего полем. Существует четыре вида:

  • частный доступ – означает, что только код внутри самого класса может получить доступ к этому полю;
  • к пакету – означает, что только код внутри самого класса или других классов в том же пакете может получить доступ к полю. Вы на самом деле не пишете модификатор пакета. Оставляя любой модификатор доступа, модификатор доступа по умолчанию устанавливается в область действия пакета;
  • защищенный доступ – похож на модификатор пакета, за исключением того, что подклассы класса также могут обращаться к полю, даже если подкласс не находится в том же пакете;
  • открытый доступ – означает, что к полю могут обращаться все классы Java в вашем приложении.

Вот несколько примеров:

public class Customer < private String email; String position; //no modifier = package access modifier protected String name; public String city; >

Вышеупомянутое использование модификаторов доступа к полю используется только в этом примере. Вы можете не использовать модификаторы доступа в одном классе. Чаще всего применяются частные и защищенные. Для простых классов переноса данных все поля объявляют открытыми.

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

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

Статические поля Java расположены в классе, а не в экземплярах класса

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

public class Customer

Статические поля расположены в классе, поэтому вам не нужен экземпляр для доступа к статическим полям. Вы просто пишете имя впереди, вот так:

Customer.staticField1 = "value"; System.out.println(Customer.staticField1);

Нестатические поля Java, с другой стороны, расположены в экземплярах класса. Каждый экземпляр может иметь свои собственные значения для этих полей. Вот диаграмма, иллюстрирующая нестатические поля:

Нестатические поля Java расположены в экземплярах класса

Вы определяете нестатическое поле, просто опуская ключевое слово static. Вот пример:

public class Customer

Для доступа к нестатическому полю вам необходим экземпляр(объект), к которому вы можете получить доступ к нему:

Customer customer = new Customer(); customer.field1 = "value"; System.out.println(customer.field1);

Окончательные

Поле может быть объявлено окончательным. Не может иметь измененное значение после назначения. Для объявления добавляете ключевое слово final:

public class Customer

Значение поля field1 не может быть изменено сейчас. Это означает, что даже если поле принадлежит объектам, вы не можете изменять значение поля от объекта к объекту.

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

public class Customer

Поскольку статические конечные поля часто используются в качестве констант, соглашение об именах должно записывать имя поля в верхнем регистре и разделять слова подчеркиванием _. Вот пример:

public class Customer

Именование

Имя поля используется для ссылки на это поле из вашего кода:

Customer customer = new Customer(); customer.city = "New York"; System.out.println(customer.city);
  • Первая строка создает новый объект Customer (экземпляр класса Customer) и сохраняет его в переменной с именем customer.
  • Вторая строка присваивает значение String New York для поля города объектов Customer.
  • Третья строка выводит значение поля города на вывод консоли.

Ограничения именования и соглашения именования для полей такие же, как и для любых других типов переменных.

Начальное значение

Поле может иметь начальное значение, которое присваивается при создании в JVM. Статические поля создаются при загрузке класса. Класс загружается при первом обращении к нему в вашей программе. Нестатические поля создаются при создании объекта, которому они принадлежат.

Вот пример поля, объявленного с начальным значением:

public class Customer

Хотите ли вы инициализировать свои поля (и другие переменные) начальным значением, решать вам.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *