Java Имя класса как переменная - PullRequest
0 голосов
/ 06 апреля 2020
package OOP_in_java;

public class Number {

public static int numberAdd(int number1, int number2) {
    return number1 + number2;
}

public static int numberMult(int number1, int number2) {
    return number1 * number2;
}

}
//Please uncomment anyone of commented code for the program to work.
class custom_class {
//static Number n;
public static void main(String[] args) {
    //Number n = new Number();
    System.out.println(n.numberMult(10, 10));
}

}

Может ли кто-нибудь объяснить разницу между закомментированным кодом?

static Number n;

против

Number n = new Number();

Они оба выполняют одну и ту же работу, так почему один будет использоваться выше других?

Ответы [ 2 ]

1 голос
/ 06 апреля 2020

Они не делают одно и то же.

static Number n; объявляет переменную stati c, но никогда не создает ее. n is null.

Number n = new Number(); объявляет локальную переменную n и дает ей фактическое значение.

1 голос
/ 06 апреля 2020
static Number n;

создает переменную stati c в классе custom_class, к которой могут обращаться другие методы этого класса. В настоящее время у вас нет других методов, так что это не относится к вам. Когда это будет использовано? Возможно, у вас есть переменная mySpecialNumber, которую вы будете использовать в классе. У вас могут быть разные методы, которые его используют. Один метод может умножить параметр с ним. Другой метод может добавить параметр к нему. Это будет глобальная переменная, доступная всему классу.

Так как это stati c, вам не нужно создавать экземпляр класса для его использования. Это переменная, которая стоит одна. Вам не нужно создавать объект класса, чтобы использовать его. В вашем случае вы можете использовать n без создания экземпляра класса Number. Это может обеспечить большую гибкость. Тем не менее, он менее безопасен и может вызвать утечку данных.

Number n = new Number();

создает переменную экземпляра объекта Number во время выполнения. Он доступен только в методе main. Если у вас есть другие методы в этом классе, другие методы не смогут получить доступ к значению n. Как только переменная объявлена ​​внутри метода, она имеет локальную область видимости этой переменной. Только строки кода в том же методе могут ссылаться на него. Ваш основной метод может как пользователь для своего возраста и сохранить его в локальной переменной в методе main.

Используя эту методологию, вы создаете экземпляр класса Number. Эта строка автоматически вызывает конструктор класса Number и создает объект типа Number, которому назначается n. В вашем коде вы не указали конструктор, поэтому будет использоваться конструктор по умолчанию. Любые изменения, сделанные в n, влияют только на текущее время выполнения. Они не передают в будущих прогонах программы. Объект создается в методе main и поэтому доступен только в методе main.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...