当前位置: 首页 > news >正文

Java知识点二

Java知识点二

  • 1、Comparable内部比较器,Comparator外部比较器
  • 2、源码结构的区别:
    • 1)Comparable接口:
    • 2)Comparator接口:
  • 2、Java反射

1、Comparable内部比较器,Comparator外部比较器

我们一般把Comparable叫做内部比较器,因为需要在定义类的时候就实现这个Comparable、并重写其唯一的方法compareTo(T o),在里边填充上元素比较的逻辑。
我们一般把Comparator叫做外部比较器,因为Comparator一般用于两个元素没有实现Comparable内部比较器的情况下,使用Comparator进行这两个元素的比较。

2、源码结构的区别:

1)Comparable接口:

2)Comparator接口:

在这里插入图片描述
除了compare方法和equals方法其他的都是jdk1.8添加的一些默认方法或者静态方法
在这里插入图片描述
使用场景:
comparable

comparator

使用Comparable必须要修改原有的类,也就是你要排序那个类,就要在那个中实现Comparable接口并重写compareTo方法,所以Comparable更像是“对内”进行排序的接口。 ​
而Comparator的使用则不相同,Comparator无需修改原有类。也就是在最极端情况下,即使Person类是第三方提供的,我们依然可以通过创建新的自定义比较器Comparator,来实现对第三方类Person的排序功能。也就是说通过Comparator接口可以实现和原有类的解耦,在不修改原有类的情况下实现排序功能,所以Comparator可以看作是“对外”提供排序的接口。

2、Java反射

Java反射机制:是指在运行时去获取一个类的变量和方法信息。然后通过获取到的信息来创建对象,调用方法的一种机制。由于这种动态性,可以极大的增强程序的灵活性,程序不用在编译期就完成确定,在运行期任然可以扩展。
在这里插入图片描述
通过反射去使用一个类,首先得获取该类的字节码文件对象,也就是类型为Class类型的对象。
三种方法:

Class<Student> c1 = Student.class;// 使用类的class属性获取Student s = new Student();
Class<? extends Student> c2 = s.getClass();// 调用对象的getClass()方法// 使用Class类的静态方法forName(String className)完整包名的路径;这种方式更加灵活可以放在配置文件中
Class<?> c3 = Class.forName("com.test.Student");

由该方法可以获取Student类的对象,Class<?> c3 = Class.forName("com.test.Student") 再用Student类对象获取 类构造方法的对象 Constructor<?> con = c3.getConstructor();
再用类构造方法的对象获取类的对象obj Object obj = con.newInstance();
最后小点:反射可以越过泛型检查,获取到原始方法所需要的类型。
nacos批按钮双击启动失败:
startup.cmd -m standalone

古之立大事者,不惟有超世之才,亦必有坚忍不拔之志。——苏轼《晁错论》

参考文章:
https://zhuanlan.zhihu.com/p/444452171

http://www.lryc.cn/news/164234.html

相关文章:

  • 基于单片机压力传感器MPX4115检测-报警系统-proteus仿真-源程序
  • Pytorch02 神经网路搭建步骤
  • 【源码】JavaWeb+Mysql招聘管理系统 课设
  • Java中级编程大师班<第一篇:初识数据结构与算法-数组(2)>
  • 杰哥教你面试之一百问系列:java集合
  • 【数据结构】树和二叉树概念
  • C盘清理教程
  • 【实战-05】 flinksql look up join
  • C++数据结构--红黑树
  • Linux perf使用思考
  • 自定义路由断言工厂
  • Nacos安装及在项目中的使用
  • overleaf中latex语法总结
  • Grafana配置邮件告警
  • setup中的nextTick函数
  • Matlab信号处理3:fft(快速傅里叶变换)标准使用方式
  • Python|合并两个字典的几种方法
  • ElementUI浅尝辄止24:Message 消息提示
  • 让照片动起来的软件,轻松制作照片动效
  • 【图解RabbitMQ-7】图解RabbitMQ五种队列模型(简单模型、工作模型、发布订阅模型、路由模型、主题模型)及代码实现
  • Linux命令200例:write用于向特定用户或特定终端发送信息
  • javaee spring整合mybatis spring帮我们创建dao层
  • 修改Tomcat的默认端口号
  • Open3D Ransac拟合空间直线(python详细过程版)
  • 题目:2729.判断一个数是否迷人
  • 微服务模式:服务发现模式
  • 9.4 数据库 TCP
  • 普通用户使用spark的client无法更新Ranger策略
  • Git超详细教程
  • C++ 回调函数