Методы, параметры и объекты

JavaJavaBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии мы переходим к методам и объектам. Задача - научиться определять метод с параметрами. Объект - это очень важный концепция в объектно-ориентированном языке программирования, поэтому хорошее знание этого будет полезно для вас.

Это Guided Lab, который предоставляет пошаговые инструкции, чтобы помочь вам учиться и практиковаться. Внимательно следуйте инструкциям, чтобы выполнить каждый шаг и получить практический опыт. Исторические данные показывают, что это лабораторная работа уровня начальный с процентом завершения 86%. Он получил 99% положительных отзывов от учащихся.

Методы и параметры

В некоторых случаях вам нужен код, который можно повторно использовать для решения некоторых похожих задач, таких как вывод возраста и имени человека. Для разных людей имя и возраст разные. Эти две переменные можно передать в блок кода в качестве параметров. Именно здесь мы вводим концепцию метода, который выполнит задачу.

Пример:

Напишите следующий код в файле /home/labex/project/methodTest.java:

public class methodTest
{
    public static void main(String[] args)
    {
        // вызов нашего собственного метода
        printInfo("Mike", 18);
        // вызов нашего собственного метода
        System.out.println(fibonacci(10));
        System.out.println(fibonacciNormal(10));
    }
    // мы определяем метод класса для вывода личной информации
    public static void printInfo(String name, int age){
        System.out.println("Hello " + name + ", your age is " + age);
    }
    // определяем метод класса для вычисления числа Фибоначчи с использованием рекурсии
    public static int fibonacci(int n){
        if(n<=2){
            return 1;
        }else{
            return fibonacci(n-1)+fibonacci(n-2);
        }
    }
    // определяем метод класса для вычисления числа Фибоначчи с использованием цикла итерации
    public static int fibonacciNormal(int n){
        if(n<=2){
            return 1;
        }
        int n1=1,n2=1,sum=0;
        for(int i=0;i<n-2;i++){
            sum=n1+n2;
            n1=n2;
            n2=sum;
        }
        return sum;
    }
}

Вывод:

Запустите файл methodTest.java с использованием следующих команд:

javac /home/labex/project/methodTest.java
java methodTest

Посмотрите на вывод:

Hello Mike, your age is 18
55
55

В приведенном выше примере мы пишем функцию под названием printInfo. Вы можете назвать ее как угодно. Там два параметра, и тип возврата - void, что означает, что ничего не будет возвращено. Вы можете определить тип возврата вашей функции как любой нужный вам тип, а количество и типы параметров могут быть любыми. Вы можете определить свой метод следующим образом:

Пример:

public/private static/final/{не обязательно} RETURN_TYPE METHOD_NAME( LIST OF PARAMETERS ) {
    // ТЕЛО МЕТОДА
}
public String getName(){}
public void setName(){}
public static void newInstance(){}
public final String msg(){}

Java предоставляет множество функций, которые выполняют наиболее распространенные операции в виде встроенных библиотечных методов, таких как математические функции. Эти функции называются методами. Методы вызываются с использованием синтаксиса, который похож на инструкции вывода, с которыми мы уже сталкивались:

Пример:

double root = Math.sqrt(16.0);   // root = 4.0
double height = Math.sin(1.5);   // height = 0.9974949866040544

Объект

В Java существуют два типа типов: примитивные типы и типы объектов. Примитивы, такие как int и boolean, начинаются с маленьких букв; типы объектов начинаются с заглавных букв. Это различие полезно, потому что оно напоминает нам некоторые различия между ними:

Когда вы объявляете примитивную переменную, вы получаете存储空间 для примитивного значения. Когда вы объявляете переменную объекта, вы получаете место для ссылки на объект. Чтобы получить место для самого объекта, вы должны использовать оператор new.

Если вы не инициализируете примитивную переменную, ей присваивается значение по умолчанию, которое зависит от ее типа. Например, 0 для int и false для boolean. Значение по умолчанию для типов объектов - null, что означает, что ссылка не ссылается на какой-либо объект.

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

Если мы передаем примитивные переменные в метод (передача параметра по значению), мы фактически копируем значения примитивов и используем копии внутри метода. Все операции внутри метода работают с копиями; и вне метода значения примитивных переменных остаются не измененными. Однако, если мы передаем не примитивные объекты в метод (передача параметра по ссылке), мы передаем ссылки на переменные методу. Все операции на самом деле будут использовать и/или изменять исходные объекты.

Пример:

Напишите следующий код в файле /home/labex/project/objectTest.java:

public class objectTest {
    public static void main(String[] args){
        // используем new для создания объекта массива с двумя элементами
        int[] numbers = new int[2];
        // присваиваем значения массиву объекта
        numbers[0] = 1;
        numbers[1] = 2;
        // создаем примитивные переменные таким образом
        int a = 1, b = 2;

        // создаем тестовый объект
        objectTest test = new objectTest();

        test.changeInt(a, b);
        System.out.println("Теперь a равно " + a + ", b равно " + b);

        test.changeArray(numbers);
        System.out.println("Теперь numbers содержит:");

        for(int i : numbers){
            System.out.print(i + "\t");
        }
    }
    // определяем метод объекта, изменяющий значение int
    public void changeInt(int a,int b){
        a = 2;
        b = 3;
        System.out.println("В методе changeInt, a равно " + a + ", b равно " + b);
    }
    // определяем метод объекта, изменяющий значение массива
    public void changeArray(int[] number){
        for(int i = 0;i < number.length;i++){
            number[i] = number[i]+1;    // изменяем значение элемента массива, увеличивая его на 1
        }
        System.out.println("В методе changeArray, numbers содержит:");
        for(int i : number){
            System.out.print(i + "\t");
        }
        System.out.println();
    }
}

Вывод:

Запустите файл objectTest.java с использованием следующей команды в терминале:

javac /home/labex/project/objectTest.java
java objectTest

Посмотрите на вывод:

В методе changeInt, a равно 2, b равно 3
Теперь a равно 1, b равно 2
В методе changeArray, numbers содержит:
2    3
Теперь numbers содержит:
2    3

Есть еще одно отличие между примитивными и объектами. Вы не можете добавлять новые примитивы в Java (если вы не попадете в комитет по стандартам), но вы можете создавать новые типы объектов! Мы увидим, как это сделать в следующей главе.

Резюме

Методы являются общим элементом классов. Метод - это блок кода, который выполняет некоторые специальные операции. Java предоставляет множество встроенных классов, которые мы можем использовать непосредственно. Существует два способа передачи параметров методам: по значению и по ссылке. Их эффекты разные. В следующем практическом занятии мы расскажем вам об этом. Надеемся, это будет полезно.