需求,打印输出员工的姓名,工号。并且对四名员工根据年龄进行排序。
(1) 创建类
package com_tz_qzy;
import java.util.Stack;
public class Staff implements Comparable {
// 属性
String name;
int age;
// 构造方法
Staff(String name,int age){
super();
this.name=name;
this.age=age;
}
// toString方法的重写
public String toString() {
return "Staff [ name="+name+",age="+age+"]";
}
// 通过compareTo实现数组的排序
public int compareTo(Object o) {
// 传递对象Object的参数
// instance的作用是判断其左边对象是属于其右边类的一个例,返回值boolean类型。
// staff是一个类,object是传进来的一个对象。格式: 对象 instanceof 类
if(o instanceof Staff) {
// o是一个object类型的对象,此时Object并没有age这个属性,因此要向下转型为Staff类型的
Staff s=(Staff)o;
// 对传进来的参数进行判断
return this.age-s.age;
// 传进来sta1("小王",35),分别与Staff中小王,小张,小红,小李均做比较,
// 差值越大,数值越大,因此在通过Sort对年龄做一个排序,在打印即可。
}
return 0;
}
}
(2)实例化对象
package com_tz_qzy;
import java.util.Arrays;
public class StaffDemo {
public static void main(String [] args) {
// 实例化对象
Staff sta1=new Staff("小王",35);
Staff sta2=new Staff("小张",23);
Staff sta3=new Staff("小红",66);
Staff sta4=new Staff("小李",8);
// 将对象存放在一个(静态初始化)数组内
// 声明形式:数据类型 [] 数组名=new 数据类型[长度];
// 对象的数组类型是Staff
Staff [] sta=new Staff[4];
sta[0]=sta1;
sta[1]=sta2;
sta[2]=sta3;
sta[3]=sta4;
// Arrays.toString(Object o)返回指定数组内容的字符串表示形式
System.out.println(Arrays.toString(sta));
// Arrays.sort(Object o)根据元素的自然顺序对指定对象数组按升序进行排序
System.out.println("--------------------------------------------");
Arrays.sort(sta); // 对数组进行排序,需要实现Comparable接口
System.out.println(Arrays.toString(sta));
}
}
(3)结果
(4)分析:
对象的比较是通过ASCII码进行比较,是与基本数据类型的比较是不相同的。对对象的比较要通过对Comparable接口的实现,通过对compareTo方法进行重写。
instanceof的作用是判断左边是否为右边一个类的实例,左边是对象,即向compareTo传进的参数是否是本类的一个实例化对象,是返回true,不是就返回false。