JavaRush /Java блог /Random UA /Кава-брейк #114. Конструктор за замовчуванням Java — прик...

Кава-брейк #114. Конструктор за замовчуванням Java — приклад конструктора класу. Maven або Gradle: як вибрати правильний інструмент збирання

Стаття з групи Random UA

Конструктор за замовчуванням Java — приклад конструктора класу

Джерело: FreeCodeCamp У цій статті ми поговоримо про конструкторів, про те, як їх створювати та які конструктори за замовчуванням існують у Java. Кава-брейк #114.  Конструктор за замовчуванням Java — приклад конструктора класу.  Maven або Gradle: як вибрати правильний інструмент збирання - 1

Що таке архітектор?

Як термін об'єктно-орієнтованого програмування на основі класів, конструктор є унікальним методом, який використовується для ініціалізації новоствореного об'єкта (класу). Є кілька правил, які ви повинні дотримуватися при створенні конструкторів. Ці правила включають:
  • Ім'я конструктора має збігатися з ім'ям класу.
  • Конструктор не повинен мати типу, що повертається.
Перш ніж ми продовжимо, давайте подивимося, як виглядає клас у Java:

public class Student {
  String firstName;
  String lastName;
  int age;
}
У наведеному вище коді показаний клас Student з трьома атрибутами - firstName , lastName та age . Вважатимемо, що клас має бути взірцем для реєстрації учнів. Нагадаємо, що ці три атрибути не мають жодних значень, тому інформація в них не є жорстко закодованою. Тепер ми будемо використовувати конструктори для створення нового екземпляра нашого об'єкту Student :

public class Student {
  String firstName;
  String lastName;
  int age;

  //конструктор Student
  public Student(){
      firstName = "Ihechikara";
      lastName = "Abba";
      age = 100;
  }
  
  public static void main(String args[]) {
      Student myStudent = new Student();
      System.out.println(myStudent.age);
      // 100
  }
}
Ми створабо конструктор, який використали для ініціалізації атрибутів, визначених в об'єкті Student . Наведений вище код є прикладом конструктора без аргументів . Давайте тепер подивимося на приклад іншого роду:

public class Student {
  String firstName;
  String lastName;
  int age;
  
  //конструктор
  public Student(String firstName, String lastName, int age){
      this.firstName = firstName;
      this.lastName = lastName;
      this.age = age;
  }
  
  public static void main(String args[]) {
    Student myStudent = new Student("Ihechikara", "Abba", 100);
    System.out.println(myStudent.age);
  }

}
Наразі ми створабо параметризований конструктор. Параметризований конструктор – це конструктор, створений із аргументами/параметрами. Тепер змінимо його.

public Student(String firstName, String lastName, int age){
      
  }
Ми створабо новий конструктор, який приймає три аргументи — два рядки та ціле число.

this.firstName = firstName;
this.lastName = lastName;
this.age = age;
Потім ми пов'язали ці аргументи з атрибутами, які ми визначабо під час створення нашого класу. Тепер ми ініціалізували об'єкт Student за допомогою конструктора.

public static void main(String args[]) {
    Student myStudent = new Student("Ihechikara", "Abba", 100);
    System.out.println(myStudent.age);
  }
Нарешті ми створабо новий екземпляр об'єкту Student і передали йому наші аргументи. Ми змогли це зробити, бо ми вже визначабо їх у конструкторі. Я створив один конструктор із трьома аргументами, але ви також можете створити окремі конструктори для ініціалізації кожного атрибуту. Тепер, коли ви знаєте, що таке конструктор Java і як його використовувати, давайте розглянемо конструктори за замовчуванням.

Що таке конструктор за замовчуванням?

За замовчуванням конструктор — це конструктор, створений компілятором, якщо ми не визначаємо жодних конструкторів для класу. Ось приклад:

public class Student {
  String firstName;
  String lastName;
  int age;
  
  public static void main(String args[]) {
      Student myStudent = new Student();
      
      myStudent.firstName = "Ihechikara";
      myStudent.lastName = "Abba";
      myStudent.age = 100;
      
      System.out.println(myStudent.age);
      //100
      
      System.out.println(myStudent.firstName);
      //Ihechikara
  }
}
Чи можете ви знайти різницю між цим і двома попередніми прикладами? Зауважте, що перед створенням ми не визначабо конструктор myStudent для ініціалізації атрибутів, створених у класі. Це не викликає помилки на нашому шляху. Точніше, компілятор створить порожній конструктор, але ніде в коді ви цього конструктора не побачите - це відбувається "під капотом". Ось як виглядатиме наведений вище код, коли компілятор почне виконувати свою роботу:

public class Student {
  String firstName;
  String lastName;
  int age;
  
  
  /* пустой конструктор, созданный компилятором. Этот конструктор не будет отображаться в вашем коде*/
  Student() {
  
  }
  
  public static void main(String args[]) {
      Student myStudent = new Student();
      
      myStudent.firstName = "Ihechikara";
      myStudent.lastName = "Abba";
      myStudent.age = 100;
      
      System.out.println(myStudent.age);
      //100
      
      System.out.println(myStudent.firstName);
      //Ihechikara
  }
}
Багато хто плутає конструктор за замовчуванням з конструктором без аргументів, але в Java це не одне й те саме. Будь-який конструктор, створений програмістом, не вважається конструктором за замовчуванням Java.

Висновок

У цій статті ми дізналися, що таке конструктори і як ми можемо створювати та використовувати їх для ініціалізації наших об'єктів. Ми також поговорабо про конструкторів за промовчанням і про те, чим вони відрізняються від конструкторів без аргументів. Вдалого кодингу!

Maven або Gradle: як вибрати правильний інструмент збирання

Джерело: Hackernoon Автоматизація збирання - важливий аспект розробки програмного забезпечення. У цій статті ми порівняємо два найпопулярніші інструменти складання для Java-розробки: Maven і Gradle . Кава-брейк #114.  Конструктор за замовчуванням Java — приклад конструктора класу.  Maven або Gradle: як вибрати правильний інструмент збирання - 2

Make та Apache Ant

Раніше розробники використовували інструмент Make для створення проектів Java, і процес складання мало відрізнявся від створення програм будь-якою іншою мовою. Але в 2000 році було випущено систему складання An t (Another Neat Tool). Ant, як і Make, використовує імперативний стиль, а її скрипти складання мають синтаксис XML. Ant розроблена як система автоматизації збирання, призначена для Java-проектів. Тому Java-розробники можуть легко розширити її функціональність.

Maven

У 2004 році з'явилася нова система складання Maven, яка змінила процес складання Java-додатків. Раніше розробники самі організовували структуру тек для зберігання вихідних кодів, ресурсів, каталогів шляхів до класів та вихідних каталогів. Через це скрипти збирання Ant для двох різних програм могли сильно відрізнятися: компіляція, збирання, копіювання файлів у вихідний каталог і т. д. прописувалися окремо. У Maven проект Java завжди має чітку структуру. Наприклад, вихідні джерела повинні знаходитися в src/main/java, ресурси для тестів — в src/test/resources. Maven дозволяє створити файлову структуру типового проекту за допомогою однієї команди. Maven також вводить поняття “життєвого циклу складання” (build lifecycle) з послідовними фазами: перевірити ➞ скомпілювати ➞ протестувати ➞ упаковати ➞ перевірити ➞ встановити ➞ розгорнути (validate ➞ compile ➞ test ➞ package ➞ фіксованою структурою папок та набору цілей, немає необхідності писати та підтримувати великий скрипт складання – вони стали декларативними. Розробникам стало зручніше працювати не лише з власним кодом, а й із сторонніми проектами, бо зрозуміло, як влаштовано вихідний код та як його збирати. У світі Java досить багато бібліотек, і великі програми використовують їх сотнями. Якщо ви використовуєте Ant, то пам'ятайте, що вам доведеться самостійно додати до проекту необхідні jar-файли. Вам також потрібно подбати про необхідні транзитивні залежності. Maven надає функції диспетчера залежностей через Maven Central Repository. Тепер при вказівці нової залежності в скрипті складання Maven автоматично знайде потрібний jar відповідної версії та всі його транзитивні залежності, завантажить їх і простежить, щоб вони потрапабо до classpath проекту. Ви також можете підтримувати свій закритий репозиторій, в якому можна зберігати власні або пропатчені бібліотеки, або стандартні бібліотеки, створені вручну. Слід зазначити, що Ant можна використовувати спільно з Apache Ivy Project , який дозволяє керувати залежностями і працювати з репозиторіями Maven. Незважаючи на всі переваги Maven, його декларативний підхід у деяких ситуаціях може виявитися недоліком. Наприклад, коли вам потрібно змінити життєвий цикл складання та додати нові цілі у процес складання. Функціональність Maven можна розширювати за допомогою плагінів. Існує безліч готових плагінів Maven, які вирішують різні завдання, всі вони також доступні з Maven Central Repository. Але якщо з якихось причин потрібно трохи змінити стандартний життєвий цикл, а відповідного плагіна немає, розробнику доведеться самостійно його створювати.

Gradle

Перший реліз системи складання Gradle випущено у 2008 році. Через 4 роки вийшла версія 1.0. Мета проекту Gradle – зберегти всі переваги Maven, але при цьому розширити можливості для налаштування процесу збирання. Скрипти складання Gradle написані на Groovy DSL. Gradle дає можливість писати декларативні сценарії збірки і компактніший, ніж Maven, тому що мова XML досить громіздка. У процес складання Gradle можна легко додати нестандартну логіку. Достатньо написати Groovy-скрипт, і не потрібно розробляти плагіни. Розробник може легко налагоджувати виконання скриптів збирання, оскільки вони є звичайними файлуми Groovy. Таким чином, Gradle поєднує в собі декларативний та імперативний підходи. Gradle також підтримує плагіни, що дозволяє розробникам змінювати налаштування. Однією з істотних переваг Gradle є інкрементальне складання. При перезапуску складання Gradle визначає, чи змінабося файли, що є вхідними даними для націлення, і якщо ні, то виконання націлення пропускається, оскільки його вихідні артефакти вже зібрані. Це дає значне збільшення швидкості збирання порівняно з Maven, особливо у великих багатомодульних проектах. Gradle також може запускати Gradle daemon - фоновий процес, який дозволяє уникнути витрат ресурсів та часу на ініціалізацію при кожному запуску складання. У Gradle є зручна функція Gradle-обертки - можливість генерувати командні сценарії оболонки та Windows, які автоматично завантажують дистрибутив Gradle зазначеної версії та використовують його для складання проекту. Це означає, що для складання проекту Gradle вам не потрібно окремо встановлювати Gradle, достатньо просто встановити Java. За потреби можна легко переключити проект на іншу версію Gradle.

Вибір між Maven та Gradle

Незважаючи на переваги Gradle, досить багато проектів використовують систему збирання Maven. Вибір залежить від типу проекту та команди. Maven використовується з 2004 року, тому з ним знайомі більше розробників. Крім того, Maven стабільний. Остання major-версія 3 випущена у 2010 році. Gradle вже кілька разів суттєво змінювався без зворотної сумісності, і розробникам доводилося переносити свої скрипти збирання на нові версії. Оскільки не всі знайомі з Groovy чи Kotlin, через це робота з Gradle потребує додаткових знань, тоді як Maven використовує зрозумілий XML. Тут постає питання: якщо проект почав розроблятися до того, як Gradle став популярним, чи є сенс переносити скрипти збірки на Gradle? З одного боку, дедалі більше розробників вибирають Gradle. Наприклад, Spring, Hibernate та LinkedIn використовують Gradle. Системою складання Android також є Gradle, і вона взагалі популярна серед розробників додатків Android. З іншого боку, всі відомі IDE мають інтеграцію з обома системами збирання та підтримують автодоповнення під час редагування скриптів збирання. Як для Maven, для Gradle розроблено величезну кількість плагінів, які дозволяють додавати функції, що часто використовуються, в процес складання проекту.

Висновок

З плюсів і мінусів кожної з описаних вище систем збирання можна зробити наступний висновок. Maven більше підходить для невеликих проектів, що не потребують налаштування процесу складання, та й для яких час складання проекту не такий критичний. Gradle більше підходить для масштабних проектів з великою кількістю модулів, а також Android-додатків.
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ