为什么我需要实例化我的类才能在静态方法中调用我的方法?

我开始学习 Java 并有一个菜鸟问题。我的类块中有一组实例,有 2 个方法,1 个主要静态方法和 1 个无效方法


public class CurrencyConverter {

    int rupee = 63;

    int dirham = 3;

    int real = 3;

    int chilean_peso = 595;

    int mexican_peso = 18;

    int _yen = 107;

    int $austrailian = 2;

    int dollar = 0;

    int Rupee = 63;


    /**

    * @param args the command line arguments

    */

    public static void main(String[] args) {

        // TODO code application logic here

        CurrencyConverter cc = new CurrencyConverter();

        cc.printCurrencies();

    }


    void printCurrencies() {

        System.out.println("rupee: " + rupee);

        System.out.println("dirham: " + dirham);

        System.out.println("real: " + real);

        System.out.println("chilean_peso: " + chilean_peso);

        System.out.println("mexican_peso: " + mexican_peso);

        System.out.println("yen: " + _yen);

        System.out.println("australian: " + $austrailian);

        System.out.println("dollar: " + dollar);

        System.out.println("Rupee: " + Rupee);                

    }       

}

现在我的问题是,为什么我需要实例化我的 CurrencyConverter 类才能调用 printCurrencies()?无论如何,您通常不能只调用方法吗?我在同一个班级?


我尝试将 printCurrencies() 的访问修饰符更改为静态,但是我的局部变量不是静态的


为什么我需要实例化?


慕容708150
浏览 211回答 2
2回答

交互式爱情

非静态字段与实例相关联。每个实例都有这些字段的一个副本。public class CurrencyConverter {    int rupee = 63; // non static instance field    int dirham = 3; // non static instance field    // etc.为什么我需要实例化我的 CurrencyConverter 类才能调用 printCurrencies()?没有实例,您的副本为零,因此没有可打印的内容。无论如何,您通常不能只调用方法吗?如果您将方法设为静态并删除对实例字段的所有引用,那么是的,您可以。这运行得很好,但它不再做任何有用的事情。public static void main(String[] args) {    printCurrencies();}static void printCurrencies() {}  我在同一个班级?不知道你的意思,但只有一个班级,一切都在里面。int rupee = 63;int Rupee = 63;除非你喜欢混乱,否则不要这样做。您应该在名称中明确每个字段的不同用途。我尝试将 printCurrencies() 的访问修饰符更改为静态,但是我的局部变量不是静态的。为什么我需要实例化?非静态字段的副本在您明确创建它们之前不存在。

SMILET

将类视为对象的模式或配方。实例化时,您将使用此特定模式创建一个对象。现在有一个带有您可以访问的值的对象。模式(因此类)只有可以保存特定值的字段的描述。因此,您无法访问任何值。现在是静态:静态字段是在运行时开始时创建的字段。因此,您可以随时访问该值而无需创建对象,因为它们不属于某个对象,而是属于特定的类。您摆脱实例化的解决方案是使该类的所有成员都是静态的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java