所以我对静态和非静态调用的理解:
如果正在调用方法,传递值和返回值而不创建Class的新对象,请使用static。
如果要在创建类的新对象后调用方法,传递值和返回值,请不要使用static。
我创建了两个代码段。其中一个已注释掉,但是您会在AreaCalculator类中看到,静态引用与在主文件中调用的注释掉的方法一致。
我的问题是,在什么情况下调用静态或非静态会有所帮助?如果我创建了一堆非静态类型和基元,那么我将能够在新对象下使用它们,而不会影响类中那些初始化的原始值,对吗?
相反,如果它们是静态变量,则在执行设置工作时处理数据时会在类中修改值(因为不存在对象)?
下面的代码:
import java.util.Scanner;
公共类Main {
public static void main(String[] args) {
//-----------------------------------------
//Runs a For loop to get input, store in array, display results
//ForLoopInputArray.looping();
//-----------------------------------------
//-----------------------------------------
//Learning to return values when passing parameters
// Area/Perimeter Calculator Methods
Scanner apinput = new Scanner (System.in);
AreaCalculator areatest = new AreaCalculator();
//Using a static method
//System.out.println("Enter a number to calculate the area: ");
//System.out.println(AreaCalculator.area(apinput.nextDouble()));
//System.out.println("Enter a number to calculate the Perimeter: ");
//System.out.println(AreaCalculator.perimeter(apinput.nextDouble()));
//using an object to perform the same task
System.out.println("Enter a number to calculate the area: ");
System.out.println(areatest.area(apinput.nextDouble()));
System.out.println("Enter a number to calculate the Perimeter: ");
System.out.println(areatest.perimeter(apinput.nextDouble()));
//-----------------------------------------
}
}
公共类AreaCalculator {
/*static*/ double area (double areainput) {
return Math.PI * (Math.pow(areainput, 2));
}
/*static*/ double perimeter (double perimeterinput) {
return Math.PI * (perimeterinput * 2);
}
}
非静态方法是您在实例上调用的方法,例如,当您创建新的AreaCalculator()时。静态方法是可以调用的方法,而无需引用AreaCalculator()。