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

Что такое поле класса

  • автор:

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

Здесь мы будем рассматривать только простые переменные 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 для экспертов свойств типа агента, см. рисунок ниже:

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

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

Поля (Руководство по программированию в C#)

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

Класс или структура может иметь поля экземпляра и (или) статические поля. Поля экземпляра относятся только к экземпляру типа. Если у вас есть класс T с полем F экземпляра, можно создать два объекта типа T и изменить значение каждого объекта, не влияя на значение F в другом объекте. Напротив, статическое поле принадлежит самому типу и является общим для всех экземпляров этого типа. Доступ к статическому полю можно получить только с помощью имени типа. Если вы обращаетесь к статическому полю по имени экземпляра, вы получите ошибки времени компиляции CS0176.

Как правило, следует объявить private или protected специальные возможности для полей. Данные, которые тип представляет клиентскому коду, должны предоставляться через методы, свойства и индексаторы. Используя эти конструкции для косвенного доступа к внутренним полям, можно предотвратить использование недопустимых входных значений. Закрытое поле, которое хранит данные, представленные открытым свойством, называется резервным хранилищем или резервным полем. Вы можете объявить public поля, но затем нельзя запретить коду, использующего тип, задать это поле в недопустимое значение или изменить данные объекта.

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

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

public class CalendarEntry < // private field (Located near wrapping "Date" property). private DateTime _date; // Public property exposes _date field safely. public DateTime Date < get < return _date; >set < // Set some reasonable boundaries for likely birth dates. if (value.Year >1900 && value.Year else < throw new ArgumentOutOfRangeException("Date"); >> > // public field (Generally not recommended). public string? Day; // Public method also exposes _date field safely. // Example call: birthday.SetDate("1975, 6, 30"); public void SetDate(string dateString) < DateTime dt = Convert.ToDateTime(dateString); // Set some reasonable boundaries for likely birth dates. if (dt.Year >1900 && dt.Year else < throw new ArgumentOutOfRangeException("dateString"); >> public TimeSpan GetTimeSpan(string dateString) < DateTime dt = Convert.ToDateTime(dateString); if (dt.Ticks < _date.Ticks) < return _date - dt; >else < throw new ArgumentOutOfRangeException("dateString"); >> > 

Для доступа к полю в экземпляре добавьте точку после имени экземпляра, за которой следует имя поля, как в instancename._fieldName . Например:

CalendarEntry birthday = new CalendarEntry(); birthday.Day = "Saturday"; 

Полю можно присвоить начальное значение с помощью оператора присваивания при объявлении поля. Чтобы автоматически назначить поле Day , например полю «Monday» , нужно объявить Day , как в следующем примере:

public class CalendarDateWithInitialization < public string Day = "Monday"; //. >

Поля инициализируются непосредственно перед вызовом конструктора для экземпляра объекта. Если конструктор назначает значение поля, он перезаписывает любое значение, заданное во время объявления поля. Дополнительные сведения см. в разделе Использование конструкторов.

Инициализатор поля не может ссылаться на другие поля экземпляров.

Поля можно пометить как public , private , , protected , protected internal internal или private protected . Эти модификаторы доступа определяют, каким образом пользователи типа смогут получать доступ к полю. Дополнительные сведения см. в статье Модификаторы доступа.

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

Поле можно объявить readonly . Полю только для чтения можно присвоить значение только во время инициализации или в конструкторе. static readonly Поле похоже на константу, за исключением того, что компилятор C# не имеет доступа к значению статического поля только для чтения во время компиляции, только во время выполнения. Дополнительные сведения см. в разделе Константы.

Поле можно объявить required . Обязательное поле должно быть инициализировано конструктором или инициализаторами объектов при создании объекта. Атрибут добавляется в System.Diagnostics.CodeAnalysis.SetsRequiredMembersAttribute любое объявление конструктора, которое инициализирует все необходимые элементы.

required Модификатор не может сочетаться с модификатором readonly в том же поле. Однако свойство может быть required и init только.

Начиная с C# 12, параметры первичного конструктора являются альтернативой объявлению полей. Если тип имеет зависимости, которые должны быть предоставлены при инициализации, можно создать первичный конструктор, предоставляющий эти зависимости. Эти параметры могут быть записаны и использованы вместо объявленных полей в типах. В случае типов параметры первичного конструктора record отображаются как общедоступные свойства.

Спецификация языка C#

Дополнительные сведения см. в спецификации языка C#. Спецификация языка является предписывающим источником информации о синтаксисе и использовании языка C#.

См. также

  • Система типов C#
  • Использование конструкторов
  • Наследование
  • Модификаторы доступа
  • Абстрактные и запечатанные классы и члены классов

Совместная работа с нами на GitHub

Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

Поле класса имеет возвращаемый тип, что и сам класс

Создание класса с полями. Одно из полей имеет возвращаемый тип, что и класс

Допустим создан класс Person, у которого есть какие-то поля. И одно из полей имеет тип класса, в который он и входит. Как руководствоваться данным полем. Какие значение оно может принимать и вообще в каких случаях данная реализация нужна?

Отслеживать
28.7k 22 22 золотых знака 61 61 серебряный знак 143 143 бронзовых знака
задан 5 ноя 2018 в 23:25
23 3 3 бронзовых знака

Это обычное поле класса, с ним можно делать все, что можно делать с полем класса. Подробное используется во многих случаях, например, при реализации связанного списка.

5 ноя 2018 в 23:33
а какие значение данное поле может принимать?
5 ноя 2018 в 23:36

Я бы к ответу ещё добавил, что не стоит такое поле (или свойство) инициализировать сразу же, то есть в теле класса писать Person Friend1 = new Person(); (или в конструкторе), иначе получишь переполнение стека. Такой код просто попадет в бесконечную рекурсию и вылетит с ошибкой. Это конечно очевидная вещь, но на всякий случай)

6 ноя 2018 в 6:24
спасибо за вклад)
6 ноя 2018 в 10:03

1 ответ 1

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

Во-первых, у вас здесь не поля, а свойства. Важно разбираться. Джефри Рихтер («CLR via C#»): Можно считать свойства «умными» полями, то есть полями с дополнительной логикой. <. >Cвойства выглядят как поля, на самом деле являясь методами. Важно разбираться.

Во-вторых, создавать поле/свойство Person.person не рекомендую, так как желательно, чтобы из названия поля можно было понять для чего оно предназначено.

Поле/свойство определенного типа может принимать только значения этого типа, в данном случае Person.

Ну и для чего это нужно, например:

 public class Person < public int Agepublic string Name public Person Friend1 // Это значит, что Friend1 и Friend2 являются объектами типа Person, public Person Friend2 // и у них также есть свойства Age, Name, Friend1, Friend2 (не обязательно заполненные) > static void Main() < Person person1 = new Person(); Person person2 = new Person(); Person person3 = new Person(); //Создали 3 человек person1.Name = "Alex"; person1.Age = 12; person1.Friend1 = person2; person1.Friend2 = person3; // person1 содержит 2 ссылки на своих друзей - person2 и person3 person2.Name = "Dan"; person2.Age = 13; // person2.Friend1="Alex"; - выдаст исключение, потому что Friend1 должно быть типом Person person2.Friend1 = person1; // person2 дружит только с person1, второго друга нет person3.Name = "Bill"; // у person3 вообще нет друзей person3.Age = 14; >

Пример очень утрированный, но суть думаю ясна.

Поле класса

По́ле кла́сса или атрибу́т (переменная-член, data member, class field, instance variable) в объектно-ориентированном программировании — переменная, связанная с классом или объектом. Все данные объекта хранятся в его полях. Доступ к полям осуществляется по их имени. Обычно тип данных каждого поля задаётся в описании класса, членом которого является поле.

Связанные понятия

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

Ме́тод в объектно-ориентированном программировании — это функция или процедура, принадлежащая какому-то классу или объекту.

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

Конста́нта в программировании — способ адресации данных, изменение которых рассматриваемой программой не предполагается или запрещается.

Примитивный (встроенный, базовый) тип — тип данных, предоставляемый языком программирования как базовая встроенная единица языка.

Каламбур типизации является прямым нарушением типобезопасности. Традиционно возможность построить каламбур типизации связывается со слабой типизацией, но и некоторые сильно типизированные языки или их реализации предоставляют такие возможности (как правило, используя в связанных с ними идентификаторах слова unsafe или unchecked). Сторонники типобезопасности утверждают, что «необходимость» каламбуров типизации является мифом.

Блок (также говорят блок кода, блок команд, блок инструкций) в программировании — это логически сгруппированный набор идущих подряд инструкций в исходном коде программы, является основой парадигмы структурного программирования.

В языках программирования объявле́ние (англ. declaration) включает в себя указание идентификатора, типа, а также других аспектов элементов языка, например, переменных и функций. Объявление используется, чтобы уведомить компилятор о существовании элемента; это весьма важно для многих языков (например, таких как Си), требующих объявления переменных перед их использованием.

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

Абстракция данных — популярная и в общем неверно определяемая техника программирования. Фундаментальная идея состоит в разделении несущественных деталей реализации подпрограммы и характеристик, существенных для корректного её использования. Такое разделение может быть выражено через специальный «интерфейс», сосредотачивающий описание всех возможных применений программы.

Объектами первого класса (англ. first-class object, first-class entity, first-class citizen) в контексте конкретного языка программирования называются элементы, которые могут быть переданы как параметр, возвращены из функции, присвоены переменной.

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

Пара́метр в программировании — принятый функцией аргумент. Термин «аргумент» подразумевает, что конкретно и какой конкретной функции было передано, а параметр — в каком качестве функция применила это принятое. То есть вызывающий код передает аргумент в параметр, который определен в члене спецификации функции.

При́месь (англ. mix in) — элемент языка программирования (обычно класс или модуль), реализующий какое-либо чётко выделенное поведение. Используется для уточнения поведения других классов, не предназначен для порождения самостоятельно используемых объектов.

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

Запись — агрегатный тип данных, инкапсулирующий без сокрытия набор значений различных типов.

Инкапсуляция (англ. encapsulation, от лат. in capsula) — в информатике упаковка данных и функций в единый компонент.

Дестру́ктор — специальный метод класса, служащий для деинициализации объекта (например освобождения памяти).

Замыкание (англ. closure) в программировании — функция первого класса, в теле которой присутствуют ссылки на переменные, объявленные вне тела этой функции в окружающем коде и не являющиеся её параметрами. Говоря другим языком, замыкание — функция, которая ссылается на свободные переменные в своей области видимости.

Мона́да — это абстракция линейной цепочки связанных вычислений. Монады позволяют организовывать последовательные вычисления.

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

Область видимости (англ. scope) в программировании — часть программы, в пределах которой идентификатор, объявленный как имя некоторой программной сущности (обычно — переменной, типа данных или функции), остаётся связанным с этой сущностью, то есть позволяет посредством себя обратиться к ней. Говорят, что идентификатор объекта «виден» в определённом месте программы, если в данном месте по нему можно обратиться к данному объекту. За пределами области видимости тот же самый идентификатор может быть.

Идиома программирования — устойчивый способ выражения некоторой составной конструкции в одном или нескольких языках программирования. Идиома является шаблоном решения задачи, записи алгоритма или структуры данных путём комбинирования встроенных элементов языка.

Пространство имён — некоторое множество каким-либо образом взаимосвязанных имён или терминов.

Динамическая идентификация типа данных (англ. run-time type information, run-time type identification, RTTI) — механизм в некоторых языках программирования, который позволяет определить тип данных переменной или объекта во время выполнения программы.

Из-за путаницы с терминологией словом «оператор» в программировании нередко обозначают операцию (англ. operator), см. Операция (программирование).Инстру́кция или опера́тор (англ. statement) — наименьшая автономная часть языка программирования; команда или набор команд. Программа обычно представляет собой последовательность инструкций.

Мно́жественное насле́дование — свойство, поддерживаемое частью объектно-ориентированных языков программирования, когда класс может иметь более одного суперкласса (непосредственного класса-родителя), интерфейсы поддерживают множественное наследование во многих языках программирования. Эта концепция является расширением «простого (или одиночного) наследования» (англ. single inheritance), при котором класс может наследоваться только от одного суперкласса.

Объе́кт в программировании — некоторая сущность в цифровом пространстве, обладающая определённым состоянием и поведением, имеющая определенные свойства (атрибуты) и операции над ними (методы). Как правило, при рассмотрении объектов выделяется то, что объекты принадлежат одному или нескольким классам, которые определяют поведение (являются моделью) объекта. Термины «экземпляр класса» и «объект» взаимозаменяемы.

Таблица виртуальных методов (англ. virtual method table, VMT) — координирующая таблица или vtable — механизм, используемый в языках программирования для поддержки динамического соответствия (или метода позднего связывания).

Абстра́ктный тип да́нных (АТД) — это математическая модель для типов данных, где тип данных определяется поведением (семантикой) с точки зрения пользователя данных, а именно в терминах возможных значений, возможных операций над данными этого типа и поведения этих операций.

Интроспекция (англ. type introspection) в программировании — возможность запросить тип и структуру объекта во время выполнения программы. Особое значение имеет в языке Objective C, однако имеется почти во всех языках, позволяющих манипулировать типами объектов как объектами первого класса; среди языков, поддерживающих интроспекцию — C++ (с RTTI), Go, Java, JavaScript, Perl, Ruby, Smalltalk; в PHP и Python интроспекция интегрирована в сам язык. Интроспекция может использоваться для реализации ad-hoc-полиморфизма.

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

Объе́ктный мо́дуль (также — объектный файл, англ. object file) — файл с промежуточным представлением отдельного модуля программы, полученный в результате обработки исходного кода компилятором. Объектный файл содержит в себе особым образом подготовленный код (часто называемый двоичным или бинарным), который может быть объединён с другими объектными файлами при помощи редактора связей (компоновщика) для получения готового исполнимого модуля либо библиотеки.

Зарезерви́рованное сло́во (или ключево́е сло́во) — в языках программирования слово, имеющее специальное значение. Идентификаторы с такими именами запрещены.

Интерфейс (англ. interface) — основной шаблон проектирования, являющийся общим методом для структурирования компьютерных программ для того, чтобы их было проще понять. В общем, интерфейс — это класс, который обеспечивает программисту простой или более программно-специфический способ доступа к другим классам.

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

По одной из классификаций, языки программирования неформально делятся на сильно и слабо типизированные (англ. strongly and weakly typed), то есть обладающие сильной или слабой системой типов. Эти термины не являются однозначно трактуемыми, и чаще всего используются для указания на достоинства и недостатки конкретного языка. Существуют более конкретные понятия, которые и приводят к называнию тех или иных систем типов «сильными» или «слабыми».

В программировании термин «директива» (указание) по использованию похож на термин «команда», так как также используется для описания некоторых конструкций языка программирования (то есть указаний компилятору или ассемблеру особенностей обработки при компиляции).

Побо́чные эффе́кты (англ. side effects) — любые действия работающей программы, изменяющие среду выполнения (англ. execution environment). Например, к побочным эффектам относятся.

В объектно-ориентированном программировании под агрегированием (или как его еще называют — делегированием) подразумевают методику создания нового класса из уже существующих классов путём их включения. Об агрегировании также часто говорят как об «отношении принадлежности» по принципу «у машины есть корпус, колёса и двигатель».

Фу́нкция вы́сшего поря́дка — в программировании функция, принимающая в качестве аргументов другие функции или возвращающая другую функцию в качестве результата. Основная идея состоит в том, что функции имеют тот же статус, что и другие объекты данных. Использование функций высшего порядка приводит к абстрактным и компактным программам, принимая во внимание сложность производимых ими вычислений.

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

Код операции, операционный код, опкод — часть машинного языка, называемая инструкцией и определяющая операцию, которая должна быть выполнена.

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

Сериализация (в программировании) — процесс перевода какой-либо структуры данных в последовательность битов. Обратной к операции сериализации является операция десериализации (структуризации) — восстановление начального состояния структуры данных из битовой последовательности.

Сравне́ние в программировании — общее название ряда операций над па́рами значений одного типа, реализующих математические отношения равенства и порядка. В языках высокого уровня такие операции, чаще всего, возвращают булево значение («истина» или «ложь»).

Ленивые вычисления (англ. lazy evaluation, также отложенные вычисления) — применяемая в некоторых языках программирования стратегия вычисления, согласно которой вычисления следует откладывать до тех пор, пока не понадобится их результат. Ленивые вычисления относятся к нестрогим вычислениям. Усовершенствованная модель ленивых вычислений — оптимистичные вычисления — переходит в разряд недетерминированных стратегий вычисления.

Библиотека стандартных шаблонов (STL) (англ. Standard Template Library) — набор согласованных обобщённых алгоритмов, контейнеров, средств доступа к их содержимому и различных вспомогательных функций в C++.

Кома́нда — это указание компьютерной программе действовать как некий интерпретатор для решения задачи. В более общем случае, команда — это указание некоему интерфейсу командной строки, такому как shell.

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

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

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