2014-12-05 4 views
2

Могу ли я умножить статический и неустановленным статические переменные, как это:Математические операции со статическими и не являющихся статическими переменными

public class C { 
    protected int c; 
    private static int s; 
    public int ma() { return this.c*this.s; } 
} 

Или:

public class B{ 
    protected int x; 
    private static int y; 
    public static int ms() { return x + y; } 
} 

Второй код не работает, и я интересно, потому что он ожидает статичность?

ответ

6

Второй блок кода не работает, поскольку ms - static. Вы не можете ссылаться на не static членов (x) из контекста static.

Вам необходимо либо выполнить команду ms a static, либо сделать x a static переменной.

Как это:

public class B{ 
    protected static int x; // now static 
    private static int y; 
    public static int ms() { return x + y; } 
} 

Или так:

public class B{ 
    protected int x; 
    private static int y; 
    public int ms() { return x + y; } // now non-static 
} 
1

Статическая переменная/функция одна, которая распределяется между приложением. В вашем втором примере

public class B{ 
    protected int x; 
    private static int y; 
    public static int ms() { return x + y; } 
} 

Ваш метод объявлен статическим и, следовательно, является статическим контекстом. Правило большого пальца. Вы не можете получить доступ к нестационарным вещам из статического контекста. Вот несколько причин, почему это так.

Скажем, у вас есть два объекта типа B где x=1 и где x=2. Поскольку y является статическим, он совместно используется обоими объектами. Пусть y=0.

Предположим, что из другого места в вашей программе вы вызываете B.ms(). Вы не имеете в виду какой-либо конкретный объект B. Поэтому JVM не может добавить x + y, потому что он не знает, какое значение x использовать. Имеют смысл?

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