1. Модификаторы доступа
Перед каждым методом программист может указать так называемые модификаторы доступа. К ним относятся ключевые слова: public
, protected
, private
.
Эти «модификаторы доступа» позволяют ограничивать доступ к методу из других классов.
Например, если перед объявлением метода написать ключевое слово private
, этот метод можно будет вызывать только из того же класса, в котором он объявлен. Ключевое слово public
разрешает обращение к помеченному методу из любого метода любого класса.
Всего таких модификаторов 3, а типов доступа к методу — 4, ведь отсутствие модификатора доступа тоже что-то значит.
Доступ из... | ||||
---|---|---|---|---|
Модификаторы | Любого класса | Класса-наследника | Своего пакета | Своего класса |
public |
Есть | Есть | Есть | Есть |
protected |
Нет | Есть | Есть | Есть |
без модификатора | Нет | Нет | Есть | Есть |
private |
Нет | Нет | Нет | Есть |
1. Модификатор public
.
К методу (переменной или классу), помеченному модификатором public
, можно обращаться из любого места программы. Это самая высокая степень открытости – никаких ограничений нет.
2. Модификатор private
.
К методу (переменной или классу), помеченному модификатором private
, можно обращаться только из того же класса, где он объявлен. Для всех остальных классов помеченный метод (или переменная) – невидимы и «как бы не существуют». Это самая высокая степень закрытости — только свой класс.
3. Без модификатора (модификатор по умолчанию).
Если метод (или переменная) не помечены никаким модификатором, считается, что они помечены «модификатором по умолчанию». Переменные или методы с таким модификатором (т.е. вообще без какого-нибудь) видны всем классам пакета, в котором они объявлены. И только им. Этот модификатор еще иногда называют package
, намекая, что доступ к переменным и методам открыт для всего пакета, в котором находится их класс
4. Модификатор protected
.
Если метод помечен модификатором protected
, к нему можно обращаться из того же класса, того же пакета и классов наследников (классов, унаследованных от класса, в котором объявлен метод). Эту тему разберем подробнее в квесте Java Core.
До конца квеста Java Syntax вы можете всем своим методам (а также классам и переменным класса) указывать модификатор public
. Другие модификаторы вам понадобятся, когда мы начнем активно изучать ООП.
Зачем нужны модификаторы доступа?
Все дело в больших проектах, которые пишут десятки и сотни программистов одновременно.
Иногда бывают ситуации, когда программист хочет разделить слишком большой метод своего класса на части и вынести часть кода во вспомогательные методы. Но вместе с тем он не хочет, чтобы другие программисты вызывали эти вспомогательные методы, т.к. тогда код его класса может работать неправильно.
Вот и придумали такие модификаторы доступа. Пометил вспомогательный метод словом private, и никакой код кроме вашего класса не сможет увидеть ваш вспомогательный метод.
2. Ключевое слово static
Ключевое слово static
превращает метод в статический. Что это такое, мы рассмотрим позднее, а сейчас просто запомним пару фактов про статические методы.
Факт 1. Статический метод не привязан ни к какому объекту, но относится к классу, в котором объявлен. Чтобы вызвать статический метод, нужно написать:
ИмяКласса.имяМетода()
Примеры статических методов:
Имя класса | Имя статического метода | |
---|---|---|
Thread.sleep()
|
Thread |
sleep() |
Math.abs()
|
Math |
abs() |
Arrays.sort()
|
Arrays |
sort() |
Имя класса перед именем статического метода можно не писать, если вы вызываете статический метод изнутри — из того же класса. Именно поэтому вам не нужно каждый раз писать Solution
перед именами вызываемых статических методов.
Факт 2. Статический метод не может обращаться к нестатическим методам его же класса. Статический метод может обращаться только к статическим методам. Поэтому все методы, которые мы хотим вызвать из метода main
, мы объявляем статическими.
Почему? Вы сами сможете ответить на этот вопрос, когда начнете изучать ООП и поймете, как устроены статические методы.
3. Ключевое слово throws
Есть еще одно ключевое слово, которое вы, вероятно, видели рядом с объявлением метода — это слово throws
. Оно, в отличие от модификаторов доступа и ключевого слова static
, размещается после параметров метода:
public static тип имя(параметры) throws Exception
{
код метода
}
Какой именно смысл в нем заключается, мы разберем немного позднее, когда будем изучать исключения.
Но если поверхностно коснуться его, можно сказать, что в методе, помеченном словом throws, могут возникать ошибки (исключения) типа Exception
(и унаследованных от него классов). Если в классе могут возникнуть ошибки нескольких типов, нужно перечислить все типы через запятую.
4. Метод main
Строка, в которой объявляется метод, со всеми модификаторами, будет влиять на то, как этот метод будет вызываться из других классов и методов. Результат какого типа он будет возвращать и какие возможны ошибки при его работе.
Такая строка называется объявлением метода и имеет общий вид:
модификаторы доступа static тип имя(параметры) throws исключения
Где модификаторы доступа
— это public
, protected
, private
или ничего;
static
ставится, если метод статический (отсутствует для нестатических методов)
тип
— тип результата функции (void
если результат отсутствует)
Теперь вы скорее всего понимаете, что значат все ключевые слова при объявлении метода main
:
public static void main(String[] args) throws Exception
Доступ к методу main()
возможен из любого класса, об этом говорит слово public
.
Метод статический (его можно явно вызвать в виде Solution.main()
).
Метод main
не возвращает никакого результата. Тип результата — void
(пустой тип/заглушка)
Метод main
принимает параметры(!): массив строк. И название args
намекает на «аргументы программы». При запуске программы в нее можно передать параметры — массив строк. Они и будут содержаться в массиве args
метода main()
.
В методе main()
могут возникать необработанные ошибки типа Exception
(или его наследники).
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ