2014-10-29 5 views
-1

Я пробовал сделать простой класс в java, используя netbeans IDE. Всякий раз, когда я пытаюсь выполнить это, он дает такое предупреждение. «Нестатическая переменная, на которую ссылается статический контекст». Кто-нибудь скажет мне, почему это происходит и как его решить. 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

'Payment p1 = new HW3Q4(). New Payment();' As Payment is internal class –

+1

Или, похоже, вы хотите 'static class Payment'. – bcsb1001

+1

'class Payment' должен быть объявлен' static'. –

ответ

0

Ваш платеж класс в HW3Q4, которые пытаются действовать аналогично сказать строковое поле в пределах вашего класса HW3Q4 как частный Струнный MyString. Поэтому, чтобы избежать использования ошибки:

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

Было бы гораздо проще сделать внутренний класс 'static' или сделать его классом верхнего уровня. Этот синтаксис Java - это ИМХО, чтобы сделать язык «завершенным», но он никогда не должен использоваться в коде реального мира, –

+0

Согласен, но ПО хотел узнать, почему и как его преодолеть. Так что да, это может быть одной из возможностей. – SMA

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 в своем собственном файле (Payment.java), что было бы предпочтительнее, но я думаю, вы могли бы объявить его внутренним классом static - просто измените class Payment { /* ... */ } на static class Payment { /* ... */ }.

Смежные вопросы