Java类名作为变量

Java类名作为变量,java,pointers,Java,Pointers,有人能解释注释代码之间的差异吗 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

有人能解释注释代码之间的差异吗

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));
}

}
Vs

它们都做同样的工作,那么为什么一个会比另一个更重要呢

Number n = new Number();
在类
custom_class
中创建可由该类中的其他方法访问的静态变量。您目前没有任何其他方法,因此与您无关。什么时候使用?也许您有一个变量
mySpecialNumber
,您将在整个课程中使用它。您可以使用不同的方法。一种方法可以将参数与之相乘。另一种方法可以向其添加参数。这将是一个全局变量,可以在整个类中访问

因为它是静态的,所以不需要实例化类就可以使用它。这是一个独立的变量。您不需要创建类的对象就可以使用它。在本例中,您可以使用
n
,而无需创建
Number
类的实例。这可能会提供更多的灵活性。但是,它的安全性较低,可能导致数据泄露

static Number n;
在运行时创建
Number
对象的实例变量。它只能在
main
方法中访问。如果该类中有其他方法,则其他方法将无法访问
n
的值。一旦在方法中声明了变量,它就具有该变量的局部作用域。只有同一方法中的代码行可以引用它。您的main方法可以根据用户的年龄作为用户,并将其存储在main方法中的局部变量中


使用此方法,您将实例化Number类。此行自动调用Number类的构造函数并创建一个Number类型的对象,该对象被分配给
n
。在代码中,您没有指定构造函数,因此将使用默认构造函数。对
n
所做的任何更改只会影响当前运行时。它们不会传输到程序的未来运行。对象是在主方法中创建的,因此只能在主方法中访问

他们做的事情不一样

静态数n声明一个静态变量,但从不实例化它
n
null


Number n=新编号()
声明一个局部变量
n
并给它一个实际值。

它们的作用不同!再看看。(java和C++不同,如果你习惯了那种语言)(我再看一遍我自己,我发现这个例子是在拉你的一个“欺骗”。试图找到这个骗局。)你的标题与你的问题无关。他们似乎做的是相同的工作,因为你在调用静态方法,而不是实例方法。对变量调用静态方法是可行的,但有点反模式。更好的形式是使用
Number.numberMult(10,10)
。如果这些都是实例方法,一个会工作,另一个会抛出一个
NullPointerException
。那么这有什么关系?如果是,请用实际情况详细说明。@MustafaHKOf当然,变量是否有值或为null很重要。你对“真实案例场景”的要求是不合理的。你能给出什么时候选择什么的理由吗。@MustafaHK
什么时候选择什么
这里还有第二个技巧。你需要自己仔细考虑,我猜这就是你作业的重点。
static Number n;
Number n = new Number();