Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
面向对象java示例考试 公共类鸟类 { 私有静态int id=0; 私有字符串类; 公共鸟类(需要字符串的种类) { id=id+1; 种类=所需种类; } 公共字符串toString() { 返回“种类:”+Kind+”,Id:“+Id+”;”; } 公共静态void main(字符串[]args) { 鸟[]鸟=新鸟[2]; 鸟类[0]=新鸟类(“猎鹰”); 鸟[1]=新鸟(“鹰”); 对于(int i=0;i_Java_Oop - Fatal编程技术网

面向对象java示例考试 公共类鸟类 { 私有静态int id=0; 私有字符串类; 公共鸟类(需要字符串的种类) { id=id+1; 种类=所需种类; } 公共字符串toString() { 返回“种类:”+Kind+”,Id:“+Id+”;”; } 公共静态void main(字符串[]args) { 鸟[]鸟=新鸟[2]; 鸟类[0]=新鸟类(“猎鹰”); 鸟[1]=新鸟(“鹰”); 对于(int i=0;i

面向对象java示例考试 公共类鸟类 { 私有静态int id=0; 私有字符串类; 公共鸟类(需要字符串的种类) { id=id+1; 种类=所需种类; } 公共字符串toString() { 返回“种类:”+Kind+”,Id:“+Id+”;”; } 公共静态void main(字符串[]args) { 鸟[]鸟=新鸟[2]; 鸟类[0]=新鸟类(“猎鹰”); 鸟[1]=新鸟(“鹰”); 对于(int i=0;i,java,oop,Java,Oop,这是一个来自样本考试的问题,询问输出,并给出正确答案 种类:猎鹰,身份证号:2;种类:鹰,身份证号:2 我不明白为什么id是2,这两个实例都是一样的。您能解释一下吗?因为id字段是静态的,所以它在Bird的所有实例中(和外部)都具有相同的值 创建两个Bird对象后,构造函数将被调用两次,因此id将是2 请参阅:因为这里私有静态int id=0id已声明。静态变量是类变量,它们不是每次创建对象时都初始化或创建的 因此,静态变量只存在一个副本。否,使用new操作符创建对象时会创建新副本。因为id是静

这是一个来自样本考试的问题,询问输出,并给出正确答案 种类:猎鹰,身份证号:2;种类:鹰,身份证号:2


我不明白为什么id是2,这两个实例都是一样的。您能解释一下吗?

因为
id
字段是静态的,所以它在
Bird
的所有实例中(和外部)都具有相同的值

创建两个
Bird
对象后,构造函数将被调用两次,因此
id
将是
2


请参阅:

因为这里
私有静态int id=0id已声明。静态变量是类变量,它们不是每次创建对象时都初始化或创建的


因此,静态变量只存在一个副本。否,使用
new
操作符创建对象时会创建新副本。

因为
id
静态的。这意味着这是一个“类变量/字段”,每个类只有一个。该类的所有实例都共享相同的
id
(实际上,称它为“id”感觉有点奇怪)


请参见

与实例变量不同,静态变量在对象之间共享。所以当这个执行的时候

public class Bird
{
  private static int id = 0;
  private String kind;

  public Bird(String requiredKind)
  {
    id = id + 1;
    kind = requiredKind;
  }

  public String toString()
  {
    return "Kind: " + kind + ", Id: " + id + "; ";
  }

  public static void main(String [] args)
  {
    Bird [] birds = new Bird[2];
    birds[0] = new Bird("falcon");
    birds[1] = new Bird("eagle");
    for (int i = 0; i < 2; i++)
    System.out.print(birds[i]);
    System.out.println();
  }
}
id
增量为1。之后,执行下面的命令,将其递增为2

birds[0] = new Bird("falcon");

除了静态变量“for”外,仅循环put

birds[1] = new Bird("eagle");
不是


因此,在执行'for'循环结束之前,它只打印一行,因为'for'循环没有{}括号,它只循环一行

,因为我们最后调用了
toString
。当
toString
获取
id
的值时,返回其始终为2。 最好一个接一个地打印参考资料

System.out.print(birds[i]);
System.out.println(birds[i]);