Java SE面向对象编程的3个常用接口分别是什么
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章主要为大家分析了 Java SE面向对象编程的3个常用接口分别是什么的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入
千家信息网最后更新 2025年11月08日Java SE面向对象编程的3个常用接口分别是什么
这篇文章主要为大家分析了 Java SE面向对象编程的3个常用接口分别是什么的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习" Java SE面向对象编程的3个常用接口分别是什么"的知识吧。
1.Comparable
前言,想要排序Student.有代码:
import java.util.Arrays; class Student { public int age; public String name; public double score; public Student(int age, String name, double score) { this.age = age; this.name = name; this.score = score; } @Override public String toString() { return "Student{" + "age=" + age + ", name='" + name + '\'' + ", score=" + score + '}'; }} public class TestDemo { public static void main(String[] args) { Student[] students = new Student[3]; students[0] = new Student(12,"niubi",99.9); students[1] = new Student(20,"liuren",18.9); students[2] = new Student(80,"laoren",50.9); System.out.println(Arrays.toString(students)); Arrays.sort(students); System.out.println(Arrays.toString(students)); }}此代码运行报错:
原因: 没有告诉要如何进行排序,是年龄还是姓名还是分数.没有告诉比较的规则
解决方式:
如果自定义的数据类型 进行大小比较 一定要实现可以比较的接口
import java.util.Arrays; class Student implements Comparable{ public int age; public String name; public double score; public Student(int age, String name, double score) { this.age = age; this.name = name; this.score = score; } @Override public String toString() { return "Student{" + "age=" + age + ", name='" + name + '\'' + ", score=" + score + '}'; } //谁调用这个方法 谁就是this @Override public int compareTo(Student o) { //return this.age - o.age;//从小到大 return o.age - this.age;//从大到小 } } public class TestDemo { public static void main(String[] args) { Student[] students = new Student[3]; students[0] = new Student(12,"niubi",99.9); students[1] = new Student(6,"liuren",18.9); students[2] = new Student(80,"laoren",50.9); System.out.println("比较前 "+Arrays.toString(students)); Arrays.sort(students);//默认从小到大排序 System.out.println("比较后 "+Arrays.toString(students)); }}
如果要 分数比较 和 姓名比较
//谁调用这个方法 谁就是this @Override public int compareTo(Student o) { //return this.age - o.age;//从小到大 //return o.age - this.age;//从大到小 return (int) (this.score - o.score);//分数排序 return this.name.compareTo(o.name);//姓名排序 }缺点: 这个接口对类的侵入性非常强.一旦写好了,不敢轻易改动.
如何降低对类的侵入性呢?
使用Comparator
2.Comparator 比较器
import java.util.Arrays;import java.util.Comparator; class Student1 { public int age; public String name; public double score; public Student1(int age, String name, double score) { this.age = age; this.name = name; this.score = score; } @Override public String toString() { return "Student{" + "age=" + age + ", name='" + name + '\'' + ", score=" + score + '}'; }} class AgeComparator implements Comparator{ @Override public int compare(Student1 o1, Student1 o2) { return o1.age - o2.age; }} class ScoreComparator implements Comparator{ @Override public int compare(Student1 o1, Student1 o2) { return (int) (o1.score - o2.score); }} class NameComparator implements Comparator{ @Override public int compare(Student1 o1, Student1 o2) { return o1.name.compareTo(o2.name); }} public class TestDemo1 { public static void main(String[] args) { Student1[] students1 = new Student1[3]; students1[0] = new Student1(12,"niubi",99.9); students1[1] = new Student1(6,"liuren",18.9); students1[2] = new Student1(80,"laoren",50.9); System.out.println("比较前 "+Arrays.toString(students1)); AgeComparator ageComparator = new AgeComparator(); Arrays.sort(students1,ageComparator); System.out.println("比较后(按年龄) "+Arrays.toString(students1)); ScoreComparator scoreComparator = new ScoreComparator(); Arrays.sort(students1,scoreComparator); System.out.println("比较后(按姓名) "+Arrays.toString(students1)); NameComparator nameComparator = new NameComparator(); Arrays.sort(students1,nameComparator); System.out.println("比较后(按分数) "+Arrays.toString(students1)); }} 运行结果:
优点:对类的侵入性非常弱.
3.Cloneable
面试问题:
你知道Cloneable接口吗?为啥这个接口是一个空接口?有啥作用?
空接口 -> 标志接口 -> 代表当前这个类是可以被克隆的.
class Person implements Cloneable{ public int age ; public void eat(){ System.out.println("吃!"); } @Override public String toString() { return "Person{" + "age=" + age + '}'; } @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); }}public class TestDemo2 { public static void main(String[] args) throws CloneNotSupportedException { Person person = new Person(); person.age = 99; Person person2 = (Person) person.clone(); System.out.println(person.age); System.out.println(person2.age); System.out.println("=========="); person2.age = 199; System.out.println(person.age); System.out.println(person2.age); }}运行结果:
注意事项:
1.引用的对象要想被克隆,必须实现Cloneable接口.
2.必须重写克隆方法,并且声明异常.
关于" Java SE面向对象编程的3个常用接口分别是什么"就介绍到这了,更多相关内容可以搜索以前的文章,希望能够帮助大家答疑解惑,请多多支持网站!
接口
排序
对象
分数
姓名
常用
编程
从小到大
从小
方法
运行
代码
内容
就是
年龄
知识
结果
跟着
还是
事项
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
安徽通用软件开发厂家价格
打造文件管理服务器
北大国家网络安全学院
网络安全技术 教材
三管三监测防控网络安全风险
互联网科技赋能新零售
网络技术可以学什么专业
云服务器30m带宽
手机打电话掉线无法连接到服务器
我的世界服务器后台怎么开创造
敢达争锋对决服务器区别
sql数据库 复制
数据库测试性格穿搭
服务器名称是什么
服务器已断开连接但没发送数据
中国的数据库有哪些
鸡西市网络安全
主播都在哪个服务器玩逃离塔科夫
怎么看出数据库的外键
西电网络安全教授
anki中如何修复数据库
edius老显示无法连接到服务器
数据库技术相关上市公司
服务器电源怎样手启动
采用综合网络技术设置
南昌安卓系统软件开发公司
政府部门的网络安全工作计划
如何在磁盘阵列上安装数据库
服务器升级后没桌面
河北通用软件开发价目表