- •Краткая историческая справка.
- •Преимущества языка Java.
- •Недостатки java:
- •Лекция 2. Этапы разработки java-приложений. Этапы разработки java-приложений.
- •Установка jdk.
- •Инсталляция исходных кодов библиотек
- •Инсталляция пакета документации.
- •Тестирование правильности установки и создание простейшей программы
- •Визуальные среды программирования.
- •Лекция 3. Переменные и типы данных. Переменные и типы данных.
- •Подробности о примитивных типах.
- •Лекция 4. Операторы и функции. Операторы и функции.
- •Операторы ветвлений и циклов.
- •Оператор цикла while.
- •Оператор цикла for.
- •Лекция 5. Объектно ориентированное программирование Объектно ориентированное программирование.
- •Определение объекта.
- •Инкапсуляция.
- •Наследование.
- •Полиморфизм (перегрузка).
- •Пример ооп – программы.
- •Отличие перегрузки функций от переопределения.
- •Отличие классов от интерфейсов.
- •Лекция 6. Массивы и строки. Массивы и строки.
- •Многомерные массивы.
- •Приведение типов и динамические массивы.
- •Строки в java.
- •Лекция 7. Организация ввода-вывода данных Организация ввода-вывода данных.
- •Функции стандартной библиотеки ввода/вывода.
- •Новая библиотека ввода/вывода.
- •Классы потокового ввода/вывода из пакета java.Io.
- •Лекция 8. Обработка исключений. Обработка исключений.
- •Классификация исключений.
- •Перехват исключений блоками try/catch.
- •Самостоятельное выбрасывание исключений.
- •Разработка собственных классов исключений.
- •Лекция 9. Потоки. Потоки.
- •1. Cпециальный класс Thread.
- •2. Реализация интерфейса Runnable.
- •Выбор между использованием класса Thread и интерфейса Runnable.
- •Синхронизация потоков с помощью оператора synchronized.
- •Синхронизация потоков с помощью семафоров.
- •Лекция 10. Подключаемые библиотеки java. Подключаемые библиотеки java.
- •Библиотека awt
- •Внутреннее устройство системы обработки событий awt.
- •Библиотека Swing.
Отличие перегрузки функций от переопределения.
Перегруженная функция – это копия сигнатуры функции по названию, но с другим набором входных параметров. Обычно она располагается в том же классе (как наши конструкторы), но иногда такую функцию можно поместить в наследующий класс.
Переопределенная функция – это полная копия сигнатуры функции вместе с параметрами, которую переопределяем, но с другой внутренней логикой работы. Располагается такая функция только в наследующем классе.
Тоесть, если мы хотим вызвать из класса-наследника метод, который объявлен в родительском классе, но не хотим, чтобы этот метод был вызван из родительского класса, мы создаем в классе – наследнике такую же точно функцию и снабжаем её специальной аннотацией @override. Без этой аннотации на переопределенную функцию компилятор будет ругаться. Пример:
@override
public void my_funk() { другой алгоритм работы } // в родительском есть такая же функц-я
Отличие классов от интерфейсов.
Для формирования четкого понимания настоятельно советую прочесть исчерпывающую статью на Хабре:
https://habrahabr.ru/post/30444/
В дополнение скажу, что интерфейсы довольно удобная штука в том смысле, что класс в java можно унаследовать только от одного класса и не больше. А вот реализовывать класс может сколько угодно интерфейсов. Они перечисляются в заголовке дочернего класса через запятую. В этом случае вместо ключевого слова extends в заголовке класса употребляется ключевое слово implements
Лекция 6. Массивы и строки. Массивы и строки.
Типы массивов. Объявление массива, инициализация и обращение к элементам массива. Ссылки. Приведение типов. Строки.
Массив – это набор данных одного и того же типа, снабженный целочисленным индексом.
Объявление массива производится следующим образом:
int[] a = new int[100]; или int[] a;
Где вначале идет объявление типа элементов массива, затем квадратные скобки, затем переменная массива. Как вариант можно написать:
int a[];
Это тоже правомерно, но вариант со скобками возле названия типа, более распространен и считается хорошим стилем написания кода.
После объявления переменной массива с помощью оператора new производится инициализация массива значениями соответствующего типа. Так массив типа int окажется заполнен нулями, типа boolean – значениями false и т.д.
Массив можно заполнять произвольными значениями уже во время инициализации. Для этого можно добавить к объявлению массива список его значений в фигурных скобках.
int[] a = {1,2,3,4,5};
Оператор new при этом не нужен, хотя можно записать и таким образом:
int[] a;
a = new int[] {1,2,3,4,5};
Но это как мне кажется, наиболее громоздкая запись.
Индексы массивов в java всегда начинаются с нуля. Это означает, что если в массиве d 100 элементов, то обращение к элементу d[100] вызовет ошибку выхода за пределы массива.
Массивы и списки в java относятся к ссылочным типам. Это означает, что при присвоении одной переменной массива другой, обе переменный начинают указывать на один и тот же участок памяти с содержимым массива. То есть.
int[] a = new int[100];
int[] b = new int[100];
a = b; // теперь обе переменные указывают на один и тот же массив b.
a[50] = 11; // теперь b[50] тоже равно 11!
Для того, чтобы быстро распечатать содержимое массива, в классе java.util.Arrays предусмотрен соответствующий метод Arrays.toString(какой_то_массив);
Для копирования массива в отдельную переменную в классе Arrays предусмотрен специальный метод Arrays.copyOf(массив, длина). Пример:
import java.util.Arrays;
…
int[] a = new int[30];
int[] b = new int[15];
b[5] = 7;
a = Arrays.copyOf(b, b.length);
b[5] = 18;
System.out.println("a="+ Arrays.toString(a));
System.out.println("b="+ Arrays.toString(b));
Программа распечатает:
a=[0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0]
b=[0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0]
После применения метода Arrays.copyOf(b, b.length), переменная а указывает на копию массива b, но это уже совсем другой массив. Поэтому изменение массива b никак на а не сказалось.
