与此代码中的计数使用情况混淆。

时间:2017-05-17 02:49:17

标签: java variables count

我知道这部分代码的工作原理有问题。

这是:

public class fia1 {
  public static void main(String [] args) {
   Band b0 = new Band();
   b0.name = "Beastie";
   b0.age = 25;
   Band b1 = new Band();
   b1.name = "Orchestra";
   b1.age = 100;
   System.out.println(b0.count);

   Band b2 = new Band();
   b2.name = "Polka";
   b2.age = 5;

   System.out.println("Names: " + b0.name + " " + b1.name + "
   " + b2.name);
   System.out.println(Band.count);
   b1 = b2;
   b1.age = 10;
   b0.age = b2.age + b0.age;

   System.out.println("Ages = " + b0.age + " " + b1.age + " "
   + b2.age);
    }
      }

  class Band {
   String name;
   int age;
   static int count = 1;
   Band() {
   count = count * 2;
   }
     }

那么这个印刷品是什么:

4
Names: Beastie, Orchestra, Polka
8
Ages: 35, 10, 10

我很困惑如何从第一次计算得到4。我也知道

 static int count = 1;

是我误解的地方。这是java如何计算变量? 1,然后2是Beastie,3是Orchestra,4是Polka?我真的不知道这是怎么回事。谢谢你的帮助!

3 个答案:

答案 0 :(得分:2)

您在b0中使用static变量,这意味着每次创建新static int count = 1;时,所有Band变量都会加倍(因为{{1} }})

请参阅下面的代码,其中包含解释会发生什么的评论:

Bands

答案 1 :(得分:1)

Band类中的count字段是静态字段或类变量,这意味着html = requests.get(url).text 类的所有对象都共享它。每次调用构造函数时,都会更新for(i in files) { x <- read.delim(i, header = F, sep = "\t", na = "*") setnames(x, 2, i) assign(i,x) } 。如果您想了解有关类变量的更多信息,可以查看此Java documentation

答案 2 :(得分:0)

由于变量count是静态的,因为它被声明为static int count = 1;,因此类的每个新构造都会对count对所有有计数的对象执行任何操作。换句话说,当您调用b1时,count = count * 2;命令会影响所有计数实例,因此b0中的计数变量也会加倍。

因此,当您首次使用band()构建b0时,需要count并将其设置为等于1 * 2 = 2. band()的第二个实例{ {1}}导致所有count计数实例等于* 2.所以,b1中的计数等于1 * 2 = 2,b1中的计数等于2 * 2 = 4.