所以我如何理解静态和非静态调用:
如果要调用方法,传递值和返回值而不创建Class的新对象,请使用static。
如果要在创建类的新对象后调用方法,传递值和返回值,请不要使用static。
我创建了两个代码段。其中一个已被注释掉,但是您会在AreaCalculator类中看到,静态引用与在主文件中调用的被注释掉的方法一致。
在此情况下,我的问题是在什么情况下调用静态或非静态会有所帮助?如果我创建了一堆非静态类型和基元,那么我将能够在新对象下使用它们,而不会影响类中这些初始化的原始值,对吗?
相反的是,如果它们是静态变量,则在执行设置工作时处理数据时会在类中修改值(因为不存在对象)?
下面的代码:
import java.util.Scanner;
公共类主要{
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);
}
}
答案 0 :(得分:1)
非静态方法是您在实例上调用的方法,例如,当您创建新的AreaCalculator()
时。静态方法是可以在没有任何AreaCalculator()
引用的情况下调用的方法。
这可以为您提供更多帮助:What is the difference between a static method and a non-static method?