Если переменные класса хранят состояние объекта, то методы представляют его поведение. Методы содержат собой набор операторов, которые выполняют определенные действия. И если нам надо определить в классе некоторые действия, нам надо определить методы.
Общее определение методов выглядит следующим образом:
[модификаторы] тип_возвращаемого_значения название_метода ([параметры]){
// тело метода
}
Модификаторы и параметры необязательны.
По умолчанию главный класс любой программы на Java содержит метод main, который служит точкой входа в программу:
class Program{
public static void main(String[] args) {
System.out.println("Hello METANIT.COM!");
}
}
Ключевые слова public и static являются модификаторами. Далее идет тип возвращаемого значения.
Ключевое слово void указывает на то, что метод ничего не возвращает.
Затем идут название метода - main и в скобках параметры метода - String[] args. И в фигурные скобки заключено тело метода - все действия,
которые он выполняет.
Для примера создадим класс и определим в нем метод:
class Person{
String name;
int age;
void print(){
System.out.printf("Name: %s \tAge: %d\n", name, age);
}
}
class Program{
public static void main(String[] args) {
}
}
Здесь определен класс Person с двумя полями - name и age и одним методом print. Иетод print в качестве возвращаемого типа имеет тип void (то есть по сути ничего не возвращает) и не принимает никаких параметров.
Все что делает этот метод - это выводит на консоль значения переменных name и age.
Но чтобы применить метод, его надо вызвать.
Вызов метода осуществляется в форме:
имя_метода(аргументы);
После имени метода указываются скобки, в которых перечисляются аргументы - значения для параметров метода.
Обращаю внимание, что в классе Program определен метод main, и нам не надо было его никак вызывать. Дело в том, что этот метод автоматически вызывается средой выполнения Java, и нам не надо его явным образом вызывать.
Остальные методы нам надо явным образом вызвать.
И поскольку при запуске программы запускает метод main(), то все остальные надо вручную явным образом вызывать в методе main (или в других методах, которые были также вызваны ранее).
Например, вызовем выше определенный метод print:
class Program{
public static void main(String[] args) {
// создаем объект Person
Person tom = new Person();
// устанавливаем значения полей класса
tom.name = "Tom";
tom.age = 41;
// вызываем метод print
tom.print();
}
}
class Person{
String name;
int age;
void print(){
System.out.printf("Name: %s \tAge: %d\n", name, age);
}
}
Для вызова метода print в методе main используется выражение tom.print(). То есть как и в случае с полями, после имени переменной класса идет точка и затем имя метода.
Поскольку метод print не имеtт никаких параметров, то после его названия при вызове ставятся пустые скобки. В итоге при выполнении программы мы увидим на консоли информацию о полях объекта:
Name: Tom Age: 41
Одно из преимуществ методов заключается в том, что мы можем вынести некоторые общие действия в отдельный метод и затем вызывать многократно их в различных местах программы. Например:
class Program{
public static void main(String[] args) {
Person tom = new Person();
tom.name = "Tom";
tom.age = 41;
tom.print();
tom.name = "Tomas";
tom.print();
tom.name = "Tommy";
tom.print();
}
}
class Person{
String name;
int age;
void print(){
System.out.printf("Name: %s \tAge: %d\n", name, age);
}
}
Здесь мы три раза устанавливаем имя человека и с помощью метода print проверяем его установку. В итоге мы получим следующий консольный вывод:
Name: Tom Age: 41 Name: Tomas Age: 41 Name: Tommy Age: 41
Одни методы класса могут вызывать другие методы этого класса:
class Program{
public static void main(String[] args) {
Person tom = new Person(); // создаем объект Person
tom.name = "Tom";
tom.age = 41;
tom.print();
}
}
// класс Person
class Person{
String name;
int age;
void printName(){
System.out.printf("Name: %s\n", name);
}
void printAge(){
System.out.printf("Age: %d\n", age);
}
void print(){
printName();
printAge();
}
}
Здесь в методе print вызываются два других метода класса - printName и printAge. Консольный вывод программы:
Name: Tom Age: 41