Java SE面向对象编程的3个常用接口分别是什么
发表于:2025-02-21 作者:千家信息网编辑
千家信息网最后更新 2025年02月21日,这篇文章主要为大家分析了 Java SE面向对象编程的3个常用接口分别是什么的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入
千家信息网最后更新 2025年02月21日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安全错误
数据库的锁怎样保障安全
成都理工大学数据库实验报告
数据库组合主键
网站服务器可以同时做公众号吗
数据库应用使用
腾讯云服务器怎么安装手机软件
网络安全影响的四个方面
松滋软件开发公司
我是做软件开发
扬州软件开发技术项目实训中心
软件开发公司要多少钱2千万
qt 无法打开程序数据库
将文件上传至服务器然后分享
java软件开发教程下载
中部战区陆军职i数据库信息
常州营销网络技术服务费
南京仁宝电脑 软件开发
管理平台module服务器
福田沙尾软件开发教学
网络技术三级考试真题答案
数据库备份路径如何修改
数据库字段提取
batmantcm数据库官网
地图 软件开发工具包
软件开发服务做什么科目
计算机网络安全和保密知识
梦幻网络安全海报
韩国网络安全系数
查看服务器上所有端口
接彩票软件开发
软件开发实验指导书