Добавил:
ПОИТ 2016-2020 Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Пацей 4 сем / Лекции / СТПI_2_ООП

.pdf
Скачиваний:
70
Добавлен:
29.04.2018
Размер:
15.18 Mб
Скачать

Модификатор native

сообщает компилятору, что метод реализован в другом месте (с++)

public native int loadFreeDiskSpace();

можнопереопределять обычными методами в подклассах

Модификатор synchronized

включает код, блокирующий доступ к данным при запуске потока и снимающий блок при его завершении

Логические блоки

вызываются последовательно, в порядке размещения, вместе с инициализацией полей как простая последовательность операторов, до вызова

конструктора класса

public class Bill {

 

 

 

{System.out.println("Первый логический блок");

}

static { System.out.println("Статический блок"); }

private int id; // переменная экземпляра класса

 

public Bill() { //

 

 

 

super();

 

 

 

System.out.println("Конструктор");}

 

 

{ System.out.println("Второй логический блок");

 

this.id =45;

}

Статический блок

Первый логический блок

}

 

class Demo{

Второй логический блок

 

public static void main(String[] args) {Конструктор

Bill theBest = new Bill();

Первый логический блок

Второй логический блок

Bill theNextOne = new Bill();

Конструктор

}

 

}

 

Параметризованные классы

 

(generic)

классов запрещено

 

 

 

В качестве параметров

 

public class Message<T1, T2 extends Number> {

применять базовые типы.

 

private T1 info;

 

 

 

ограничения на используемые типы

private T2 id;

}

class Runner{

public static void main(String[] args) {

Message<String,String> one = new Message<String, String>();

//ошибка не Number

Message<StringBuffer, int> two = new Message<StringBuffer, int>();

//ошибка не м.б. примитивным

Message<Integer,Double> three = new Message<Integer, Double>();

//ok

Message<Integer, Integer> six = new Message<Integer, Integer>();

//ok

Message<String,Integer> five = new Message<>();//diamond оператор

three=six;// ошибка Message seven = new seven = six;//ok

}

не верные типы

Message();// параметризация по умол. Object

При компиляции вся информация о generic-типах стирается и заменяется для членов класса и методов заданными типами или типом Object, если параметр не задан

Метасимвол ?

Сравнение объектов с разными типами

параметров

 

Чтобы метод мог

 

 

распространить свои

public class Message<T1, T2 extends Number> {

возможности на

экземпляры класса,

private T1

info;

инициализированные

private T2

id;

любым допустимым

 

 

 

 

типом

public Message(T1

a, T2 b) {info=a; id =b;}

 

public boolean equalsMessage(Message<T1,?> other){ return Math.round(this.id.floatValue()/10 )

== Math.round(other.id.floatValue());

}

} class Runner{

public static void main(String[] args) { Message<Character,Integer> american = new Message<>('a',50); Message<Character, Float> russian = new Message<>('r',5.15f);

System.out.println(american.equalsMessage(russian));

Generic-ограничения

1)невозможно выполнить явный вызов конструктора generic-типа

public class Message<T1, T2 extends Number> { private T1 info = new T1(); // ошибка

2)generic-поля не могут быть статическими

public class Message<T1, T2 extends Number> {

static private T1 info ;

3) статические методы не могут иметь generic-параметры или обращаться к

generic полям

Параметризованные методы

<T extends Тип> returnType methodName(T arg) { } <T> T[ ] methodName(int count, T arg) { }

Могут быть в любых классах (парам и непарам)

Могут иметь метасимвол

class SimpleAct {

public <T1 > SimpleAct(T1 operand) { // конструктор

// реализация

}

public <T4> boolean printRezult() { return true;

}}

multi.<Integer>print();

...

SimpleAct multi = new SimpleAct(new Message<String,Integer>("Gost",1974));

multi.<Integer>printRezult();

Методы с переменным числом параметров

public static int defineArgCount(Integer... args) { args.length;

for (int element : args) {

}

}

1) должен быть единственным (переменн) и последним

2) могут быть перегружены, переопределены

Лямбда - выражения

Блок кода с параметрами, который можно передать

вдругое место

Java 8 функциональная конструкция

Назначение

лаконичность кода

скорость написания

могут быть преобразованы в функциональные

интерфейсы

доступ к final переменным из охватывающей области

видимости

ссылки на метод и конструктор без их вызова

разрешают конфликты между методами по умолчанию из нескольких интерфейсов

class LengthStringComparator implements Comparator<String> { public int compare(String firstStr, String secondStr)

{

return

Integer.compare(firstStr.length(),secondStr.length());

}

}

void function (){

String[] s = new String [] {"asyuuy", "dfg", "hjkl"}; Arrays.sort(s, new LengthStringComparator ());

for (String i: s ) {

Log.i("info",i);

}

}

Соседние файлы в папке Лекции