Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 12 лет назад пользователемwww.school30.spb.ru
2 Типы данных и основы ООП Андрей Дмитриев
3 Что такое тип данных?
4 Тип данных Спектр значений Набор допустимых операций
5 Программа Примитивные и ссылочные типы. Размеры данных. Преобразование и приведение типов. Массивы. Основы ООП.
6 Примитивные и ссылочные типы Язык Java является объектно-ориентированным, но существуют типы данных (простые/примитивные), не являющиеся объектами. > Фактор производительности. Простые типы делятся на 4 группы: > целые: int, byte, short, long > числа с плавающей точкой: float, double > символы: char > логические: boolean Введение в синтаксис языка классов позволяет создавать свои типы, получившие название ссылочных.
7 Примитивные типы DoubleIEEE754 64double Void---void FloatIEEE754 32float Long2^63-1-2^6364long Integer2^31-1-2^3132int Short2^15-1-2^1516short Byte byte CharacterU2^16-1Unicode 016char Boolean---boolean Класс- оболочка Макс. значение Мин. значение Размер(бит) Примитивный тип
8 Размер типа данных Размер одинаков для всех платформ; за счет этого становится возможной переносимость кода. Размер boolean неопределен. Указано, что он может принимать значения true или false.
9 Значения по умолчанию 0.0ddouble 0.0ffloat 0Llong 0int (short)0short (byte)0byte '\u0000' (null)char falseboolean Значение по умолчаниюПримитивный тип Неинициализированная явно переменная (член класса) примитивного типа принимает значение в момент создания:
10 Использование значения по умолчанию Значение по умолчанию может быть неразрешенным в конкретной программе. Рекомендуется присвоение значения в момент создания переменной: int i = 0; Неинициализированная локальная переменная – ошибка компиляции.
11 Классы-оболочки Часто переменные примитивных типов должны быть использованы к качестве объектов. Для каждого примитивного типа Java в пакете java.lang существует класс-оболочка: Long, Integer, Float,… Класс-оболочка – немодифицируемый класс char symbol = 'x'; Character symbol = new Character(c);
12 Числа с высокой точностью Предназначены для проведения расчетов без потери точности. Не имеют примитивных аналогов. BigInteger – для представления длинных целых чисел. BigDecimal – для представления больших чисел с плавающей точкой.
13 Приведение типов Приведение – это изменение типа (автоматическое или явное). Явное приведение позволяет : сделать тип преобразования более точным. форсировать преобразование, если оно не может быть выполнено автоматически.
14 Расширяющее преобразование int x = 200; long y = (long)x; long value = (long)200; //необязательно, т.к. компилятор делает это автоматически Результирующий тип имеет больший диапазон значений, чем исходный тип:
15 Сужающее преобразование long value = 1000L; int value2 = (int)value; //обязательно. Иногда это единственный способ сделать код компилируемым Результирующий тип имеет больший диапазон значений, чем исходный тип.
16 Приведение ссылочных типов Java позволяет проводить приведение от любого примитивного типа к любому примитивному типу, за исключением boolean. Для классов действуют несколько другие правила приведения.
17 Литералы Литерал - это конкретное значение, присвоенное или использованное в выражении: //использование при присвоении int i1 = 0; char c = 2; //использование при сравнении if (c == 1) { //использование в бинарной операции i1 = i ; }
18 Литералы (cont.) // восьмеричное представление (ведущий ноль) int i3 = 0177; // суффикс для long long n1 = 200L; //рекомендуется пользоваться заглавной L long n2 = 200l; Для числовых типов можно указывать систему счисления и тип литерала. По умолчанию тип литерала – int.
19 Литералы (cont.) float f1 = 1; float f2 = 1F; // суффикс для float float f3 = 1f; // суффикс для float float f4 = 1e-45f; // 10 - основание степени double d1 = 1d; // суффикс для double double d2 = 1D; // суффикс для double double d3 = 47e47d; //10 - основание степени Для литералов чисел с плавающей точкой можно указывать тип литерала и задавать экспоненциальную запись числа.
20 Символы и кодировки Печатные символы можно записать в апострофах: ' а ', ' N ', ' ? '. Код любого символа с десятичной кодировкой от 0 до 255 можно задать, записав его не более чем тремя цифрами в восьмеричной системе счисления в апострофах после обратной наклонной черты: – ' \123 ' буква S, – ' \346 ' буква Ж в кодировке СР1251. – Наибольший код ' \377 ' десятичное число 255. Код любого символа в кодировке Unicode набирается в апострофах после обратной наклонной черты и латинской буквы u ровно четырьмя шестнадцатеричными цифрами: – ' \u0053 ' буква S, – ' \u0416 ' буква Ж.
21 Символы и кодировки (продолжение) Прописные русские буквы в кодировке Unicode занимают диапазон: – от ' \u0410 ' заглавная буква А, – до ' \u042F ' заглавная Я. Строчные буквы: – от ' \u0430 ' а, – до ' \u044F ' я. В какой бы форме ни записывались символы, компилятор переводит их в Unicode, включая и исходный текст программы. Компилятор и исполняющая система Java работают только с кодировкой Unicode.
22 Управляющие символы Значение Код ASCII Запись символа апостроф' \' ' кавычка' \" ' обратная наклонная черта' \\ ' символ горизонтальной табуляции НТ ' \t ' символ возврата на шаг BS' \b ' символ перевода страницы FF' \f ' символ возврата каретки CR' \r ' символ перевода строки newline' \n '
23 Ссылочные типы данных Программист имеет возможность создавать свои ссылочные типы. String s; //создание ссылки s = Hello; //присвоение значения String s1 = new String(World); Для большинства классов используется оператор new:
24 Константы Переменные с неизменяемыми значениями называются константами. final int MAXIMUM_SPEED = 250;
25 Операции Выделяют четыре типа: – арифметические, – поразрядные, – отношений, – логические.
26 Арифметические операции Остаток от деления% Инкремент.++ Декремент.-- Деление/ Умножение* Вычитание- Сложение+ Операнды должны иметь числовой тип. Можно использовать операции на типе char.
27 Поразрядные (bitwise) операции Действуют на индивидуальные биты. Применяются для числовых операндов. Сдвиг вправо>> Сдвиг влево>> Исключающее ИЛИ^ ИЛИ| И& Отрицание~
28 Операции отношений Определяют отношения, которые один операнд имеет к другому. Больше или равно>= Меньше или равно Не равно!= Равно==
29 Логические операции Работают только с типом boolean. Исключающее ИЛИ^ Не равно!= Троичная условная операция ?: Равно== Отрицание! ИЛИ|| И&&
30 Размещение сущностей Переменная может быть размещена в одном из двух хранилищ: Стек – расположен в памяти VM и имеет поддержку в виде указателя стека. Куча (heap) – область памяти VM, в которой хранятся все ссылочные типы. Переменной простого типа выделяется память в стеке. Ссылки располагаются в куче.
31 Массивы Для хранения нескольких однотипных значений используется ссылочный тип – массив: //примитивный тип, размер массива задан явно int price[] = new int[10]; //неявное задание размера int rooms[] = new int[]{1, 2, 3}; //содержит ссылочные переменные Item [] items = new Item[10]; Item [] undefinedItems = new Item[]{ new Item(1), new Item(2), new Item(3)};
32 Доступ к элементам массива for (int i = 0; i < undefinedItems.length; i++){ // должен быть представим в виде // строки (переопределен метод // toString()) System.out.println(undefinedItems[i]); } Доступ осуществляется по индексу. Размер хранится в немодифицируемом поле массива length.
33 Многомерный массив Является массивом массивов. Многомерный массив концептуально представляет собой многомерную матрицу. int twoDim [][] = new int[4][5];
34 Массив массивов Каждый из массивов может иметь отличную от других длину. int twoDim [][] = new int[4][]; twoDim[0] = new int [10]; twoDim[1] = new int [20]; twoDim[2] = new int [30]; twoDim[3] = new int [100];
35 Ошибки времени выполнения public class Main { public static void main(String[] args) { int array [] = new int[]{1, 2, 3}; System.out.println(array[3]); } //попытка обратиться к несуществующему //индексу: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3 at Main.main(Main.java:27) Обращение к несуществующему индексу массива отслеживается виртуальной машиной во время исполнения кода:
36 Ошибки времени выполнения (cont.) Object x[] = new String[3]; //попытка поместить в массив содержимое //несоответствующего типа x[0] = new Integer(0); Exception in thread "main" java.lang.ArrayStoreException: java.lang.Integer at Main.main(Main.java:22) Попытка поместить в массив неподходящий элемент пресекается виртуальной машиной:
37 Строки Класс java.lang.String представляет собой хранилище символов и функциональность для работы с ними. Строка имеет фиксированную длину и не завершается специальным символом. Возможности: –обращение к символу по его номеру, –поиск, –выделение подстроки, –изменение регистра, –и т.п. Объект класса String – неизменяем.
38 Основы ООП Инкапсуляция (сокрытие данных) - объединение в одной сущности данных и методов работы с ними. Наследование – возможность класса-наследника приобретать признаки класса-предка. Полиморфизм – способность наследников по-другому реализовывать возможности предков. Объект способен проявлять признаки своего предка.
39 Инкапсуляция Состояние объекта определяется значениями его полей. Сокрытие данных осуществляется с помощью установки модификаторов, влияющих на видимость членов класса. В языке Java используется несколько уровней сокрытия.
40 Модификаторы доступа полей Нет модификатора – данное поле доступно отовсюду в данном пакете. public – поле доступно отовсюду. private - поле доступно только в данном классе. protected - поле доступно в данном классе и во всех его наследниках.
41 Полиморфизм class Animal { void talk(){…}; } class Dog extends Animal { void talk() { System.out.println("Woof!"); } } class Cat extends Animal { void talk() { System.out.println("Meow!"); } } Экземпляр класса может выступать как экземпляр любого класса-предка данного класса.
42 Полиморфизм (cont.) Animal myDog = new Dog(); Animal myCat = new Cat(); Экземпляр класса Dog или Cat одновременно является экземпляром класса Animal:
43 Наследование Наследование - это такое отношение между классами, когда один класс повторяет структуру и поведение другого класса (одиночное наследование) или других классов (множественное наследование).
44 Ромбическое наследование abstract class Animal { abstract void talk(); } class Frog extends Animal { void jump() { //прыгать} } class Bird extends Animal { void fly() {//летать } } //ошибка, разрешено наследоваться только от одного класса. class FlyingFrog extends Frog, Bird{…} Класс не может приобретать свойства нескольких других классов через механизм наследования:
45 Ромбическое наследование (cont.) interface Flying { void fly(); } class Frog { void jump() { //прыгать} } class Bird implements Flying{ void fly() {//летать } } class FlyingFrog extends Frog implements Flying{…} //разрешено Для передачи свойств сразу от нескольких сущностей был введен новый тип данных – интерфейс. Использую дополнительную сущность, можно добиться того же результата как и при множественном наследовании:
46 Тест Может ли конструктор класса быть помеченным модификатором private? Можно ли значение переданного в метод параметра модифицировать так, что бы изменилось его значение в контексте вызывающего метода?
47 Правда ли что… В Java нет специальных обозначений для бинарного представления литералов, например : int t = B; Литерал 47e47d имеет значение 47*10^47 и имеет тип double? char может хранить символы в Unicode формате?
48 Ссылки Ekkel B. Thinking in Java (Философия Java)
49 Questions & Answers Q UESTIONS A NSWERS &
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.