Java. Урок 27. Модификаторы static и final

Модификаторы final и static очень важны в ООП. Ведь с помощью модификатора final вы сможете создать константу, а с помощью модификатора static можно обращаться к членам класса без создания экземпляра класса.
Рассмотрим для примера класс MyMath, который будет содержать арифметические функции:

1
2
3
4
5
6
7
8
public class MyMath {
    public static int Add(int x, int y) {
        return x + y;
    }
    public int Multiply(int x, int y) {
        return x * y;
    }
}

Функция Add у нас статичная, а функция Multiply нет:

1
2
int ans = MyMath.Add(x, y);//можно
ans = MyMath.Multiply(x, y);//нельзя

С другой стороны при создании объекта класса MyMath вы сможете пользоваться обеими функциями:

1
2
3
MyMath math = new MyMath();
int ans = math.Multiply(2,3);
ans = math.Add(2,3);

Конечно, обычно к статическим методам обращаются через название класса, а не через объект.
Теперь рассмотрим работу с статическими полями класса. Пусть у нас есть некоторая точка:

1
2
3
4
public class MyPoint {
    public static int x;
    public int y;
}

Тогда мы сможем изменять значение переменной x, не создавая объекта класса, при этом данное значение одно для всех, т.е любые изменения статического поля x будут видны во всех объектах класса, убедимся в этом на примере:

1
2
3
4
5
6
7
8
9
10
MyPoint point1 = new MyPoint();
MyPoint point2 = new MyPoint();
MyPoint.x = 1;
System.out.println(MyPoint.x);//1
System.out.println(point1.x);//1
System.out.println(point2.x);//1
point1.x = 2;
System.out.println(MyPoint.x);//2
System.out.println(point1.x);//2
System.out.println(point2.x);//2

Таким образом статичные члены относятся к самому классу, а не к его объектам, хотя доступ к ним возможен и через них.
Кроме того статичные функции не могут вызывать или обращаться к не статичным членам. Так как очевидно, что при вызове статичных функций не понятно к какому объекту мы обращаемся:

1
2
3
4
5
6
7
8
public class MyMath {
    public static int Add(int x, int y) {
        return  Multiply(x, y);//нельзя обращаться к не статичным методам
    }
    public int Multiply(int x, int y) {
        return x * y;
    }
}

Любое поле в Java можно сделать константой с помощью ключевого слова final:

1
2
3
4
5
final int x = 0;
= 1;//ошибка
final int y;
= 2;
= 1;//ошибка

Как видно из примера, значение переменной с модификатором final можно присвоить только 1 раз.
Модификатор final еще используется для того, чтобы запретить переопределения метода в классах наследниках. Если указать final перед классом, то вы запретите наследование от него.

Категория: Java | Добавил: ghost_mod (29.09.2016)
Просмотров: 323 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email:
Подписка:1
Код *: