- •Основы Java
- •ООП в Java. Вложенные и внутренние классы
- •ООП в Java. Вложенные и внутренние классы
- •ООП в Java. Вложенные и внутренние классы
- •ООП в Java. Вложенные и внутренние классы
- •ООП в Java. Вложенные и внутренние классы
- •ООП в Java. Вложенные и внутренние классы
- •ООП в Java. Обобщения
- •ООП в Java. Обобщения
- •ООП в Java. Обобщения. Ограниченные типы
- •ООП в Java. Обобщения. Ограниченные типы
- •ООП в Java. Обобщения. Шаблон аргумента.
- •ООП в Java. Обобщения. Шаблон аргумента.
- •ООП в Java. Обобщения. Ограниченный шаблон аргумента.
- •ООП в Java. Обобщения. Обобщенные методы
- •ООП в Java. Обобщения. Обобщенные методы
- •ООП в Java. Обобщения. Обобщенные методы
- •ООП в Java. Обобщения. Обобщенные методы
- •ООП в Java. Обобщения. Обобщенные конструкторы
- •ООП в Java. Обобщения. Обобщенные конструкторы
- •ООП в Java. Некоторые примеры использования обобщений
- •ООП в Java. Обобщения. Обобщенные интерфейсы
- •ООП в Java. Обобщения. Обобщенные интерфейсы
- •ООП в Java. Автоматическое определение аргументов типа
- •ООП в Java. Обобщения. Очистка
- •ООП в Java. Ограничения в использовании обобщений
- •ООП в Java. Ограничения в использовании обобщений
- •GUI в Java
- •GUI в Java. AWT
- •GUI в Java. SWING
- •GUI в Java. JavaFX
- •GUI в Java. Создание простого GUI в SWING
- •GUI в Java. Создание простого GUI в SWING
- •GUI в Java. Менеджеры компоновки в SWING
- •GUI в Java. Панели фрейма
- •GUI в Java. Создание фрейма (окна) приложения
- •GUI в Java. Создание фрейма (окна) приложения Лекция 5
- •GUI в Java. Создание компонента для публикации «Hallo Java»
- •GUI в Java. Размещение компонента во фрейме
- •GUI в Java. Размещение нескольких компонетов
- •GUI в Java. Рисование двумерных форм. Библиотека Java 2D
- •GUI в Java. Рисование двумерных форм. Библиотека Java 2D
- •GUI в Java. Работа со шрифтом и цветом
- •GUI в Java. Абсолютное позиционирование
- •GUI в Java. Абсолютное позиционирование
- •GUI в Java. Абсолютное позиционирование
- •GUI в Java. Абсолютное позиционирование
ООП в Java. Некоторые примеры использования обобщений |
Лекция 5 |
Использование в коллекциях
Например: ArrayList<MyObject>
Использование в генераторах объектов для заполнения коллекций
Пусть, например, для модели некоторого автопарка, на базе абстрактного класса Genearator созданы: генератор автомобилей — AutoGenerator
генератор водителей — DriverGenerator
import ... //Импортируем нужные классы автопарка
public class AutoPark {
fill(Collection<T> coll, Generator<T> gen, int n) { for(int i = 0; i < n; i++) {
coll.add(gen.make());
}
return coll;
}
public static void main(String args[]) {
//Создадим и заполним коллекции автомобилей и водителей
Coollection<Auto> Autos = fill(new ArrayList<Auto>(), new AutoGenerator<Auto>(), 20); Coollection<Driver> Drivers = fill(new ArrayList<Driver>(), new DriverGenerator<Driver>(), 20);
}
}
ООП в Java. Обобщения. Обобщенные интерфейсы |
Лекция 5 |
Интерфейсы также могут иметь обобщенную форму. Объявление обобщенного интерфейса аналогично объявлению обобщенного класса. Классы реализующие обобщенный интерфейс должны быть также обобщенными.
public interface Containment<T> { boolean contains(T value);
}
...
public class noGeneric<T> implements main.Containment<T> {
T[] arrValue;
noGeneric(T[] value) { arrValue = value;
}
//Если в массиве arrValue содержится эквивалент value //возвращаем true
public boolean contains(T value) { for(T temp: arrValue) {
if(temp.equals(value)) return true;
}
return false;
}
}
ООП в Java. Обобщения. Обобщенные интерфейсы |
Лекция 5 |
Результаты работы проверки наличия элемента в массиве с помощью обобщенного класса, расширяющего обобщенный интерфейс.
public static void main(String args[]) {
Integer t[] = { 301, 467, 25 }; Float f[] = { 300F, 467F, 25F }; Float check = 467F;
noGeneric gn1 = new noGeneric(t);
System.out.println(gn1.contains(check));
//Вернет false
noGeneric gn2 = new noGeneric(f); System.out.println(gn2.contains(check));
//Вернет true
}
ООП в Java. Автоматическое определение аргументов типа |
Лекция 5 |
В JDK 7 доступна упрощенная форма записи создания экземпляра класса.
Вместо
Test <Integer, String> TestItem = new Test<Integer, String>(100, "Java");
Можно записать
Test <Integer, String> TestItem = new Test<>(100, "Java");
Такая же форма доступна и для аргументов обобщенных методов. Пусть определен метод:
boolean isTest(Test<T,V> obj) {
...
}
Тогда его можно вызвать так:
isObj.isTest(new Test<>(100, "Java"));
ООП в Java. Обобщения. Очистка |
Лекция 5 |
Обобщения появились с версии JDK5. Поэтому для обеспечения совместимости кода, написанного до JDK5 и после, был выбран механизм, получивший название «очистка».
1.При компиляции в байт-код, все сведения об обобщенных типах удаляются и заменяются верхними границами типов, а параметры без указания заменяются на Object
2.Затем выполняется приведение типов, заданных аргументами типа
Ошибка неоднозначности
class Test<T, V> { T obj1;
V obj2;
...
void set(T obj) { obj1 = obj;
}
void set(V obj) { obj2 = obj;
}
}
Поскольку при очистке T и V должны быть заменены на Object, а Object может быть любым объектом, получается, Что возможен случай, когда методы имеют одинаковые Имена и сигнатуры
ООП в Java. Ограничения в использовании обобщений |
Лекция 5 |
1. Ограничения статических членов класса
class Test<T> {
//Неверно т.к. нельзя объявить стат. переменную типа T static T obj;
//Неверно т.к. нельзя исп. стат. переменную типа T static T getObj() {
return obj
}
}
2. Ограничение создания экземпляров типа параметров типа
class Test<T> { T obj;
Test() {
obj = new T(); //Ошибка компиляции
}
}
3. Обобщенный класс не может расширять класс Throwable
ООП в Java. Ограничения в использовании обобщений |
Лекция 5 |
4. Ограничения обобщенных массивов
4.1Нельзя получить экземпляр массива, тип элементов которого определяется параметром типа
public class InClass<T extends Number> { private T Mass[];
InClass(T t[]) {
//Mass = new T[10]; //Не допустимо т.к. тип T неизвестен this.Mass = t; //Допустимо присвоение ссылки
}
}
4.2 Нельзя создать массив обобщенных ссылок на объекты конкретного типа
TestObj<Integer> Test[] = new TestOgj<Integer>[10]; //Недопустимо
TestObj<?> Test[] = new TestOgj<?>[10]; //Допустимо
GUI в Java |
Лекция 5 |
GUI — Graphics User Interface.
Графический пользовательский интерфейс (ГПИ).
GUI создается с помощью графических библиотек. Исторически их в Java три:
1.AWT
2.SWING (c 1998 г.)
3.JavaFX (c 2011 г.)
GUI в Java. AWT |
Лекция 5 |
AWT использует для рисования контролы операционной системы (ОС).
Контрол это графический элемент GUI имеющий представление (графический вид) и управление (может генерить и слушать события)
Преимущества использования контролов ОС
1. Не надо «самим рисовать»
Недостатки использования контролов ОС
1.Отличающийся в разных ОС вид приложения
2.Малый список общих контролов. Т.е. контролов, которые есть на всех ОС.
GUI в Java. SWING |
Лекция 5 |
SWING базируется на ряде объектов AWT, но имеет набор собственных контролов, которые одинаково показываются в разных ОС и всегда есть т. к. это контролы JRE
Ниже показана общность и разность AWT и SWING