Занятие №1
Java. Первый проект
Михаил
Павлов
Обо мне
Павлов Михаил
старший разработчик
компания "Сибирские интеграционные системы"
Опыт работы:
- с 2012 по 2015гг работал в "Билайн" на поддержке биллинговой системы
- с 2015 по настоящее время работаю в СИС
- с 2017 руководителем группы разработчиков
Технологии, с которыми работал:
- Базы данных: PostgreSQL, Oracle (PL/SQL), MongoDB
- Бэкэнд: Java (Spring, Spring Boot, SpringData, Hibernate), C#, Cache (Mumps)
- Фронтэнд: JavaScript, TypeScript, AngularJS, Angular (2-8), ActionScript
Что вы сегодня узнаете
- Java, чем она хороша и почему стоит ее изучать
- Что такое JVM, JDK, JRE
- Основы синтаксиса языка
- Как написать свою первую программу
- Gradle, для чего нужен и как пользоваться
А также:
- Много полезных ссылок
- Домашнее задание
Что такое Java?
Java - это
- статически типизированный
- объектно-ориентированный
- язык программирования
Почему именно Java?
Распространенность
- Низкий порог вхождения
- Работает на самой производительной платформе
- Java и C# - основной выбор при разработке корпоративных приложений
- 7,6 миллионов разработчиков в 2019г (источник)
- 14% репозиториев на GitHub (источник)
- Рынок труда (hh)
Особенности Java
Мы принимаем на работу java-разработчиков :)
Ключевые фичи
- Упрощение и ускорение разработки программы за счет сборки мусора (GarbageCollector)
- Кроссплатформенность
("Write once, run anywhere")
Garbage collector
C++ (нужно управлять памятью вручную)
Java (очищает память автоматически)
a = new float[10];
<...>
delete [] a
float[] b = new float[10];
Виртуальная машина
(JVM или Java Virtual Machine)
Компилятор транслирует приложение в платформонезависимый байт код, который будет выполняться виртуальной машиной
"Write once,
run anywhere"
Java Virtual Machine
Система версий Java
История
До Java 9 (java 8 вышла в 2014г):
- Версии выходили раз в несколько лет
- Мелкие фичи ждали релиза (ждали, пока доделаются крупные)
Начиная с Java 9 (2017):
- 2 версии в год
- Выходит больше мелких и приятных улучшений
Мы будем работать с Java 8
-
Во-первых, она получилась очень удачной и до сих пор активно используется
-
Во-вторых, программы написанные под java 8 будут работать и под java 13 (актуальная версия на данный момент)
(примеры будут адаптированы под эту версию)
С чего начать?
- Настроить окружение
- Разобраться с синтаксисом
- Написать и запустить
1. Окружение
JDK
Development Tools
JRE
JVM
Lib Files
JDK
- Java Develoment Kit
JRE
- Java Runtime Environment
JVM
- Java Virtual Machine
-
Скачиваем и устанавливаем JDK для Java 8 версии
-
(Windows) Указываем переменную среды JAVA_HOME
-
(Windows) Добавляем в Path путь до %JAVA_HOME%/bin
Настройка
* Если возникнут проблемы, пишите в чат учебной группы
2. Синтаксис
Какие элементы есть в Java?
Class
Object
Method
Variables
public class Car {
}
new Car()
public void drive() {
}
int wheels = 4;
Что может включать класс
public class Car {
private int wheelsCount;
private boolean hasDriver;
private String direction;
private Long distance;
private Car myCurrentCar;
private Engine myEngine;
public void driveToDirection(String direction) {
if (direction != null) {
System.out.println("go to " + direction);
}
}
public int getWheelsCount() {
return this.wheelsCount;
}
}
Свойства:
Методы
примитивы
обертки
объекты
Какие бывают типы данных
Примитивы
Объекты
Обертки
- boolean
- int
- long
- float
- char
- ...
- Boolean
- Integer
- Long
- Float
- Character
- ...
- Object
- Car
- ...
Из чего состоит метод
public static boolean checkIfValidGasoline(String gasoline) {
// do check
}
Модификатор доступа
Возвращаемый тип
Имя метода
Входящие параметры
(тип и имя)
Тело метода
Ключевое слово
(необязательное)
Несколько классов и область видимости
public class Car {
public void setColor(String color) {
}
private int getWheelsCount() {
}
}
---------------------------------------------
public class Driver {
public void createRedCar() {
Car my = new Car();
my.setColor("Red");
}
public void checkCarEquipment() {
Car my = new Car();
int wheelsCount = my.getWheelsCount();
}
}
Модификатор доступа - public
Модификатор доступа - private
Обращение снаружи класса - ОК
Обращение снаружи класса - Ошибка доступа
Области видимости
Точка входа
public class MyNewApplication
{
public static void main(String[] args) {
// do something
}
}
Важно запомнить
главное заклинание
В Java существует общепринятая конвенция о том, как называть классы, методы и пр.
Конвенция именования
Тип | Описание |
---|---|
ClassName | Существительное или фраза, начинается с заглавной, остальные слова слитно, первая буква каждого слова - заглавная (System, StringBuilder) |
methodName | Глагол, первая строчная, остальные слова слитно, первая буква каждого слова - заглавная (actionPerformed, printLn, getResult) |
variableName | Существительное или фраза, первая буква строчная, остальные слова слитно, первая буква каждого слова - заглавная (firstName, orderNumber, myVariable) |
CONSTANTS | Буквы в верхнем регистре, слова разделены подчеркиванием (MIN_WIDTH, NAME_TEMPLATE, TEXT_MAX_LENGTH) |
Время писать программу
Gradle
(open-source система сборки проекта)
- Инструмент для работы со сложными приложениями
- Упрощает скачивание библиотек (14% репозитариев на GitHub)
Установка и создание проекта
- Скачать и установить gradle
- Выполнить команду в консоли:
- gradle init
- Выбрать варианты ответов:
- тип проекта - application
- язык - java
- DSL - Groovy
- тестовый фреймворк - JUnit 4
- имя проекта
- пакет
Select type of project to generate:
1: basic
2: application
3: library
4: Gradle plugin
Enter selection (default: basic) [1..4] 2
Select implementation language:
1: C++
2: Groovy
3: Java
4: Kotlin
5: Swift
Enter selection (default: Java) [1..5] 3
Select build script DSL:
1: Groovy
2: Kotlin
Enter selection (default: Groovy) [1..2] 1
Select test framework:
1: JUnit 4
2: TestNG
3: Spock
4: JUnit Jupiter
Enter selection (default: JUnit 4) [1..4] 1
Project name (default: unit1_test): my_app_test
Source package (default: my_app_test): com.github.my.test
Наименование пакетов
- Имя пакета обеспечивает уникальность проекту
- Обычно используют свой интернет домен, в обратном порядке. Например:
- com.sun.eng
- com.apple.quicktime.v2
- com.github.myname
Что появилось в проекте
plugins {
id 'java'
id 'application'
}
repositories {
jcenter()
}
dependencies {
implementation 'com.google.guava:guava:28.1-jre'
testImplementation 'junit:junit:4.12'
}
application {
mainClassName = 'com.github.my.test.App'
}
1. build.gradle
rootProject.name = 'my_app_test'
2. settings.gradle
3. App.java в папке:
src\main\java\com\github\my\test
Как запустить
C:/temp > gradle build
C:/temp > gradle run
- Собрать проект командой build
- Запустить приложение командой run
Intellij Idea (IDE)
Ссылка на скачивание (нам хватит Community Edition)
Домашнее задание (ч.1)
Зарегистрироваться на GitHub (https://github.com/)
Домашнее задание (ч.2)
* Не забыть использовать нужный репозиторий
Домашнее задание (ч.3)
- Выкачать репозиторий
- Создать новую ветку (branch)
- Решить задачу из задания (следующий слайд)
- Закоммитить изменения в ветку
- Залить на GitHub
- (!) Создать pull-request (описание)
Задание
Необходимо реализовать метод, который переставит символы в строке в обратном порядке, без использования метода reverse() из класса StringBuilder.
Подробности в Readme репозитория
Работы без pull-реквестов приниматься не будут
Домашнее задание (ч.4)
Прислать письмо со ссылкой на проект нам, на эл. почту:
checkhomework.sis@gmail.com
Формат письма:
Тема: Имя Фамилия, номер домашнего задания.
В тексте письма ссылка на пулл-реквест
Крайний срок сдачи - через неделю после выдачи задания
Полезные ссылки
Вопросы
Спасибо за внимание!
Copy of Занятие 1
By Dennis Kerner
Copy of Занятие 1
Java. Первый проект
- 519