【问题标题】:What is a static variable [duplicate]什么是静态变量[重复]
【发布时间】:2015-02-26 14:13:05
【问题描述】:

我正在寻找静态变量的含义 我找到了这个网站

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

及其关于静态变量的声明 当我使用他的例子时,我发现了不同的结果

静态关键字可以与变量和方法一起使用,但不能与类一起使用。任何声明为静态的东西都与类相关,而不是对象。

静态变量:一个类的多个对象共享一个静态变量的同一个实例。考虑这个例子:

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

谁能告诉我静态变量的含义和示例声明如何在我的方法中使用它

谢谢你

【问题讨论】:

标签: java static


【解决方案1】:

您得到了错误的结果,因为您将 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

【讨论】:

  • 是的,这完全正确,谢谢
  • @minafawzy 不客气 ;)
【解决方案2】:

你在同一个对象上调用了两次incrementCounter()

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

你应该这样做:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 2013-01-14
    相关资源
    最近更新 更多