2014-10-29 61 views
-1

我尝试在使用NetBeans IDE的java中制作一个简单的类。每当我尝试执行它时,它都会给出这样的警告:“从静态上下文引用的非静态变量”。任何人都可以告诉我为什么会发生,以及如何解决它。提前Thanx。从静态上下文引用的非静态变量

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(); 
} 

} 
+2

'付款p1 =新HW3Q4()。新付款();'由于付款是内部类 – 2014-10-29 11:05:27

+1

或者,它看起来像你想'静态类付款'。 – bcsb1001 2014-10-29 11:06:28

+1

'class Payment'应声明为'static'。 – 2014-10-29 11:07:04

回答

0

您的付款类是尝试行为类似于说你的类HW3Q4像私有String在MyString中的字符串场HW3Q4内。所以为了避免错误使用:

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

使内部类“静态”或使其成为顶级类会更直接。这种Java语法是恕我直言,使语言“功能完整”,但不应该用于现实世界的代码, – 2014-10-29 11:07:31

+0

同意但PO想知道为什么和如何克服。所以是的,这可能是其中一种可能性。 – SMA 2014-10-29 11:08:51

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(); 
    } 

} 
0

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

相关问题