Академический Документы
Профессиональный Документы
Культура Документы
инициализации
Блоки инициализации
2
Блоки инициализации
Пример 1:
public class InitDemo1 {
private static char ch;
private static boolean bb;
private static byte by;
private static int ii;
private static float ff;
private static String str;
private static int[] array;
public static void main(String[] arg){ Console output:
System.out.println(“char: “ + ch); char:
System.out.println(“boolean: “ + bb); boolean: false
System.out.println("byte: "+by); byte: 0
//... int: 0
System.out.println("String: "+str); float: 0.0
System.out.println("Array: "+array); String: null
} Array: null
}
3
Блоки инициализации
5
Блоки инициализации
Ограничения:
оператор return не может использоваться в пределах
статического блока инициализатора;
ключевое слово this не может использоваться в пределах
статического блока инициализатора;
на не статическую переменную нельзя ссылаться из
статического блока инициализатора.
7
Блоки инициализации
Пример 2:
public class InitDemo5 {
private static char[] alph;
public static void main(String[] arg) {
System.out.print(Arrays.toString(alph));
}
static {
alph = new char[26];
int i = 0;
for (char c = 'a'; i < alph.length; c++, i++) {
alph[i] = c;
}
}
}
8
Блоки инициализации
Особенности
9
Блоки инициализации
Выглядят :
{
// Любой код, необходимый для инициализации
}
10
Блоки инициализации
Пример 3:
11
Блоки инициализации
12
Блоки инициализации
13
Блоки инициализации
Пример 4:
public class InitDemo6 {
private int a = 5;
private static int b = 100;
{ a = -5;
System.out.println("Logical block");
}
public InitDemo6() {
a = 10;
System.out.println("Constructor");
}
static { b = -5;
System.out.println("Static block");
Console output:
} Static block
public static void main(String[] arg) { Main
System.out.println("Main"); Logical block
InitDemo6 obj = new InitDemo6(); Constructor
System.out.println("a=" + obj.a); a=10
}
} 14
Блоки инициализации
15
Блоки инициализации
Пример 5:
public class InitDemo7 {
private final int xx = 50;
private final int zz;
private final int yy;
{
zz = 20;
System.out.println("Non-static block");
}
public InitDemo7() {
yy = 30;
System.out.println("Constructor");
}
public static void main(String[] arg) {
System.out.println("Main");
InitDemo7 obj = new InitDemo7();
}
}
16
Пакеты
17
Пакеты
java
Описание пакета:
package <имя пакета>;
Иерархия пакетов:
package <pk>{.<pk>}N0 ;
Импортирование классов:
import <pk>{.<pk>}N0.<имя класса>|*;
19
Пакеты
Пример 6:
package com.epam.test;
Импорт всех
import com.epam.teststuds.*; классов
20
Пакеты
Статический импорт
Например,
import static java.lang.Math.PI;
или
import static java.lang.Math.*;
21
Пакеты
Пример 7:
package com.nau.test;
import static java.lang.Math.*;
public class Main {
public static void main(String[] arg) {
double r = 3;
System.out.println(2 * PI * r);
System.out.println( floor( cos(PI) ) );
}
}
Без указания
принадлежности
классу
22
Пакеты
Организация пакетов
23
Пакеты
25
Пакеты
Достоинства:
Сжатие данных (с помощью алгоритма ZIP);
Легкость в распространении (передача одного большого
файла по сети вместо множества мелких файлов идет
быстрее и более эффективно);
Аутентификация: JAR-файл может быть подписан
цифровой подписью автора.
29
Архивирование java
java--программ
Например,
1. Manifest-Version: 1.0
2. Created-By: 1.7.0_06 (Oracle Corporation)
3. Main-Class: MyPackage.Main
4.
Атрибут,
Пустая строка определяющий класс с
(обязательно) методом main()
30
Архивирование java
java--программ
Создание jar-файла
Ключи:
c – создать новый JAR-файл;
f – имя JAR-файла указывается первым в списке;
e – включить в манифест атрибут Main-Class, имя которого
указывается вторым в списке;
v – выводить информацию о всех своих действиях.
31
Архивирование java
java--программ
Например,
32
Документирование
кода
Документирование кода
class User
java.lang.Object
docJava.User
Filed Summary
private int numericCode
personal user’s code
private password
java.lang.String user’s password
Constructor Summary
User()
see also chapter #3 “Classes”
Method Summary
int getNumericCode ()
java.lang.String getPassword ()
Например,
Класс – новый автомобиль (Car); Car
Класс – подержанный автомобиль
(пробег, функция вычисления
стоимости с учетом пробега) UsedCar
38
Реализация принципа ООП: наследование
39
Реализация принципа ООП: наследование
Цепочки наследования
40
Реализация принципа ООП: наследование
РЕАЛИЗАЦИЯ НАСЛЕДОВАНИЯ
41
Реализация принципа ООП: наследование
В отношении полей:
Унаследованные поля могут быть использованы
непосредственно (напрямую), как и любые другие поля;
42
Реализация принципа ООП: наследование
В отношении методов:
Унаследованные методы могут быть использованы
непосредственно (напрямую), как они есть;
В отношении конструкторов:
Вы можете написать конструктор подкласса, который
вызывает конструктор суперкласса, неявно или с
помощью ключевого слова super.
44
Реализация принципа ООП: наследование
Соглашение:
при создании объекта подкласса конструкторы всех классов
вызываются в порядке их подчиненности – от суперкласса
к подклассу. Такие вызовы называются цепочками
конструкторов.
ПЕРЕОПРЕДЕЛЕНИЕ МЕТОДОВ
47
Реализация принципа ООП: наследование
50
Реализация принципа ООП: наследование
ЗАПРЕЩЕНИЕ ПЕРЕОПРЕДЕЛЕНИЯ
МЕТОДА
Для отмены возможности переопределения
метода перед его описанием используется
модификатор final
(компилятор допускает переопределение
такого метода, однако во время выполнения
возникнет «Ошибка исполнения»).
53
Класс Object
Реализация принципа ООП: наследование
55
Реализация принципа ООП: наследование
class СustomСlass {
Класс без методов и полей
}
public class Demo5 {
public static void main(String[] arg) {
СustomСlass myClass = new СustomСlass();
myClass.
}
}
Унаследованные
методы класса
Object
Реализация принципа ООП: наследование
Унаследованные
методы класса
Object
Реализация принципа ООП: наследование
1) Метод toString
Определение:
public String toString()
Возвращает строковое представление объекта.
59
Реализация принципа ООП: наследование
Пример 12:
package testtest;
class СustomСlass { }
60
Реализация принципа ООП: наследование
package testtest;
class СustomСlass {
@Override
public String toString(){
return "This is CustomClass";
}
}
public class Demo6 {
public static void main(String[] arg) {
СustomСlass myClass = new СustomСlass();
System.out.println(myClass);
}
} Console output:
This is CustomClass
61
Реализация принципа ООП: наследование
2) Метод equals
Определение:
public boolean equals(Object obj)
Реализует отношение эквивалентности на двух
объектах (т.е. на не нулевых ссылках).
62
Реализация принципа ООП: наследование
Свойства эквивалентности
63
Реализация принципа ООП: наследование
Пример 14:
class Point {
protected int x;
protected int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null || this.getClass() != obj.getClass())
return false;
Point other = (Point) obj;
if (this.x != other.x)
return false;
return (this.y == other.y);
}
}
64
Реализация принципа ООП: наследование
3) Метод hashCode
Определение:
public int hashCode()
Возвращает значение хэш-кода объекта.
Соглашения по хэш-коду
Console output:
1484678
Пример 15: для класса Point: 1484678
22052786
public class Demo8 { 32487478
public static void main(String[] arg) {
Point point_1 = new Point(5, -5);
Point point_2 = point_1;
Point point_3 = new Point(5, -5);
Point point_4 = new Point(5, 5);
System.out.println(point_1.hashCode());
System.out.println(point_2.hashCode());
System.out.println(point_3.hashCode());
System.out.println(point_4.hashCode())
}
}
68
Реализация принципа ООП: наследование
Пример 16:
71
Реализация принципа ООП: наследование
72
Реализация принципа ООП: наследование
class SuperClass { }
73
Реализация
принципа ООП:
полиморфизм
Реализация принципа ООП: полиморфизм
75
Реализация принципа ООП: полиморфизм
ПОЛИМОРФИЗМ
Специализированный Универсальный
Перегрузка/ Подтипный
Переопределение
Параметрический
Принудительное
приведение
Операторы Ковариантность
Функции Контравариантность
Расширяющее
Сужающее
Обобщение
76
Реализация принципа ООП: полиморфизм
ДОСТОИНСТВА ПОЛИМОРФИЗМА
Повторное использование;
Надежность:
Более модульная структура;
Гибкость в расширении.
ПОЗДНЕЕ СВЯЗЫВАНИЕ
Проявляется в возможности вызова переопределенного
метода подкласса через ссылку на суперкласс
(т.е. определение варианта вызываемого метода происходит во
время выполнения и основывается на типе объекта).
77
Реализация принципа ООП: полиморфизм
Пример 17:
class Cat {
public void move() {
System.out.println("Cat move");
}
}
class BritishCat extends Cat {
@Override
public void move(){
System.out.println("British cat move");
}
}
class PersianCat extends Cat {
@Override
public void move(){
System.out.println("Persian cat move");
}
}
78
Реализация принципа ООП: полиморфизм
79
Реализация принципа ООП: полиморфизм
80
Реализация принципа ООП: полиморфизм
81
Реализация принципа ООП: полиморфизм
Console output:
82
Реализация принципа ООП: полиморфизм
ВЫВОДЫ:
83
Реализация принципа ООП: полиморфизм
Пример 19:
ОПЕРАТОР instanceof
Например,
if (myCat instanceof PersianCat) {
System.out.println("Persian cat!");
PersianCat myCat3 = (PersianCat) myCat;
} else {
System.out.println("Not Persian cat!");
}
86
Реализация принципа ООП: полиморфизм
FINAL-КЛАССЫ
87
Реализация принципа ООП: полиморфизм
При переопределении
метода можно изменить
модификатор доступа.
Однако, он не должен
стать более
ограничивающим.
Например, public менее
ограничивающий, чем
protected.
88
Реализация принципа ООП: полиморфизм
Пример 20:
package com.nau.basic_transport;
class Vehicle {
protected int maxSpeed = 230;
protected void showSpeed() {
System.out.println(maxSpeed);
}
}
package com.nau.derived_transport;
import com.nau.basic_transport.Vehicle;
class Bicycle extends Vehicle {
public void showSpeed() {
System.out.println(maxSpeed);
}
} Изменение области
видимости
89
Реализация принципа ООП: полиморфизм
90
Абстрактные
классы
91
Абстрактные классы
92
Абстрактные классы
Особенности:
Если класс включает абстрактные методы, то он
обязательно должен быть объявлен как абстрактный;
Если абстрактный класс – это суперкласс, то подкласс
обеспечивает реализацию всех абстрактных методов
своего родительского класса;
Если подкласс не обеспечивает реализацию всех
абстрактных методов своего родительского класса, то он
также должен быть объявлен как абстрактный.
94
Абстрактные классы
Пример 21:
96
Абстрактные классы
98
Архитектурный шаблон MVC
99
Архитектурный шаблон MVC
Пример 1: Модель
package com.epam.model;
package com.epam.view;
public class CalculateView {
public static final String INPUT_INT_DATA =
"Enter an integer = ";
public static final String WRONG_INPUT_INT_DATA =
"Wrong input! Repeat please! ";
public static final String OUR_INT = "Increment result = ";
public void printMessage(String message) {
System.out.print(message);
}
public void printMessageAndResult(String message, int value) {
System.out.println(message + value);
}
}
101
Архитектурный шаблон MVC
import com.epam.view.CalculateView;
import java.util.Scanner;
public class InputUtility {
private static Scanner sc = new Scanner(System.in);
public static int inputIntValueWithScanner(
CalculateView view) {
view.printMessage(view.INPUT_INT_DATA);
while( !sc.hasNextInt()) {
view.printMessage(view.WRONG_INPUT_INT_DATA +
view.INPUT_INT_DATA);
sc.next();
}
return sc.nextInt();
}
}
103
Архитектурный шаблон MVC
import com.epam.controller.CalculateController;
import com.epam.model.CalculateModel;
import com.epam.view.CalculateView;
public class MVCMain {
public static void main(String[] args) {
CalculateView view = new CalculateView();
CalculateModel model = new CalculateModel();
CalculateController controller =
new CalculateController(model, view);
controller.calculate();
}
}
Вывод в консоли:
Wrong input! Repeat please! Enter an integer = 12.7
Wrong input! Repeat please! Enter an integer = 44
Increment result = 45
104