Опубликован: 04.12.2009 | Доступ: свободный | Студентов: 8414 / 657 | Оценка: 4.30 / 3.87 | Длительность: 27:27:00
Лекция 3:

Примитивные типы данных и операторы для работы с ними

< Лекция 2 || Лекция 3: 1234 || Лекция 4 >

Краткие итоги

  • Величины типа boolean принимают значения true или false.
  • Логические операторы && -"И", || - "ИЛИ", ^ - "Исключающее ИЛИ", ! – "НЕ" применимы к величинам булевского типа. Логические выражения в Java вычисляются в соответствии с укороченным оцениванием.
  • Операторы сравнения применимы к любым величинам a и b одного типа, а также к произвольным числовым величинам a и b, не обязательно имеющим один тип. В качестве оператора сравнения на равенство используется составной символ, состоящий из двух подряд идущих символов равенства "==".
  • В Java имеются встроенные примитивные целые типы byte, short, int, long и символьный тип char, в некотором смысле также являющийся целочисленным. При этом только тип char беззнаковый, все остальные – знаковые.
  • Для задания в тексте программы численных литерных констант типа long, выходящих за пределы диапазона чисел типа int, после написания числа следует ставить постфикс – букву L.
  • Константами называются именованные ячейки памяти с неизменяемым содержимым. Объявление констант осуществляется в классе, при этом перед именем типа константы ставится комбинация зарезервированных слов public и final.
  • В Java имеется два встроенных примитивных вещественных типа float и double (точнее, типы чисел в формате с плавающей точкой).
  • Математические функции, а также константы "пи" ( Math.PI ) и "е" ( Math.E ) заданы в классе Math, находящемся в пакете java.lang.
  • Целочисленные математические вычисления проводятся на аппаратном уровне только с величинами типа int или long. Для величин типа byte, short или char сначала происходит преобразование в тип int, после чего производится их подстановка в качестве операндов. Если же один из операндов имеет тип long, действия производятся с числами типа long, поскольку второй операнд автоматически преобразуется к этому типу.
  • При работе с вещественными величинами в Java возможна работа на аппаратном уровне только с операндами типов float и double. Если один из операндов имеет тип double, а другой float, действия производятся с числами типа double, поскольку операнд типа float автоматически преобразуется к типу double.
  • Если один из операндов целочисленный, а другой вещественный, сначала идет преобразование целочисленного операнда к такому же вещественному типу, а потом выполняется оператор.
  • В Java каждому примитивному типу сопоставляется объектный тип, то есть класс. Такие классы называются оболочечными ( class wrappers ). В общем случае они имеют те же имена, что и примитивные типы, но начинающиеся не со строчной, а с заглавной буквы. Исключение составляют типы int и char, для которых имена оболочечных классов Integer и Character.
  • Основное назначение оболочечных классов – создание объектов, являющихся оболочками над значениями примитивных типов. Процесс создание такого объекта ("коробки" - box) из значения примитивного типа называется упаковкой ( boxing ), а обратное преобразование из объекта в величину примитивного типараспаковкой ( unboxing ). Упаковка и распаковка для числовых классов осуществляется автоматически.
  • В оболочечных классах имеется ряд полезных методов и констант. Например, минимальное по модулю не равное нулю и максимальное значение числового типа можно получить с помощью констант, вызываемых через имя оболочечного типа: Integer.MIN_VALUE, Integer.MAX_VALUE, Float.MIN_VALUE , Float.MAX_VALUE, Double.MIN_VALUE , Double.MAX_VALUE. и т.п.
  • В Java имеется 15 уровней приоритета операторов. В хорошо написанной программе ставятся скобки, повышающие читаемость программы, даже если они не нужны с точки зрения таблицы приоритетов.
  • Иногда требуется использовать элементы, которые не являются ни числами, ни строками, но ведут себя как имена элементов и одновременно обладают порядковыми номерами. Например, названия месяцев или дней недели. В этих случаях используют перечисления.

Типичные ошибки:

  • Очень часто встречается ошибка, когда вместо сравнения численных значений вида a==b программист пишет a=b.Чаще всего такая ошибка возникает в условных операторах: вместо if(a==b){...} пишут if(a=b){...}. В Java такая ошибка диагностируется на этапе компиляции для всех типов, кроме булевского. Для булевских a и b вызов if(a=b){...} приведет к тому, что величине a будет присвоено значение b, и результат присваивания возвратится равным этому значению. А диагностики ошибки, к сожалению, выдано не будет.
  • Начинающие программисты, изучавшие ранее язык BASIC, пытаются использовать выражение вида a^b для возведения в степень, то есть для вычисления выражения a^b. В Java для такой операции следует использовать выражение Math.pow(a,b).
  • Программисты, изучавшие ранее C/C++, пытаются использовать логические выражения вида a&b или a|b для полной (не укороченной) оценки логических выражений. В Java нет полной (не укороченной) оценки логических выражений, а операторы & и | зарезервированы для арифметических побитовых операций "И" и "ИЛИ".
  • При использовании оператора instanceof пытаются написать instanceOf.
  • Путают класс java.lang.Math и пакет java.math.
  • Очень часто встречается ошибка, когда забывают, что для величин типа byte, short или char сначала происходит преобразование в тип int, и только после этого производится их подстановка в качестве операндов. Поэтому, в частности, побитовые операции с величинами этих типов дают те же результаты, что и при работе с величинами типа int.
  • Не ставятся скобки, группирующие операнды в длинных выражениях, где стороннему программисту неочевидна последовательность выполнения операндов.
  • Элементы перечисления пытаются задавать как строковые, или же пытаются предварительно задать числовые переменные с именами элементов перечисления.

Задания

  • На основе проекта с графическим пользовательским интерфейсом создать новый проект. В нем для каждого из целочисленных и вещественных типов задать переменные и кнопки с соответствующими надписями. При нажатии на кнопки должны показываться диалоговые панели с сообщением об имени и значении соответствующей переменной.
  • На основе проекта с графическим пользовательским интерфейсом создать новый проект. В нем сделать два пункта ввода, метку и кнопки "Сложить", "Умножить", "Разделить", "sin". По нажатию на кнопки "Сложить", "Умножить", "Разделить" в метку должен выводиться результат. Действия проводить с величинами типа double. По нажатию на кнопку "sin" в метку должен выводиться синус значения, показывавшегося до того в метке.
  • На основе проекта с графическим пользовательским интерфейсом создать новый проект. В нем сделать пункт ввода и радиогруппу с выбором варианта для каждого из целочисленных типов, а также кнопку JButton с надписью "Преобразовать в число". При выборе соответствующего варианта в пункте ввода должно возникать случайным образом генерируемое число, лежащее в пределах допустимых значений для этого типа. При нажатии на кнопку содержимое пункта ввода должно быть преобразовано в число соответствующего типа, и это значение должно быть показано с помощью диалоговой панели с сообщением.

    Работа с выбором вариантов осуществляется следующим образом:

    • if(jRadioButton1.isSelected() )
        оператор1;
    • if(jRadioButton2.isSelected())
        оператор2;
    • if(jRadioButton3.isSelected())
        оператор3;
  • Создать приложение Java с графическим пользовательским интерфейсом. В нем должно быть перечисление Spring ("весна"), в котором расположены весенние месяцы, и кнопки "m2=m1" и "Вывести значение m2". Задать две переменные типа Spring - m1 и m2. Переменную m1 инициализированной, со значением April, переменную m2 - не инициализированной. При нажатии на кнопку " m2=m1" переменной m2 должно присваиваться значение m1. При нажатии на кнопку "Вывести значение m2" должно выводиться значение переменной m2.
< Лекция 2 || Лекция 3: 1234 || Лекция 4 >
Полетаев Дмитрий
Полетаев Дмитрий
Не очень понятно про оболочечные Данные,ячейки памяти могут наверно размер менять,какое это значение те же операции только ячейки больше,по скорости тоже самое
Максим Старостин
Максим Старостин

Код с перемещением фигур не стирает старую фигуру, а просто рисует новую в новом месте. Точку, круг.