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-ий не принимает значений. Создайте в классеStudentTest
3 объекта с помощью разных констукторов.
Пересоздайте класс Employee
таким образом, чтобы переменная salary
была
недоступна вне класса, переменная surname
была доступна отовсюду, а переменная
id
только внутри пакета.
Также создайте 3 public
метода, которые будут показывать на дисплее значения
этих переменных. Создайте для данного класса 3 разных конструктора с public
,
default
и private
access modifier-ами. В констукторах присваивайте переменным
класса значения из параметров.
Создайте новые классы в том же и в другом пакете. Попытайтесь в них создать объекты
класса Employee
и вывести на экран значения переменных данного объекта с помощью
метода println
и методов самого класса.
- В первом классе создайте 2
static
метода. 1-ый пусть умножает 3 числа из параметра метода и возвращает их произведение; 2-ой – делит первое число из параметра на второе и ничего не возвращает, лишь выводит на дисплей в читабельном виде целое частное и остаток. Во втором классе по два раза используйте данные методы. - В первом классе создайте
static
final
переменную Пи = 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;
В третий раз: имя работника должно быть такое же, что и у его департамента.