Java SE面向对象编程的3个常用接口分别是什么
发表于:2024-10-09 作者:千家信息网编辑
千家信息网最后更新 2024年10月09日,这篇文章主要为大家分析了 Java SE面向对象编程的3个常用接口分别是什么的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入
千家信息网最后更新 2024年10月09日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安全错误
数据库的锁怎样保障安全
台州财务软件开发哪家强
时空猎人服务器爆满是什么原因
幸福工厂专属服务器是什么意思
金仓数据库 获取当前日期
宝泉软件开发
标准服务器电源大小
sql2008编辑数据库
上海寰创网络技术有限公司
炫拓网络技术服务部
sql数据库转换中文
湖北服务器硬盘质量怎么样
广西互联网手优科技
dw2017连接数据库
北京共享互联网科技有限公司
贵州众卡网络技术有限公司
软件开发公司各岗位职责
数据库备份用什么技术实现
软件开发工作表现自评
数据库基础知识复习doc下载
高级数据库技术及应用pdf
网络安全图片简笔画手抄报素材
计算机网络安全插画接单
网络安全 马士兵
互联网安全服务保险科技
町一番软件开发公司电话
真石漆数据库
我的世界还有几个服务器
小赛季优胜服务器
自制家用服务器
新宁网络安全宣传周