我有2个静态和非静态调用的示例。我对手术的理解正确吗?

时间:2020-05-21 15:37:26

标签: java parameters return-value static-methods non-static

所以我如何理解静态和非静态调用:

如果要调用方法,传递值和返回值而不创建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);
} 

}

1 个答案:

答案 0 :(得分:1)

非静态方法是您在实例上调用的方法,例如,当您创建新的AreaCalculator()时。静态方法是可以在没有任何AreaCalculator()引用的情况下调用的方法。 这可以为您提供更多帮助:What is the difference between a static method and a non-static method?