Конструктор по умолчанию в 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 году была выпущена система сборки Ant (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 ➞ verify ➞ install ➞ deploy) Теперь, благодаря фиксированной структуре папок и набору целей, нет необходимости писать и поддерживать большой скрипт сборки — они стали декларативными. Разработчикам стало удобнее работать не только с собственным кодом, но и со сторонними проектами, потому что понятно, как устроен исходный код и как его собирать. В мире 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-приложений.