В Java все определения функций должны находиться внутри классов. Мы также вызываем методы функций. Давайте посмотрим на пример метода
public class Main {
public static void foo() {
// Do something here
}
}
foo
- это метод, который мы определили в классе Main. Обратите внимание на несколько моментов foo
.
static
означает, что этот метод принадлежит классу Main, а не конкретному экземпляру Main. Это означает, что мы можем вызывать метод из другого такого класса .Main.foo()
void
означает, что этот метод не возвращает значение. В Java методы могут возвращать одно значение, и оно должно быть определено в объявлении метода. Однако вы можете использовать return
само по себе для выхода из метода.Мне всегда нравится говорить, что аргументы в методы Java передаются по значению, хотя некоторые могут не согласиться с моим выбором слов, я считаю, что это лучший способ объяснить и понять, как именно это работает.
По значению означает, что аргументы копируются при запуске метода. Давайте посмотрим на пример.
public void bar(int num1, int num2) {
...
}
Вот еще одно место в коде, где называется bar
int a = 3;
int b = 5;
bar(a, b);
Вы можете себе представить, что когда он запущен, это похоже на то, что в начале написаны следующие две строки:bar(a, b)
bar
int num1 = a;
int num2 = b;
И только после этого выполняется остальная часть метода.
Это означает, что a
значение будет скопировано num1
и b
значение будет скопировано num2
. Изменение значений num1
и num2
не повлияет на a
и b
.
Если аргументы были объектами, правила остаются теми же, но действуют несколько иначе. Вот пример:
public void bar2(Student s1, Student s2) {
...
}
И вот как мы это используем
Student joe = new Student("joe");
Student jack = new Student("jack");
bar2(joe, jack);
Снова мы можем изобразить те же две строки в начале bar2
Student s1 = joe;
Student s2 = jack;
Но когда мы назначаем объекты, это немного отличается от присваивания примитивов. s1
и joe
представляют собой две разные ссылки на один и тот же объект. правда. Это означает, что запущенные методы изменят объект . Но если мы изменим значение в качестве ссылки, это не повлияет на ссылку .s1 == joe
s1
joe
s1
joe
s1.setName("Chuck"); // joe name is now Chuck as well
s1 = new Student("Norris"); // s1 is a new student, different than joe with the name of Norris
// s1 == joe is not true anymore
Нестатические методы в Java используются больше, чем статические методы. Эти методы можно запускать только для объектов, а не для всего класса.
Нестатические методы могут обращаться к полю объекта и изменять его.
public class Student {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Для вызова методов потребуется объект типа Student
.
Student s = new Student();
s.setName("Danielle");
String name = s.getName();
Student.setName("Bob"); // Will not work!
Student.getName(); // Will not work!
Напишите метод printFullName
ученика, который печатает полное имя ученика.