java两个问题,求解。求解。求解

1.Java中for-each循环为何能放入对象Computer com,不都是放 数据类型 变量(int x) 的吗?
2.打印结果不应该是(一句我打印了,一句cpu吗)呈现四对,8行。为何是我打印了,4行,然后才是CPU4行?求解

package com.newknowledge.object;

public class Computer {
    //成员变量
    private String cpu = "Intel";//处理器
    private String memory;//内存
    private String keyBoard;//键盘
    private String mainBoard;//主板

    //构造方法
    public Computer(){
        System.out.println("------Computer()-----");
        cpu = "AMD";
    }

  public Computer(String cpu,String memory,String keyBoard,String mainBoard){
        System.out.println("我打印了");
        this.cpu = cpu;
        this.mainBoard = mainBoard;
        this.keyBoard = keyBoard;
        this.memory = memory;
    }
    public void show(){
        System.out.println("cpu="+cpu+",memory="+memory+
                ",mainBoard="+mainBoard+",keyBoard"+keyBoard);
    }

    public static void main(String[] args) {
    }
}

package com.newknowledge.object;

import java.util.Arrays;

public class TestArray {
    public static void main(String[] args){
        Computer[] arr = new Computer[4];
        arr[0] = new Computer("AM","2G","达尔优","七彩虹");
        arr[1] = new Computer("AM","2G","达尔优","七彩虹");
        arr[2] = new Computer("AM","2G","达尔优","七彩虹");
        arr[3] = new Computer("AM","2G","达尔优","七彩虹");
       
        for(Computer com:arr){
            com.show();
        }
    }
}


img

1.for-each帮JAVA用户直接忽略下标的声明,用户可以直接遍历数组或者列表中的对象,也就是Computer,不需要考虑下标去声明int i
2.“我打印了”是在构造函数中,每次创建对象也就是new的时候就会打印。先创建了四个对象所以会先打印四次“我打印了”,然后在foreach中每个对象访问自己的show方法,打印四次cpu

首先,怎么可能会这么大方专门为int搞一个循环。所有实现了java.lang.Iterable接口的对象都可以使用 for 语句进行迭代。
for-each的语句格式:for(元素类型type 元素变量value :遍历对象obj){执行内容}

然后,”我打印了“这句话是定义在构造方法里的,也就是你在构造它的时候就会输出,你是先构造了四个Computer在对所有Computer执行show方法

第二个问题,先打印出来“我打印了”,是在你 new Computer 对象的时候就已经打印了,而不是调用 show 方法时打印的

1、你可以把"System.out.println("我打印了");"这行代码改成"System.out.print("我打印了");"
2、然后把show()放入Computer()中
3、最后把主方法中的com.show()去掉就没问题了