Java知识点二

本文介绍了Java中的Comparable内部比较器和Comparator外部比较器的区别,以及Java反射如何在运行时获取和操作类的属性和方法。对比了两者在排序解耦上的应用,并展示了如何使用Class类和Constructor进行反射实例化。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值