Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我需要实例化我的类来调用静态方法中的方法?_Java_Methods_Instantiation - Fatal编程技术网

Java 为什么我需要实例化我的类来调用静态方法中的方法?

Java 为什么我需要实例化我的类来调用静态方法中的方法?,java,methods,instantiation,Java,Methods,Instantiation,我开始学习Java,并有了一个明确的问题。我的类块中有一组实例,其中包含2个方法、1个主静态方法和1个void方法 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;

我开始学习Java,并有了一个明确的问题。我的类块中有一组实例,其中包含2个方法、1个主静态方法和1个void方法

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类来调用printCurrencys()?你不能正常地调用方法吗?我在同一个班级吗

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


为什么需要实例化?

将类视为对象的模式或配方。实例化时,使用此特定模式创建对象。现在,您可以访问一个具有值的对象。模式(因此类)只有可以保存特定值的字段的描述。因此,您无法访问任何值

现在是静力学: 静态字段是在运行时开始时创建的字段。因此,您可以随时访问该值,而无需创建对象,因为它们不属于对象,而是属于特定的类

摆脱实例化的解决方案是使该类的所有成员都是静态的


(请记住:每个常量成员都是静态的)

非静态字段与实例关联。每个实例都有这些字段的一个副本

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;
除非你喜欢混乱,否则不要这样做。您应该在名称中明确每个字段的不同用途

我尝试将printCurrences()的访问修饰符更改为static,但是我的局部变量不是静态的。为什么我需要实例化


非静态字段的副本在您显式创建它们之前不存在。

printCurrencies
是一个实例方法-它作用于类的实例,因此您需要先创建一个实例。请注意,
static
不像public/private那样是一个访问修饰符-它是一个修饰符,表示方法/字段/etc是与类型的实例相关还是与类型本身相关。还要注意的是,
rupe
等变量是字段,而不是局部变量。代码中唯一的局部变量是
cc
。我建议在一本好的Java书籍或教程中阅读更多关于
static
的内容。我建议你在问这些问题之前先学习oops的概念。我相信下次你不会再问了。这会发生在每个人身上,伙计……别担心