2015-02-26 5 views
0

Я искал какой статической переменной означает, я найти этот сайтЧто такое статическая переменная

http://java-questions.com/keywords-interview-questions.html

и его его заявление о статической переменной , когда я использую его примеру я найти другой результат

Статическое ключевое слово может использоваться с переменными и методами, но не с классом. Все, что объявлено как static, связано с классом, а не с объектами.

статические переменные: Множественные объекты класса акций и тот же экземпляр статического variable.Consider пример:

public class Counter{ 
private static int count=0; 
private int nonStaticcount=0; 
public void incrementCounter(){ 
    count++; 
    nonStaticcount++; 
} 
public int getCount(){ 
    return count; 
} 
public int getNonStaticcount(){ 
    return nonStaticcount; 
} 

public static void main(String args[]){ 

    Counter countObj1 = new Counter(); 
    Counter countObj2 = new Counter(); 
    countObj1.incrementCounter(); 
    countObj1.incrementCounter(); 
    System.out.println("Static count for Obj1: "+countObj1.getCount()); 
    System.out.println("NonStatic count for Obj1: "+countObj1.getNonStaticcount()); 
    System.out.println("Static count for Obj2: "+countObj2.getCount()) 
    System.out.println("NonStatic count for Obj2: "+countObj2.getNonStaticcount()) 
} 

Выхода

Static count for Obj1: 2 
NonStatic count for Obj1: 1 
Static count for Obj2: 2 
NonStatic count for Obj2 :1 

, когда я использую этот пример я получил

Static count for Obj1: 2 
    NonStatic count for Obj1: 2 // instead of 1 
    Static count for Obj2: 2 
    NonStatic count for Obj2 :0 // instead of 1 

Может ли кто-нибудь сказать мне то, что статические переменные средний и пример объявить, как я могу использовать его в моем методе

спасибо

+4

Read http://docs.oracle.com/javase/tutorial/java/ javaOO/classvars.html –

+3

Второй 'countObj1.incrementCounter();' должен быть 'countObj2.incrementCounter();' и вы получите результат в примере. – biziclop

ответ

3

Вы получаете неправильный результат, потому что вы приращение countObj1 дважды:

Counter countObj1 = new Counter(); 
Counter countObj2 = new Counter(); 
countObj1.incrementCounter(); 
countObj1.incrementCounter(); 
//  !!! 

Замените его:

Counter countObj1 = new Counter(); 
Counter countObj2 = new Counter(); 
countObj1.incrementCounter(); 
countObj2.incrementCounter(); 

Теперь у вас есть правильный результат:

Static count for Obj1: 2 //Counter.count 
NonStatic count for Obj1: 1 //obj1.nonStaticcount 
Static count for Obj2: 2 //Counter.count (the same as in the first line) 
NonStatic count for Obj2 :1 //obj2.nonStaticcount 
+0

да это совершенно верно, спасибо –

+1

@minafawzy Добро пожаловать;) –

1

вы вызываете incrementCounter() дважды на одном объекте:

countObj1.incrementCounter(); 
    countObj1.incrementCounter(); 

Вместо этого вы должны сделать:

countObj1.incrementCounter(); 
    countObj2.incrementCounter();