没明白 ExerTest1 test = new ExerTest1();这么操作的含义是什么,我上面stus new对象为什么也在main方法中new,脑海中很混乱,


public class ExerTest1 {
      public static void main(String[] args) {
          //声明student类型的数组
          Student1[] stus = new Student1[20];
          for(int i = 0;i < stus.length;i++) {
              //给数组元素赋值
              stus[i] = new Student1();
              //给Student对象的属性赋值
              stus[i].number = (i + 1);
              //年级[1-6];
              stus[i].state = (int)(Math.random()*(6-1+1)+1);
              //成绩[0-100];
              stus[i].score = (int)(Math.random()*(100-0+1));
          }
          ExerTest1 test = new ExerTest1();
          //遍历学生数组
           test.print(stus);
          System.out.println("*******************");
          //问题一:打印三年级(state值为3)的学生信息。
           test.searchState(stus, 3);
          System.out.println("*********************");
          //问题二:使用冒泡排序按学生成绩排序,并遍历所有学生信息
           test.sort(stus);
          //遍历学生数组
           test.print(stus);
      }
      /**
       * 
       * @Description 遍历Student1[]数组的操作
       * @author xiong
       * @date 2022年3月25日上午11:18:22
       * @param stus
       */
      public void print(Student1[] stus) {
          for(int i = 0;i < stus.length;i++) {
               System.out.println(stus[i].info());
          }
      }
      /**
       * 
       * @Description   查找Student数组中指定年级的学生信息
       * @author xiong
       * @date 2022年3月25日上午11:12:13
       * @param stus   要查找的数组
       * @param state  要查找的年级
       */
      public void searchState(Student1[] stus,int state) {
          for(int i = 0;i < stus.length;i++) {
              if(stus[i].state == state) {
                  System.out.println(stus[i].info());
              } 
          }
      }
      /**
       * 
       * @Description 给Student1数组排序
       * @author xiong
       * @date 2022年3月25日上午11:15:14
       * @param stus
       */
      public void sort(Student1[] stus) {
          for(int i = 0;i < stus.length - 1;i++) {
              for(int j = 0;j < stus.length - 1 - i;j++) {
                  if(stus[j].score > stus[j + 1].score) {
                      Student1 temp = stus[j];
                      stus[j] = stus[j + 1];
                      stus[j + 1] = temp;
                  }
              }
          }
          
      }
}
class Student1{
    int number;
    int state;
    int score;
    //显示学生信息的方法
    public String info

意思是创建一个 ExerTest1类的对象test
new用来实例化对象,创建内存,放在主函数里

ExerTest1 test = new ExerTest1();的意思是创建一个ExerTest1类的实例,并把这个实例命名为test
new的时候分配内存空间,属于代码块,代码块要放在函数里面

因为你需要调用ExerTest1类中的方法,所以需要创建实例对象,否则在main方法中直接调用不了。因为其他方法不是静态方法。,如果你把print()等方法修改为静态方法,那么就可以直接调用,而不需要创建对象,通过对象来调用了。

ExerTest1 test = new ExerTest1();
          //遍历学生数组
           test.print(stus);
          System.out.println("*******************");
          //问题一:打印三年级(state值为3)的学生信息。
           test.searchState(stus, 3);
          System.out.println("*********************");
          //问题二:使用冒泡排序按学生成绩排序,并遍历所有学生信息
           test.sort(stus);
          //遍历学生数组
           test.print(stus);

为什么要创建对象,你可以看看用到对象的地方,如果不用对象是否可以,应该怎么做。
不用对象,修改如下:

          //遍历学生数组
           print(stus);
          System.out.println("*******************");
          //问题一:打印三年级(state值为3)的学生信息。
           searchState(stus, 3);
          System.out.println("*********************");
          //问题二:使用冒泡排序按学生成绩排序,并遍历所有学生信息
           sort(stus);
          //遍历学生数组
           print(stus);

同时在searchState()、sort()、print()方法前面加上static将普通方法变为静态方法。

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632