Доступно

Основы Java. 2-е изд. [Николай Прохоренок]

Тема в разделе "Электронные книги", создана пользователем GladPozitiv, 10 авг 2019.

Цена: 910р.-88%
Взнос: 106р.
98%

Основной список: 51 участников

Статус обсуждения:
Комментирование ограничено.
  1. 10 авг 2019
    #1
    Топикстартер
    Топикстартер ЧКЧлен клуба
    Основы Java. 2-е изд. Николай Прохоренок
    204294.jpg

    Дата написания: 2019
    Объем: 768 стр.

    Описание:
    Описан базовый синтаксис языка Java: типы данных, операторы, условия, циклы, регулярные выражения, лямбда-выражения, ссылки на методы, объектно-ориентированное программирование. Рассмотрены основные классы стандартной библиотеки, получение данных из сети Интернет, работа с базой данных MySQL. Книга содержит большое количество практических примеров, помогающих начать программировать на языке Java самостоятельно. Весь материал тщательно подобран, хорошо структурирован и компактно изложен, что позволяет использовать книгу как удобный справочник.
    Во втором издании добавлена глава по Java 11 и описано большинство нововведений: модули, интерактивная оболочка JShell, инструкция var и др.
    Электронный архив с примерами находится на сайте издательства.

    Введение 13
    Глава 1. Первые шаги 17
    1.1. Установка Java SE Development Kit (JDK) 17
    1.2. Первая программа 21
    1.3. Установка и настройка редактора Eclipse 24
    1.4. Структура программы 34
    1.5. Комментарии в программе 38
    1.6. Вывод данных 43
    1.7. Ввод данных 46
    1.8. Получение данных из командной строки 48
    1.9. Преждевременное завершение выполнения программы 49
    1.10. Интерактивная оболочка JShell 50
    Глава 2. Переменные и типы данных 55
    2.1. Объявление переменной внутри метода 55
    2.2. Именование переменных 56
    2.3. Типы данных 57
    2.4. Инициализация переменных 58
    2.5. Константы 61
    2.6. Статические переменные и константы класса 61
    2.7. Области видимости переменных 62
    2.8. Преобразование и приведение типов 65
    2.9. Инструкция var 67
    2.10. Перечисления 68
    Глава 3. Операторы и циклы 70
    3.1. Математические операторы 70
    3.2. Побитовые операторы 72
    3.3. Операторы присваивания 75
    3.4. Операторы сравнения 76
    3.5. Приоритет выполнения операторов 77
    3.6. Оператор ветвления if 78
    3.7. Оператор ?: 82
    3.8. Оператор выбора switch 83
    3.9. Цикл for 86
    3.10. Цикл for each 88
    3.11. Цикл while 89
    3.12. Цикл do while 89
    3.13. Оператор continue: переход на следующую итерацию цикла 90
    3.14. Оператор break: прерывание цикла 90
    Глава 4. Числа 93
    4.1. Математические константы 96
    4.2. Основные методы для работы с числами 96
    4.3. Округление чисел 98
    4.4. Тригонометрические методы 98
    4.5. Преобразование строки в число 99
    4.6. Преобразование числа в строку 101
    4.7. Генерация псевдослучайных чисел 103
    4.8. Бесконечность и значение NaN 107
    Глава 5. Массивы 109
    5.1. Объявление и инициализация массива 109
    5.2. Определение размера массива 111
    5.3. Получение и изменение значения элемента массива 112
    5.4. Перебор элементов массива 113
    5.5. Многомерные массивы 114
    5.6. Поиск минимального и максимального значений 116
    5.7. Заполнение массива значениями 117
    5.8. Сортировка массива 118
    5.9. Проверка наличия значения в массиве 122
    5.10. Переворачивание и перемешивание массива 123
    5.11. Заполнение массива случайными числами 124
    5.12. Копирование элементов из одного массива в другой 125
    5.13. Сравнение массивов 128
    5.14. Преобразование массива в строку 130
    Глава 6. Символы и строки 131
    6.1. Объявление и инициализация отдельного символа 131
    6.2. Создание строки 132
    6.3. Определение длины строки 134
    6.4. Доступ к отдельным символам 135
    6.5. Получение фрагмента строки 135
    6.6. Конкатенация строк 135
    6.7. Настройка локали 136
    6.8. Изменение регистра символов 137
    6.9. Сравнение строк 138
    6.10. Поиск и замена в строке 140
    6.11. Преобразование строки в массив и обратно 141
    6.12. Преобразование кодировок 143
    6.13. Форматирование строки 147
    Глава 7. Регулярные выражения 153
    7.1. Создание шаблона и проверка полного соответствия шаблону 153
    7.2. Модификаторы 154
    7.3. Синтаксис регулярных выражений 156
    7.4. Поиск всех совпадений с шаблоном 166
    7.5. Замена в строке 171
    7.6. Разбиение строки по шаблону: метод split() 172
    Глава 8. Работа с датой и временем (классический способ) 174
    8.1. Класс Date: получение количества миллисекунд, прошедших с 1 января 1970 года 174
    8.1.1. Создание экземпляра класса Date 174
    8.1.2. Форматирование даты и времени 176
    8.2. Класс Calendar: получение доступа к отдельным компонентам даты и времени 180
    8.2.1. Создание объекта: метод getInstance() 180
    8.2.2. Получение компонентов даты и времени 180
    8.2.3. Установка компонентов даты и времени 184
    8.2.4. Сравнение объектов 186
    8.3. Класс GregorianCalendar: реализация григорианского и юлианского календарей 187
    8.3.1. Создание экземпляра класса GregorianCalendar 187
    8.3.2. Установка и получение компонентов даты и времени 188
    8.3.3. Изменение компонентов даты и времени 191
    8.3.4. Сравнение объектов 192
    8.4. Класс SimpleDateFormat: форматирование даты и времени 192
    на языке, соответствующем указанной локали 195
    8.6. «Засыпание» программы и измерение времени ее выполнения 198
    Глава 9. Работа с датой и временем (в версиях Java SE 8 и выше) 200
    9.1. Класс LocalDate: дата 200
    9.1.1. Создание экземпляра класса LocalDate 200
    9.1.2. Установка и получение компонентов даты 202
    9.1.3. Прибавление и вычитание значений 204
    9.1.4. Преобразование объекта класса LocalDate в объект класса LocalDateTime 205
    9.1.5. Сравнение объектов 206
    9.1.6. Преобразование даты в строку 207
    9.1.7. Создание календаря на месяц и год 207
    9.2. Класс LocalTime: время 216
    9.2.1. Создание экземпляра класса LocalTime 217
    9.2.2. Установка и получение компонентов времени 218
    9.2.3. Прибавление и вычитание значений 219
    9.2.4. Преобразование объекта класса LocalTime в объект класса LocalDateTime 221
    9.2.5. Сравнение объектов 221
    9.2.6. Преобразование времени в строку 222
    9.3. Класс LocalDateTime: дата и время 222
    9.3.1. Создание экземпляра класса LocalDateTime 223
    9.3.2. Установка и получение компонентов даты и времени 225
    9.3.3. Прибавление и вычитание значений 228
    9.3.4. Сравнение объектов 229
    9.3.5. Преобразование даты и времени в строку 231
    9.4. Класс Instant: представление времени в наносекундах, прошедших с 1 января 1970 года 231
    9.4.1. Создание экземпляра класса Instant 231
    9.4.2. Получение компонентов времени 233
    9.4.3. Прибавление и вычитание значений 233
    9.4.4. Сравнение объектов 234
    9.4.5. Преобразование объекта класса Instant в объект класса LocalDateTime 235
    9.5. Класс DateTimeFormatter: форматирование даты и времени 236
    9.5.1. Создание экземпляра класса DateTimeFormatter 236
    9.5.2. Специальные символы в строке шаблона 238
    9.6. Класс Period: разница между двумя датами 242
    9.7. Получение количества дней между двумя датами 246
    9.8. Получение времени в разных часовых поясах 247
    Глава 10. Пользовательские методы 252
    10.1. Создание статического метода 252
    10.2. Вызов статического метода 255
    10.3. Перегрузка методов 256
    10.4. Способы передачи параметров в метод 258
    10.5. Передача и возвращение массивов 260
    10.6. Передача произвольного количества значений 262
    10.7. Рекурсия 264
    Глава 11. Объектно-ориентированное программирование 265
    11.1. Основные понятия 265
    11.2. Создание класса и экземпляра класса 267
    11.3. Объявление полей внутри класса 269
    11.4. Определение методов внутри класса 271
    11.5. Конструкторы класса 273
    11.6. Явная инициализация полей класса 274
    11.7. Инициализационные блоки 275
    11.8. Вызов одного конструктора из другого 276
    11.9. Создание констант класса 277
    11.10. Статические члены класса 279
    11.11. Методы-фабрики 281
    11.12. Наследование 281
    11.13. Переопределение методов базового класса 284
    11.14. Финальные классы и методы 285
    11.15. Абстрактные классы и методы 285
    11.16. Вложенные классы 286
    11.16.1. Обычные вложенные классы 286
    11.16.2. Статические вложенные классы 288
    11.16.3. Локальные вложенные классы 289
    11.16.4. Анонимные вложенные классы 290
    11.17. Приведение типов 291
    11.18. Класс Object 293
    11.19. Массивы объектов 296
    11.20. Передача объектов в метод и возврат объектов 298
    11.21. Классы-«обертки» над элементарными типами 301
    Глава 12. Интерфейсы 303
    12.1. Создание интерфейса 304
    12.2. Реализация нескольких интерфейсов 309
    12.3. Расширение интерфейсов 310
    12.4. Создание статических констант внутри интерфейса 310
    12.5. Создание статических методов внутри интерфейса 311
    12.6. Методы по умолчанию и закрытые методы 312
    12.7. Интерфейсы и обратный вызов 314
    12.8. Функциональные интерфейсы и лямбда-выражения 317
    12.9. Область видимости лямбда-выражений 322
    12.10. Ссылки на методы 324
    12.11. Интерфейс Comparable 327
    12.12. Интерфейс Cloneable 329
    Глава 13. Обобщенные типы 332
    13.1. Зачем нужны обобщенные типы? 333
    13.2. Обобщенные классы 335
    13.3. Ограничение обобщенного типа 337
    13.4. Обобщенные методы 339
    13.5. Маски типов 341
    13.6. Наследование обобщенных классов 343
    13.7. Обобщенные интерфейсы 346
    13.8. Ограничения на использование обобщенных типов 348
    Глава 14. Коллекции. Списки и очереди 351
    14.1. Интерфейс Collection<E> 351
    14.2. Интерфейсы Iterable<T> и Iterator<T> 352
    14.3. Интерфейсы Comparable<T> и Comparator<T> 355
    14.4. Интерфейс List<E> 358
    14.5. Класс ArrayList<E>: динамический список 359
    14.5.1. Создание объекта 359
    14.5.2. Вставка элементов 362
    14.5.3. Определение количества элементов 364
    14.5.4. Удаление элементов 365
    14.5.5. Доступ к элементам 367
    14.5.6. Поиск и замена элементов в списке 368
    14.5.7. Поиск минимального и максимального значений в списке 371
    14.5.8. Преобразование массива в список и списка в массив 373
    14.5.9. Перемешивание и переворачивание списка 375
    14.5.10. Сортировка элементов списка 376
    14.5.11. Перебор элементов списка 378
    14.5.12. Интерфейс ListIterator<E> 379
    14.6. Интерфейсы Queue<E> и Deque<E> 382
    14.7. Класс ArrayDeque<E>: двухсторонняя очередь 383
    14.7.1. Создание объекта 383
    14.7.2. Вставка элементов 383
    14.7.3. Определение количества элементов 385
    14.7.4. Удаление элементов 386
    14.7.5. Получение элементов из очереди 388
    14.7.6. Проверка существования элементов в очереди 392
    14.7.7. Поиск минимального и максимального значений в очереди 392
    14.7.8. Преобразование массива в очередь и очереди в массив 394
    14.7.9. Перебор элементов очереди 395
    14.8. Класс PriorityQueue<E>: очередь с приоритетами 396
    14.9. Класс LinkedList<E>: связанный список и очередь 399
    14.10. Класс Vector<E>: синхронизированный динамический список 403
    14.10.1. Создание объекта 403
    14.10.2. Методы класса Vector<E> 404
    14.10.3. Интерфейс Enumeration<E> 407
    14.11. Класс Stack<E>: стек 409
    14.12. Класс BitSet: набор битов 411
    Глава 15. Коллекции. Множества и словари 415
    15.1. Интерфейс Set<E> 415
    15.2. Класс HashSet<E>: множество, в котором уникальные элементы расположены в произвольном порядке 416
    15.2.1. Создание объекта 417
    15.2.2. Вставка элементов 419
    15.2.3. Определение количества элементов 420
    15.2.4. Удаление элементов 420
    15.2.5. Проверка существования элементов 422
    15.2.6. Преобразование массива во множество и множества в массив 422
    15.2.7. Перебор элементов множества 424
    15.3. Класс LinkedHashSet<E>: множество, в котором запоминается порядок вставки элементов 424
    15.4. Интерфейсы SortedSet<E> и NavigableSet<E> 425
    15.5. Класс TreeSet<E>: набор уникальных элементов, хранимых в отсортированном порядке 426
    15.5.1. Создание объекта 426
    15.5.2. Методы из интерфейса SortedSet<E> 427
    15.5.3. Методы из интерфейса NavigableSet<E> 429
    15.6. Интерфейс Map<K, V> 432
    15.7. Класс HashMap<K, V>: словарь, доступ к элементам которого осуществляется по уникальному ключу 434
    15.7.1. Создание объекта 434
    15.7.2. Вставка элементов 436
    15.7.3. Определение количества элементов 437
    15.7.4. Удаление элементов 437
    15.7.5. Доступ к элементам 438
    15.7.6. Изменение значений элементов 440
    15.7.7. Проверка существования элементов 441
    15.7.8. Перебор элементов словаря 442
    15.8. Класс LinkedHashMap<K, V>: словарь, в котором запоминается порядок вставки элементов или порядок доступа к ним 443
    15.9. Интерфейсы SortedMap<K, V> и NavigableMap<K, V> 444
    15.10. Класс TreeMap<K, V>: словарь, в котором ключи хранятся в отсортированном порядке 445
    15.10.1. Создание объекта 445
    15.10.2. Методы из интерфейса SortedMap<K, V> 446
    15.10.3. Методы из интерфейса NavigableMap<K, V> 448
    15.11. Класс Hashtable<K, V>: словарь 454
    15.12. Класс Properties: словарь, состоящий из конфигурационных данных 456
    Глава 16. Пакеты, JAR-архивы и модули 462
    16.1. Инструкция import 462
    16.2. Импорт статических членов класса 464
    16.3. Инструкция package 464
    16.4. Пути поиска классов 467
    16.5. JAR-архивы 472
    16.5.1. Создание JAR-архива 472
    16.5.2. Исполняемые JAR-архивы 474
    16.5.3. Редактирование JAR-архивов 475
    16.5.4. Создание JAR-архива в редакторе Eclipse 476
    16.6. Модули 478
    16.6.1. Безымянные модули 479
    16.6.2. Автоматические модули 479
    16.6.3. Создание модуля из командной строки 479
    16.6.4. Файл module-info 483
    16.6.5. Создание модульного JAR-архива 485
    16.6.6. Создание модуля в редакторе Eclipse 486
    Глава 17. Обработка ошибок 493
    17.1. Типы ошибок 493
    17.2. Инструкция try catch finally 495
    17.3. Оператор throw: генерация исключений 501
    17.4. Иерархия классов исключений 501
    17.5. Типы исключений 505
    17.6. Пользовательские классы исключений 506
    17.7. Способы поиска ошибок в программе 507
    17.8. Протоколирование 509
    17.9. Инструкция assert 511
    17.10. Отладка программы в редакторе Eclipse 512
    Глава 18. Работа с файлами и каталогами 518
    18.1. Класс File 519
    18.1.1. Создание объекта 519
    18.1.2. Преобразование пути к файлу или каталогу 520
    18.1.3. Работа с дисками 525
    18.1.4. Работа с каталогами 526
    18.1.5. Работа с файлами 529
    18.1.6. Права доступа к файлам и каталогам 531
    18.2. Класс Files 533
    18.2.1. Класс Paths и интерфейс Path 533
    18.2.2. Работа с дисками 539
    18.2.3. Работа с каталогами 541
    18.2.4. Обход дерева каталогов 545
    18.2.5. Работа с файлами 549
    18.2.6. Права доступа к файлам и каталогам 553
    18.2.7. Атрибуты файлов и каталогов 553
    18.2.8. Копирование и перемещение файлов и каталогов 557
    18.2.9. Чтение и запись файлов 558
    18.3. Получение сведений об операционной системе 562
    Глава 19. Байтовые потоки ввода/вывода 565
    19.1. Базовые классы байтовых потоков ввода/вывода 565
    19.1.1. Класс OutputStream 566
    19.1.2. Класс FileOutputStream 567
    19.1.3. Класс InputStream 569
    19.1.4. Класс FileInputStream 573
    19.2. Интерфейс AutoCloseable и инструкция try-with-resources 574
    19.3. Буферизованные байтовые потоки 576
    19.3.1. Класс BufferedOutputStream 576
    19.3.2. Класс BufferedInputStream 577
    19.4. Класс PushbackInputStream 578
    19.5. Запись и чтение двоичных данных 579
    19.5.1. Класс DataOutputStream 579
    19.5.2. Интерфейс DataOutput 579
    19.5.3. Класс DataInputStream 580
    19.5.4. Интерфейс DataInput 581
    19.6. Сериализация объектов 582
    19.6.1. Класс ObjectOutputStream 583
    19.6.2. Интерфейс ObjectOutput 584
    19.6.3. Класс ObjectInputStream 584
    19.6.4. Интерфейс ObjectInput 584
    19.7. Файлы с произвольным доступом 586
    Глава 20. Символьные потоки ввода/вывода 589
    20.1. Базовые классы символьных потоков ввода/вывода 589
    20.1.1. Класс Writer 589
    20.1.2. Класс OutputStreamWriter 591
    20.1.3. Класс Reader 593
    20.1.4. Класс InputStreamReader 596
    20.2. Буферизованные символьные потоки ввода/вывода 598
    20.2.1. Класс BufferedWriter 598
    20.2.2. Класс BufferedReader 600
    20.3. Класс PushbackReader 602
    20.4. Классы PrintWriter и PrintStream 603
    20.4.1. Класс PrintWriter 603
    20.4.2. Класс PrintStream 607
    20.4.3. Перенаправление стандартных потоков вывода 608
    20.5. Класс Scanner 609
    20.6. Класс Console 617
    Глава 21. Работа с потоками данных: Stream API 621
    21.1. Создание потока данных 621
    21.1.1. Создание потока из коллекции 621
    21.1.2. Создание потока из массива или списка значений 623
    21.1.3. Создание потока из строки 625
    21.1.4. Создание потока из файла или каталога 626
    21.1.5. Создание потока с помощью итератора или генератора 627
    21.1.6. Создание потока случайных чисел 629
    21.1.7. Создание пустого потока 630
    21.2. Промежуточные операции 630
    21.2.1. Основные методы 630
    21.2.2. Преобразование типа потока 634
    21.2.3. Объединение и добавление потоков 636
    21.3. Терминальные операции 637
    21.3.1. Основные методы 637
    21.3.2. Класс Optional<T> 642
    21.3.3. Преобразование потока в коллекцию, массив или в другой объект 647
    Глава 22. Взаимодействие с сетью Интернет 650
    22.1. Класс URI 653
    22.2. Класс URL 657
    22.2.1. Разбор URL-адреса 658
    22.2.2. Кодирование и декодирование строки запроса 660
    22.2.3. Получение данных из сети Интернет 661
    22.3. Классы URLConnection и HttpURLConnection 662
    22.3.1. Установка тайм-аута 662
    22.3.2. Получение заголовков ответа сервера 663
    22.3.3. Отправка заголовков запроса 665
    22.3.4. Отправка запроса методом GET 666
    22.3.5. Отправка запроса методом POST 668
    22.3.6. Отправка файла методом POST 670
    22.3.7. Обработка перенаправлений 672
    22.3.8. Обработка кодов ошибок 673
    Глава 23. Работа с базой данных MySQL 674
    23.1. Установка JDBC-драйвера 674
    23.2. Регистрация JDBC-драйвера и подключение к базе данных 676
    23.3. Создание базы данных 677
    23.4. Создание таблицы 678
    23.5. Добавление записей 679
    23.6. Обновление и удаление записей 682
    23.7. Получение записей 682
    23.8. Метод execute() 684
    23.9. Получение информации о структуре набора ResultSet 686
    23.10. Транзакции 687
    23.11. Получение информации об ошибках 688
    Глава 24. Многопоточные приложения 690
    24.1. Создание и прерывание потока 690
    24.2. Потоки-демоны 694
    24.3. Состояния потоков 694
    24.4. Приоритеты потоков 695
    24.5. Метод join() 695
    24.6. Синхронизация 696
    24.6.1. Ключевое слово volatile 698
    24.6.2. Ключевое слово synchronized 698
    24.6.3. Синхронизированные блоки 699
    24.6.4. Методы wait(), notify() и notifyAll() 699
    24.7. Пакет java.util.concurrent.locks 702
    24.7.1. Интерфейс Lock 702
    24.7.2. Интерфейс Condition 703
    24.8. Пакет java.util.concurrent 704
    24.8.1. Интерфейс BlockingQueue<E>: блокирующая односторонняя очередь 705
    24.8.2. Интерфейс BlockingDeque<E>: блокирующая двухсторонняя очередь 708
    24.8.3. Класс PriorityBlockingQueue<E>: блокирующая очередь с приоритетами 710
    24.8.4. Интерфейсы Callable<V> и Future<V> 711
    24.8.5. Пулы потоков 713
    24.9. Синхронизация коллекций 715
    Глава 25. Java SE 11 717
    25.1. Установка OpenJDK 11 717
    25.2. Установка и настройка редактора Eclipse 719
    25.3. Компиляция и запуск программы в Java 11 724
    25.4. Инструкция var в лямбда-выражениях 725
    25.5. Новые методы в классе String 726
    25.6. Новый метод of() в интерфейсе Path 728
    25.7. Новые методы в классе Files 728
    25.8. Новый формат метода toArray() в интерфейсе Collection<E> 729
    25.9. Новый метод not() в интерфейсе Predicate<T> 730
    25.10. Модуль java.net.http 731
    25.10.1. Класс HttpRequest: описание параметров запроса 731
    25.10.2. Класс HttpClient: отправка запроса и получение ответа сервера 732
    25.10.3. Интерфейс HttpResponse<T>: обработка ответа сервера 735
    25.10.4. Отправка запроса методом GET 736
    25.10.5. Отправка запроса методом POST 738
    Заключение 741
    Приложение. Описание электронного архива 743
    Предметный указатель 745

    Продажник:
    Скрытая ссылка
     
    Последнее редактирование модератором: 28 сен 2019
    1 человеку нравится это.
  2. Последние события

    1. skladchik.com
      Складчина доступна.
      7 сен 2019
    2. skladchik.com
      Взнос составляет 53р.
      6 сен 2019
    3. skladchik.com
      Складчина активна.
      6 сен 2019
    4. Simon1
      Simon1 участвует.
      6 сен 2019

    Последние важные события

    1. skladchik.com
      Складчина доступна.
      7 сен 2019
    2. skladchik.com
      Взнос составляет 53р.
      6 сен 2019
    3. skladchik.com
      Складчина активна.
      6 сен 2019
    4. skladchik.com
      Сбор взносов начинается 06.09.2019.
      2 сен 2019
  3. Обсуждение
  4. 13 авг 2019
    #2
    GladPozitiv
    GladPozitiv БанЗабанен
    Цена с учетом скидки по акции "Скидка 35% по акции «Читаем в августе»" (35%) - 910 рублей
    Надо собираться)
     
    1 человеку нравится это.
  5. 13 авг 2019
    #3
    Goldsmith
    Goldsmith ОргОрганизатор
    Скидка еще 4 дня, успеем собраться будет дешевле...
     
  6. 13 авг 2019
    #4
    Goldsmith
    Goldsmith ОргОрганизатор
    Помогайте с рекламой - быстрее соберёмся!
     
  7. 16 авг 2019
    #5
    GladPozitiv
    GladPozitiv БанЗабанен
    Ну что может купим пока по акции?
     
  8. 16 авг 2019
    #6
    Evankoo
    Evankoo ЧКЧлен клуба
    лучше не надо, чревато массовой отпиской
     
  9. 2 сен 2019
    #7
    Goldsmith
    Goldsmith ОргОрганизатор
    Книга куплена по акции, получена, отсканирована и готова к выдаче. Записывайтесь активнее и буду объявлять о сборах!
     
    1 человеку нравится это.
  10. 6 сен 2019
    #8
    DekaOzz
    DekaOzz СкладчикСкладчик
    Не понял как оплатить взнос...
     
    2 пользователям это понравилось.
Статус обсуждения:
Комментирование ограничено.

Поделиться этой страницей