русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Тип переменной и тип ее значения


Дата добавления: 2015-06-12; просмотров: 588; Нарушение авторских прав


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

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

Начнем с переменных примитивных типов. Поскольку эти перемен­ные действительно хранят само значение, то их тип всегда точно совпадает с типом значения.

Проиллюстрируем это правило на примере:

byte b=3; char с='А'+3; long nn=b+c; double cl=m-3F;

Здесь переменная b будет хранить значение типа byte после сужения целочисленного литерала типа int. Переменная с будет хранить тип char после того, как компилятор осуществит сужающее преобразование ре­зультата суммирования, который будет иметь тип int. Для переменной m выполнится расширение результата суммирования типа от int к типу long. Наконец, переменная d будет хранить значение типа double, получивше­еся в результате расширения результата разности, который имеет тип float.

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

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

Итак, какова связь между типом ссылочной переменной и ее значе­ния? Здесь главное ограничение — проверка компилятора, который следит, чтобы все действия, выполняющиеся над объектом, были корректны. ^Компилятор не может предугадать, на объект какого класса будет реально



ссылаться та или иная переменная. Все, чем он располагает, — тип самой переменной. Именно его и использует компилятор для проверок. А значит, все допустимые значения переменной должны гарантированно обладать свойствами, определенными в классе-типе этой переменной. Такую га­рантию дает только наследование. Отсюда получаем правило: ссылочная переменная типа А может указывать на объекты, порожденные от самого типа А или его наследников.

Point р = newPoJntO;

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

Parent р = new ChildO;

Такое присвоение корректно, так как класс Child порожден от Parent. Однако теперь допустимые действия над переменной р, а значит, над объ­ектом, только что созданным на основе класса Child, ограничены возмож­ностями класса Parent. Например, если в классе Child определен некий но­вый метод newChildMethodO, то попытка его вызвать p.newChildMethod() будет порождать ошибку компиляции Необходимо подчеркнуть, что ника­ких изменений с самим объектом не происходит, ограничение порождает­ся используемым способом доступа к этому объекту - переменной типаParent.

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

((Child)p).newChildMethodO;

Здесь вначале проводится явное сужение к типу Child. Во время ис­полнения программы JVM проверит, совместим ли тип объекта, на кото­рый ссылается переменная р, с типом Child. В нашем случае это именно так. В результате получается ссылка типа Child, поэтому становится допу­стимым вызов метода newChildMethodO, который вызывается у объекта. созданного в предыдущей строке.

Обратим внимание на важный частный случай - переменная типа Object может ссылаться на объекты любого типа.

В дальнейшем, с изучением новых типов (абстрактных классов, ин­терфейсов, массивов) этот список будет продолжаться, а пока коротко обобщим то, что было рассмотрено в данном разделе.

Табл. 7.2. Тип переменной и тип ее значения.



<== предыдущая лекция | следующая лекция ==>
Вызов метода | Заключение


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.054 сек.