www.udemy.com/course/java-oca-oracle/
Java basics
Список уроков
01. Урок 1 Знакомство с Java. Методы «print» и «println»
02. Урок 2 Примитивные типы данных. Понятие «переменная». Системы счисления
03. Урок 3 Арифметические и логические операции. Операции сравнения и присваивания
04. Урок 4 Понятия «класс» и «объект». Знакомство со ссылочными типами данных
05. Урок 5 Создание объектов. Понятие «конструктор». Объявление и вызов методов
06. Урок 6 Перезагрузка методов и конструкторов (overloading). Ключевое слово this
07. Урок 7 Понятие «package». Модификаторы видимости (access modifiers)
08. Урок 8 Модификаторы «final» и «static». Понятие «константа»
09. Урок 9 Разновидности переменных и пределы их видимости
10. Урок 10 Понятия «import» и «import static». Использование комментариев
11. Урок 11 Использование примитивных и ссылочных типов данных при вызове метода
12. Урок 12 Конструкции «if» и «if else». Ternary оператор
13. Урок 13 Конструкция «switch»
14. Урок 14 Классический цикл «for». Выражения «break» и «continue»
15. Урок 15 Циклы «while» и «do while»
16. Урок 16 Всё о классе String
17. Урок 16 часть 2 Методы String (дополнение)
18. Урок 17 Всё о классе StringBuilder
19. Урок 18 Понятие «массив». Работа с массивами
20. Урок 19 Параметры метода типа varargs. Аргументы типа command line. Цикл «forea
21. Урок 20 Всё о классе ArrayList
22. Урок 20 часть 2 Методы класса Arrays.
23. Урок 20 часть 3 ArrayList (дополнение). Коллекции.
24. Урок 21 Понятие «garbage collection»
25. Урок 22 Инкапсуляция. Super Protected
26. Урок 23 Overriding Hiding Final
27. Урок 24 Абстрактные Дефолтные Статические методы
28. Урок 24 часть 2 Интерфейсы (дополнение)
29. Урок 25 Полиморфизм. Оператор «instanceof»
30. Урок 26 Методы «equals» и «toString». Wrapper классы
31. Урок 27 Исключения и Ошибки Часть 1
32. Урок 28 Исключения и Ошибки Часть 2
33. Урок 29 Классы, отвечающие за работу с датами и временем
34. Урок 30 Лямбда выражения
35. Урок 31 Рассмотрение 46-ти интересных примеров по пройденному материалу
Решения для следующих домашних заданий:
Вывести на дисплей рубаи (четверостишье) соблюдая все отступы.
- Создать по 4 переменных всех целочисленных типов данных в следующем виде и вывести их на экран:
- все 4 переменные типа byte должны равняться 12 и быть записаны в разных системах счисления;
- все 4 переменные типа short должны равняться 1300 и быть записаны в разных системах счисления;
- все 4 переменные типа int должны равняться 0 и быть записаны в разных системах счисления;
- все 4 переменные типа long должны равняться 123456789 и быть записаны в разных системах счисления;
- Создть по 2 переменные типов данных float, double и boolean и вывести их на экран.
- Создать n-ное количество переменных типа данные char всеми возможными способами и вывести их на экран.
- Вычислить следующую часть кода:
int i1 = 5;
int i2 = 11;
double d1 = 5.5;
double d2 = 1.3;
long l = 20L;
double result1;
result1 = i2 / d1 + d2 % i1 - l;
- Чему равны выражения:
a-- - --a + ++a + a++ + a, где a = 5++b - b++ + ++b - --b, где b = 8
Создайте 2 класса.
1-ый назовите Student. Он должен содержать в себе следующие атрибуты: номер студенческого
билета, имя, фамилию, год обучения, средняя оценка по математике, средняя оценка по
экономике, средняя оценка по иностранному языку.
2-ой класс назовите StudentTest. В нём Вы должны будете создать 3 разных объекта класса
Student, вывести на экран в читабельном виде среднюю арифметическую оценку каждого
студента (учитывая все 3 предмета).
- В класс
BankAccountдобавьте 2 метода. Первый метод называетсяpopolnenieSchetaи увеличивает баланс на сумму, которая указана в параметре этого метода. Второй метод называетсяsnyatieSoSchetaи уменьшает баланс на сумму, которая указана в параметре этого метода. - Измените класс
StudentTestтак, чтобы среднюю арифметическую оценку студента выводил на экран метод. Т. е. создайте 1 метод, параметр которого – это объект классаStudent, а в теле метода будет вычисляться средняя арифметическая оценка и выводиться на экран. - Создайте класс
Employeeс атрибутамиid,surname,age,salary,department, которые должны задаваться в конструкторе. В данном классе также создайте метод увеличения зар платы вдвое. Создайте второй классEmployeeTest, в котором создайте 2 объекта классаEmployee. Увеличьте зарплату каждому работнику вдвое с помощью метода и выведите на экран значение новой зар платы.
- Создайте класс, в котором будут 5 overloaded методов, которые вычисляют сумму нуля, одного, двух, трёх и четырёх целых чисел соответственно, передают эту сумму в output и выводят её на экран. В случае, когда слагаемые отсутствуют (т.е. когда параметров нет) сумма пусть равняется 0.
- Измените класс
Studentтак, чтобы он имел 3 конструктора. 1-ый принимает все параметры. 2-ой – толькоid,name,surname,course. 3-ий не принимает значений. Создайте в классеStudentTest3 объекта с помощью разных констукторов.
Пересоздайте класс Employee таким образом, чтобы переменная salary была
недоступна вне класса, переменная surname была доступна отовсюду, а переменная
id только внутри пакета.
Также создайте 3 public метода, которые будут показывать на дисплее значения
этих переменных. Создайте для данного класса 3 разных конструктора с public,
default и private access modifier-ами. В констукторах присваивайте переменным
класса значения из параметров.
Создайте новые классы в том же и в другом пакете. Попытайтесь в них создать объекты
класса Employee и вывести на экран значения переменных данного объекта с помощью
метода println и методов самого класса.
- В первом классе создайте 2
staticметода. 1-ый пусть умножает 3 числа из параметра метода и возвращает их произведение; 2-ой – делит первое число из параметра на второе и ничего не возвращает, лишь выводит на дисплей в читабельном виде целое частное и остаток. Во втором классе по два раза используйте данные методы. - В первом классе создайте
staticfinalпеременную Пи = 3,14. Используйте данную константу в non-static методе, который принимает в параметре значение радиуса и вычисляет площадь круга по формуле:Площадь = Пи * радиус * радиус. Также используйте данную константу вstaticметоде, который принимает в параметре значение радиуса и вычисляет длину окружности по формуле:Площадь = 2 * Пи * радиус. Создайте ещё один non-static метод, который принимает в параметре значение радиуса и выводит на экран информацию о радиусе, площади круга и длине окружности. Используйте все 3 метода во 2-м классе.
- Напишите программу, в которой будет созданно 8 объектов, но к последней строке метода main останется всего 2.
- Вычислите устно output-ы данных программ, а затем проверьте в среде разработки:
class Test1 { int a = 1; static int a = 2; void abc(int a) { System.out.println(a); System.out.println(this.a); } public static void main(String[] args) { Test1 t = new Test1(); t.abc(3); } }
class Test2 { int a = 1; static int b = 2; static void abc(final int a) { System.out.println(a); System.out.println(Test2.b); } public static void main(String[] args) { abc(5); } }
class Test3 { int a = 1; static int b = 2; void abc(int a) { System.out.println(b); System.out.println(a); System.out.println(this.a); System.out.println(Test3.b); } public static void main(String[] args) { Test3 t = new Test3(); t.abc(4); } }
Создайте пакет p1, в нём класс А. В пакете p1 создайте подпакет p2, в нём
класс B со static элементами. В подпакете p2 создайте подпакет p3, в нём
класс C. Создайте новый пакет p4, в нём класс D. В пакете p4 создайте
подпакет p5, в нём класс E. Внутри класса D напишите код, который
будет задействовать любые элементы классов A, C, E, а также static
элементы класса B. Используя выражения import и import static,
работайте с не полными именами классов.
Создайте класс Car с тремя переменными: цвет, мотор и количество
дверей. Затем создайте класс CarTest, в котором должны быть 2 метода.
1-ый изменяет количество дверей объекта класса Car на количество,
прописанное в параметре метода. 2-ой принимает в параметры 2 объекта
класса Car и меняет их цвета местами. Примените оба метода в main и
выведите на экран атрибуты всех объектов.
В классе StudentTest написать 2 метода, которые принимают 2 input
параметра – 2 объекта класса Student. Первый метод сравнивает 2-х студентов,
используя 1 if и логические операторы внутри него и выводит на экран информацию о том, равны ли
студенты. Второй метод использует nested if statement, сравнивает все
атрибуты студента по отдельности, выводит на экран информацию о том,
равны ли студенты, а если не равны, то в чём именно было обнаруженно
первое неравенство.
В классе Month создайте метод, у которого 1 параметр типа данных int.
Этот параметр будет указывать порядковый номер месяца. Используя
функционал switch, выведите на экран количество дней этого месяца.
Проверьте работу данного метода в main.
Создать класс. В классе создать статичный метод, который будет выводить на экран время в формате «час:минута:секунда» в интервале от 0 до 6 часов. Если час больше единицы и минута кратна 10-ти, то метод нужно закончить. Если же (секунда умноженная на час) больше минуты, то пора переходить на другую минуту. Продемонстрировать данный метод в действии.
Переписать домашнее задание 14 так, чтобы outer и
inner циклы представляли собой while loop, а middle цикл
представлял собой do while loop.
Создайте класс, в котором создайте метод email. Данный
метод должен принимать в инпут 1 String параметр. Данный
параметр должен содержать в себе email-ы в следующем
виде: ya@yahoo.com; on@mail.ru; ona@gmail.com.
После каждого e-mail должен стоять знак препинания ";". Ваш
метод должен выводить на экран информацию о том, какой
почтой пользуются, исходя из параметра, т.е. оутпут должен
быть следующего вида:
yahoo
mail
gmail
Продемонстрируйте данный метод.
Создайте класс, в котором создайте метод equality. Инпут
параметрами данного метода будут 2 объекта класса
StringBuilder. Метод должен иметь boolean return type,
возвращать true, если значения объектов совпадают, false –
если не совпадают.
Продемонстрируйте данный метод.
- Создайте класс, в котором создайте метод
sort. Инпут параметром данного метода будет одномерный массив типаint. Метод должен возвращать уже отсортированный по возрастанию массив. Продемонстрируйте данный метод. - Создайте класс, в котором создайте метод
showArray. Инпут параметром данного метода будет двумерный массив типаString. Метод должен выводить на экран данный массив в следующем виде:
{ {элемент00, элемент01}, {элемент10}, {элемент10, элемент11} }
Содержимое, естественно, будет зависеть от Вашего массива.
Продемонстрируйте данный метод.
Создайте метод abc, инпут параметр которого – N-ое
количество массивов типа String. В методе создайте новый
массив, который будет состоять из элементов массивов-
параметров и будет оутпутом данного метода. В методе main
вызовите метод abc и его элементам, которые равны
значениям command line параметров, присвойте значение
null. Выведите элементы обновлённого массива на экран.
Везде, где возможно, используйте foreach loop.
Запустите приложение с командной строки.
Создайте класс, в котором создайте метод abc. Инпут
параметром данного метода будет N-ое количество
параметров типа String. Метод должен возвращать уже
отсортированный объект ArrayList из неповторяющихся
объектов типа String, взятых из параметра метода и выводить
данный объект на экран.
Продемонстрируйте данный метод.
-
Создайте класс
Studentсо следующими переменными:name(используйтеStringBuilder),course,grade. Примените инкапсуляцию к данному классу. Длина имени объектов не должна быть менее 3-х символов, оценки должны быть числами в интервале от 1 до 10, курс должен быть числом от 1 до 4 включительно. Создайте методshowInfo, который будет выводить всю информацию о студенте, не используя переменные класса напрямую. Создайте классTestStudent, в котором создайте объект классаStudent, придайте его переменным значения. Произведите вызов методаshowInfo. -
Создайте класс
Animal. При вызове его конструктора пусть на экран выводится "I am animal". В классе пусть будут переменнаяeyes, характеризующая количество глаз; методыeat(выводящий на экран "Animal eats") иdrink(выводящий на экран "Animal drinks").Создайте класс
Pet, который является child классом классаAnimal. При вызове его конструктора пусть на экран выводится "I am pet" и переменнойeyesпридаётся значение 2. В классе пусть будут переменныеname;tail, характеризующая количество хвостов и равная 1;paw, характеризующая количество лап и равная 4; методыrun(выводящий на экран "Pet runs") иjump(выводящий на экран "Pet jumps").Создайте класс
Dog, который является child классом классаPet. При вызове его конструктора с параметром, который будет передавать имя, пусть на экран выводится "I am dog and my name is: " + имя питомца. В класс добавьте методplay(выводящий на экран "Dog plays").Создайте класс
Cat, который является child классом классаPet. При вызове его конструктора с параметром, который будет передавать имя, пусть на экран выводится "I am cat and my name is: " + имя питомца. В класс добавьте методsleep(выводящий на экран "Cat sleeps").Создайте класс
Test, в методеmainкоторого выведите на экран количество лап объекта классаDogи вызовите методsleepобъекта классаCat.
Test 1
Каков будет результат компиляции и запуска класса Y?
package p1; public class X { X() {} public void abc() { System.out.println('X'); } }
package p2; import p1.*; public class Y extends X { Y() {} public void abc() { System.out.println('Y'); } public static void main(String[] args) { Y y = new Y(); y.abc(); } }
Test 2
Каков будет результат компиляции и запуска класса Y?
package p1; public class X { protected void abc() { System.out.println('X'); } }
package p2; import p1.*; public class Y extends X { public void abc() { System.out.println('Y'); } public void def() { Y y = new Y(); y.abc(); } public void ghi() { X x = new Y(); x.abc(); } public static void main(String[] args) { Y a = new Y(); a.abc(); a.def(); a.ghi(); } }
Test 3
Каков будет результат компиляции и запуска классов X и Y?
public class X { public X() { System.out.println("X"); } public X(int i) { System.out.println("X" + i); } private boolean abc() { return false; } public static void main(String[] args) { X x = new Y(18); System.out.println(x.abc()); } } class Y extends X { public Y(int i) { System.out.println("Y"); } public boolean abc() { return true; } }
Test 4
Каков будет результат компиляции и запуска класса Test?
public class Test { public static void abc(X x, Y y) { System.out.println("privet"); } public static void abc(Y y, X x) { System.out.println("poka"); } public static void main(String[] args) { Y a = new Y(); abc(a, a); } } class X { } class Y extends X { }
Test 5
Каков будет результат компиляции и запуска класса Test?
public class Test { public static void main(String[] args) { X x = new Y (); System.out.println(x.s1 + " " + x.bool); } } class X{ String s1 = "privet"; } class Y extends X { boolean bool = false; }
Создайте абстрактный класс Animal, его конструктор пусть имеет параметр, значение которого
назначается переменной String name. В классе Animal создайте абстрактные методы eat и sleep.
Создайте абстрактный класс Fish, который является дочерним классом класса Animal, его конструктор
пусть имеет параметр, значение которого назначается переменным name данного и родительского
класса. В классе Fish перезапишите метод sleep так, чтобы он выводил на экран "Всегда интересно
наблюдать, как спят рыбы". Также здесь создайте абстрактный метод swim.
Создайте абстрактный класс Bird, который является дочерним классом класса Animal, его конструктор
пусть имеет параметр, значение которого назначается переменным name данного и родительского
класса. Также здесь создайте абстрактный метод fly.
Создайте абстрактный класс Mammal, который является дочерним классом класса Animal, его
конструктор пусть имеет параметр, значение которого назначается переменным name данного и
родительского класса. Также здесь создайте абстрактный метод run.
Создайте интерфейс Speakable, в котором пусть будет дефолтный метод speak, который выводит на
экран "Somebody speaks" . Пусть класс Mammal имплементирует этот интерфейс. Также пусть класс Bird
имплементирует этот интерфейс и перезаписывает его метод так, чтоб он выводил на экран name + "
sings".
Создайте класс Mechenosec, который является дочерним классом класса Fish, его конструктор пусть
имеет параметр, значение которого назначается переменным name данного и родительского класса. В
классе Mechenosec перезапишите метод swim так, чтобы он выводил на экран "Меченосец красивая
рыба, которая быстро плавает!". Также перезапишите метод eat так, чтобы он выводил на экран
"Меченосец не хищная рыба, и она ест обычный рыбий корм!".
Создайте класс Pingvin, который является дочерним классом класса Bird, его конструктор пусть имеет
параметр, значение которого назначается переменным name данного и родительского класса. В классе
Pingvin перезапишите метод eat так, чтобы он выводил на экран "Пингвин любит есть рыбу!". Также
перезапишите метод sleep так, чтобы он выводил на экран "Пингвины спят прижавшись друг к другу!". Также
перезапишите метод fly так, чтобы он выводил на экран "Пингвины не умеют летать!". Также перезапишите
метод speak так, чтобы он выводил на экран "Пингвины не умеют петь как соловьи!".
Создайте класс Leo, который является дочерним классом класса Mammal, его конструктор пусть имеет
параметр, значение которого назначается переменным name данного и родительского класса. В классе
Leo перезапишите метод eat так, чтобы он выводил на экран "Лев, как любой хищник, любит мясо!". Также
перезапишите метод sleep так, чтобы он выводил на экран "Большую часть дня лев спит!". Также
перезапишите метод run так, чтобы он выводил на экран "Лев - это не самая быстрая кошка!".
В классе Homework23 создайте main метод, в котором:
- Создайте объект класса
Mechenosec, на который ссылается переменная типаMechenosec, выведите переменнуюnameданного объекта и вызовите все методы, которые сможете вызвать с помощью данной переменной; - Создайте объект класса
Pingvin, на который ссылается переменная типаSpeakable, вызовите все методы, которые сможете вызвать с помощью данной переменной; - Создайте объект класса
Leo, на который ссылается переменная типаAnimal, выведите переменную name данного объекта и вызовите все методы, которые сможете вызвать с помощью данной переменной; - Создайте ещё один объект класса
Lev, на который ссылается переменная типаMammal, выведите переменнуюnameданного объекта и вызовите все методы, которые сможете вызвать с помощью данной переменной.
Создайте 2 исключения.
Первое пусть является дочерним классом класса RuntimeException и называется
NeMyasoException; в нём создайте конструктор, который принимает 1 String
параметр и передаёт его конструктору super класса.
Второе пусть является дочерним классом
класса Exception и называется NeVodaException; в нём создайте конструктор, который
принимает 1 String параметр и передаёт его конструктору super класса.
Создайте класс Tiger. Первый метод класса - метод eat будет иметь return type void и
принимать 1 String параметр. Если данный параметр не равен "мясо", то пусть
метод выбрасывает объект NeMyasoException с параметром "Тигр не ест " + параметр
метода. Если данный параметр равен String "мясо", то пусть на экран выводится "Тигр ест мясо".
Второй метод класса - метод drink будет иметь return type void и принимать 1 String
параметр. Если данный параметр не равен String "вода", то пусть метод выбрасывает
объект NeVodaException с параметром "Тигр не пьет " + параметр метода. Если данный
параметр равен String "вода", то пусть на экран выводится "Тигр пьет воду".
В классе Homework24 внутри метода main создайте объект класса Tiger. Вызовите метод eat с
параметром "мясо". Затем в блоке try вызовите метод drink с параметром "вода". В данном
блоке try создайте ещё один блок try, где вызовите метод drink с параметром "пиво". Во
внешнем блоке try пусть также размещаются блок catch, который ловит исключения типа
Exception и в своем теле выводит на экран мессаж данного исключения; блок catch, который
ловит исключения типа NeVodaException и в своем теле выводит на экран мессаж данного
исключения; блок finally, который в своем теле выводит на экран "Это inner finally блок". К
внешнему try блоку пусть относятся блок catch, который ловит исключения типа Exception и
в своем теле выводит на экран мессаж данного исключения; блок catch, который ловит
исключения типа RuntimeException и в своем теле выводит на экран мессаж данного
исключения.
Создайте класс. Внутри класса создайте 2 шаблона с помощью класса
DateTimeFormatter.
1-ый шаблон подгоните под вид «2016, января-01 !! 09:00»,
2-ой - под вид «09:00, 03/фев/16».
Создайте метод smena, который принимает в
параметры объекты следующих классов: 2 объекта LocalDateTime, 1 объект
Period, 1 объект Duration. До тех пор, пока 1-ый объект LocalDateTime меньше
(раньше) 2-го проделывайте все следующие действия (даже если во время
данных действий 1-ый объект LocalDateTime уже не меньше 2-го) раз за разом:
-
Выводите на экран «Работаем с: » + дата и время 1-го объекта с использованием 1-го шаблона;
-
Увеличивайте данный (1-ый) объект на период и выводите на экран « До: » + дата и время изменённого 1-го объекта с использованием 1-го шаблона;
-
Выводите на экран «Отдыхаем с: » + дата и время изменённого 1-го объекта с использованием 2-го шаблона;
-
Увеличивайте данный (1-ый) объект на продолжительность и выводите на экран « До: » + дата и время изменённого 1-го объекта с использованием 2-го шаблона.
Старайтесь, чтобы вывод был читабельным.
В методе
mainсоздайте все необходимые объекты и запустите с их помощью методsmena.
Создайте класс Employee, у которого будут переменные name, department и
salary. Задавайте значения этим переменным при создании объекта.
В классе TestEmployee создайте метод printEmployee, который принимает в
параметр объект класса Employee и выводит на экран всю информацию о данном
работнике. Используя интерфейс Predicate, создайте в классе TestEmployee метод
employeeFilter, который помимо объекта Predicate принимает в параметр
ArrayList работников и выводит на экран информацию о всех работниках из
ArrayList , которые подходят под определённые условия.
В методе main класса TestEmployee создайте ArrayList работников и заполните его
объектами класса Employee. Затем, используя данный ArrayList и лямбда
выражения, трижды вызовете метод employeeFilter таким образом, чтобы
выведенные на экран работники подходили под следующие условия:
В первый раз: департамент работника должен быть "IT", а з/п больше 200;
Во второй раз: имя работника должно начинаться с "E", а з/п не должна быть 450;
В третий раз: имя работника должно быть такое же, что и у его департамента.