Перейти к основному содержимому

5.03. Основные элементы Java

Разработчику Архитектору

Основные элементы Java

Пакеты группируют классы по смыслу для удобства структурирования и предотвращения коллизий имён.

Пример:

package com.myapp.model;

Классы – шаблоны (чертежи), которые описывают свойства и поведение (методы);

Класс создаётся по общему принципу, как мы изучили в примере в главе по ООП:

public class Car {
// Свойства (поля)
String brand;
int year;

// Метод
void startEngine() {
System.out.println(brand + " engine started");
}
}

Объект – конкретный экземпляр класса. Объект создаётся так:

Person person = new Person(); // объект

Упрощённо:

Класс имяПеременной = new Класс(); // объект

Интерфейсы - абстрактные карты поведения, которую должны реализовать классы через ключевое слово interface для объявления и implements для использования:

interface Flyable {
void fly();
}

class Bird implements Flyable {
public void fly() {
System.out.println("Раскрываем крылья...");
}
}

Конструкторы – методы, вызываемые при создании объекта. Используются для инициализации состояния:

class Animal {
Animal(String name) {
System.out.println("Animal constructor: " + name);
}
}

class Cat extends Animal {
Cat(String name) {
super(name); // вызов конструктора родителя
System.out.println("Cat constructor");
}
}

Свойства (поля класса) – это переменные, объявленные внутри класса, но вне методов. Поля бывают следующих видов:

  • локальные переменные – объявлены внутри метода, недоступны за его пределами;
  • поля класса (члены класса) – доступны всем методам класса;
  • статические поля (static) – принадлежат самому классу, а не объекту.

Методы – блоки кода, которые можно вызывать по имени, позволяя повторно использовать логику. Они бывают с параметрами (указываются в скобках), и без возвращаемого значения (void):

public class Calculator {
// Метод с параметрами и возвращаемым значением
public int add(int a, int b) {
return a + b;
}

// Метод без возвращаемого значения (void)
public void printMessage(String message) {
System.out.println(message);
}
}

Методы могут быть переружены и переопределены.

Перегрузка методов (overloading) – это несколько методов с одним именем, но разными параметрами (по количеству, типу или порядку):

public class MathUtils {
public int add(int a, int b) {
return a + b;
}

public double add(double a, double b) {
return a + b;
}

public int add(int a, int b, int c) {
return a + b + c;
}
}

Выше приведён пример, где есть три метода add, но с разной сигнатурой – имя+список параметров. Возвращаемое значение не учитывается.

Переопределение методов (overriding) – подкласс предоставляет свою реализацию метода, который уже определён в родительском классе. При этом используется аннотация @Override. Чтобы переопределить метод, он должен быть public или protected. Пример:

class Animal {
public void makeSound() {
System.out.println("Издать какой-то звук");
}
}

class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Гав!");
}
}

Но к этому мы вернёмся позднее.

Переменные – это именованные хранилища данных определённого типа:

int age = 30;
String name = "Тимур";
double price = 9.99;
boolean isStudent = true;

Java – статически типизированный язык, то есть, тип переменной указывается при объявлении и не может меняться.

У каждой переменной есть область видимости, и зависит от того, где объявлена:

Где объявлена?Область видимости
Внутри методаДоступна внутри метода
Внутри блока кода {}Только внутри этого блока
Как поле классаДоступна во всём классе и других методах

Поэтому, если переменную нужно будет использовать во всем классе, нужно объявить её как поле класса ещё до методов, которые будут с ней работать. Если же это переменная, которая нужна для определенной задачи в методе – то объявляется она внутри.

Пример:

public class ScopeExample {
int classLevelVar = 10; // Поле класса — доступно всем методам

void method() {
int methodVar = 20; // Доступна только в этом методе

if (true) {
int blockVar = 30; // Доступна только внутри if
}
// System.out.println(blockVar); Ошибка: переменная недоступна
}
}