Почти все в Java - классы и объекты.

Чтобы объединить какие-то компоненты (например возраст, вес и имя) в одну сущность (человека например) - удобно завести новый тип. В случае явы это класс.

В первую очередь в классе есть поля - это переменные, которые являются составными каждого объекта данного класса. И методы - функции данного объекта

class Human {
    int age;                                // поле типа int с именем age
    float weight;                           // поле типа float с именем weight
    String name;                            // поле типа String с именем name
    
    public String ask(String question) {    // метод ask: String в начале - тип возвращаемого результата, ask - название метода, String question - аргумент вызова метода
        // через ключевое слово this можно явно добраться до всех полей и методов объекта, в котором мы находимся сейчас (т.е. у кого был вызывал метод ask)
        String myName = this.name;
        // ключевое слово return - возвращает значение справа от return результатом функции
        return "Я (" + myName + ") не понял вопрос: " + question;
    }
}

Чтобы создать конкретного человека - нужно создать объект класса Human. Т.е. инстанциировать/сконструировать его через ключевое слово new:

Human human = new Human();
System.out.println("Возраст: " + human.age);
System.out.println("Вес:     " + human.weight);
System.out.println("Имя:     " + human.name);

Замечание: Обращаемся мы к полям объекта через точку, т.е. сначала пишется название переменной (объекта) к которой хочется обратиться (в нашем случае human), затем точка (получается human.), а затем то что мы хотим из этого объекта взять - это может быть поле (например human.age) или вызов метода (например human.ask("Hello!")).

Заметим, что после такого конструирования значения полей нас навряд ли устраивают. А нам бы хотелось чтобы в них лежали какие-то осмысленные значения, т.е. нам хотелось бы инициализировать объект, т.е. инициализировать все поля данного новосозданного объекта.

Для этого в классе можно объявить так называемый конструктор, который занимается инициализированием (конструированием) сущности на момент ее создания, т.е. заполняет какими-то значениями все поля объекта. Для этого ему очевидно нужно знать, какие значения верны для новосозданного человека - они передаются ему через аргументы ровно так же, как передаются и аргументы в функции:

class Human {
    int age;                                            // поле
    float weight;                                       // поле
    String name;                                        // поле
    
    public Human(int age, float weight, String name) {  // конструктор
        this.age = age;
        this.weight = weight;
        this.name = name;
    }
    
    public String ask(String question) {                // метод ask
        String myName = this.name;
        return "Я (" + myName + ") не понял вопрос: " + question;
    }
}

Определение конструктора отличается от методов двумя нюансами:

  • его название всегда совпадает с классом в котором он оъявлен и объекты которого он инициализирует
  • перед ним не пишется возвращаемый тип, т.к. он всегда совпадает с классом объекты которого конструктор создает