【问题标题】:non static variable referenced from static context从静态上下文引用的非静态变量
【发布时间】:2014-12-25 01:21:27
【问题描述】:

我尝试使用 netbeans IDE 在 java 中创建一个简单的类。每当我尝试执行此操作时,它都会发出这样的警告。“从静态上下文引用的非静态变量”。谁能告诉我它为什么会发生以及如何解决它。提前谢谢。

public class HW3Q4 {
class Payment{
    private double amount_payment;

    public void set_amount(double amount){
        amount_payment = amount;
    }

    public double get_amount(){
        return amount_payment;
    }
    public void paymentDetails(){
        System.out.println("The amount of the payment is: "+amount_payment);
    }
}
public static void main(String[] args) {
    // TODO code application logic here

    Payment p1 = new Payment();
    p1.set_amount(34000.00);
    p1.get_amount();
    p1.paymentDetails();
}

}

【问题讨论】:

  • Payment p1 = new HW3Q4().new Payment(); As Payment 是内部类
  • 或者,看起来你想要static class Payment
  • class Payment 应声明为static
  • 或者更有可能的是,您不需要在这里创建Payment一个内部类。

标签: java class oop object static


【解决方案1】:

你在创建对象时犯了一个错误。所以这会对你有所帮助:

public class HW3Q4 {


    class Payment{
        private double amount_payment;

        public void set_amount(double amount){
            amount_payment = amount;
        }

        public double get_amount(){
            return amount_payment;
        }

        public void paymentDetails(){
                System.out.println("The amount of the payment is: "+amount_payment);
        }
    }


    public static void main(String[] args) {
    // TODO code application logic here

        HW3Q4 newInstance = new HW3Q4();
        newInstance.init();
    }


    public void init(){
        Payment p1 = new Payment();
        p1.set_amount(34000.00);
        p1.get_amount();
        p1.paymentDetails();
    }

}

【讨论】:

    【解决方案2】:

    你的支付类在 HW3Q4 中,它试图表现得类似于你的类 HW3Q4 中的一个字符串字段,比如私有字符串 myString。所以为了避免错误使用:

    HW3Q4 h = new HW3Q4 ();
    Payment p1 = h.new Payment();
    

    【讨论】:

    • 将内部类设为static 或将其设为顶级类会更直接。恕我直言,这种 java 语法是为了使语言“功能完整”,但绝不应该在现实世界的代码中使用,
    • 同意,但 PO 想知道为什么以及如何克服。所以是的,这可能是其中一种可能性。
    【解决方案3】:

    您正在为HW3Q4 的每个实例声明一个单独的Payment 类。相反,我认为您想在自己的文件 (Payment.java) 中声明 Payment,这是首选,但我想您可以将其声明为 static 内部类 - 只需将 class Payment { /* ... */ } 更改为 static class Payment { /* ... */ } .

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-17
      • 2011-11-30
      • 1970-01-01
      相关资源
      最近更新 更多