1.  重载和重写

1.1重载(Overloading)

重载是在同一个类中,方法名相同但参数列表不同的情况。

特点:

· 发生在同一个类中

· 方法名必须相同

· 参数列表必须不同(参数类型、个数、顺序),至少有一个不同

· 返回类型可以相同也可以不同

· 访问修饰符可以不同

· 与异常处理无关

1.2重写(Overriding)

重写是子类重新定义父类中已有方法的情况。

特点:

· 发生在继承关系的父子类之间
· 方法名、参数列表、返回类型必须相同
· 访问修饰符不能比父类更严格(例:父类为public子类不能为private)
· 子类方法抛出的异常不能比父类方法更广泛
· 使用 @Override 注解标识

1.3总结

· 重载:解决同一个类中相似功能的方法命名问题,提高代码可读性
· 重写:实现多态,让子类可以根据需要改变父类的行为
· 两者都是面向对象多态性的重要体现,但在使用场景和规则上有明显区别

2.String,StringBuffer,Stringbuilder

三者都是字符串处理类

2.1 String(字符串常量)

特点:

· 不可变对象:一旦创建就不能修改
· 字符串常量池:相同的字符串字面量会共享
· 线程安全:由于不可变性,天然线程安全

2.2 StringBuffer(字符串变量)

特点:

· 可变对象:可以在原对象上修改

· 线程安全:所有方法都是synchronized的

· 性能较好:比String在频繁修改时性能好

2.3 StringBuilder(字符串变量)

特点:

· 可变对象:可以在原对象上修改

· 非线程安全:方法没有同步

· 性能最好:在单线程环境下性能最优

2.4总结

· 不改变用 String

· 单线程改变用 StringBuilder

· 多线程改变用 StringBuffer

3.throw和throws

3.1throw(抛出异常)

使用场景:

· 在方法内部主动抛出异常
· 当业务逻辑不满足条件时抛出异常
· 在catch块中重新抛出异常

3.2throws(声明异常)


使用场景:

· 声明方法可能抛出的受检异常
· 将异常处理责任传递给调用者
· 在方法重写时保持异常声明的一致性
 

3.3总结

· throw:用于在方法内部主动抛出异常对象

· throws:用于在方法声明中指定可能抛出的异常类型

· 选择原则:

  · 对于可恢复的错误,使用受检异常(需要throws声明)

  · 对于编程错误,使用运行时异常(不需要throws声明)

· 最佳实践:

  · 提供有意义的异常信息

  · 保留原始异常信息(异常链)

  · 在合适的层次处理异常

  · 避免过度使用throws声明

正确使用throw和throws可以使代码更加健壮,错误处理更加清晰,提高代码的可维护性。

4.compareTo ,comparator

4.1 compareTo方法(comparable接口)

· Comparable 接口定义对象的自然排序

· 类实现 Comparable 接口后,对象之间可以相互比较

· compareTo 方法返回负整数、零或正整数

4.2 comparator 接口

基本概念:

· Comparator 用于定义定制排序规则
· 可以在不修改原类的情况下定义多种排序方式
· 更加灵活,支持多种排序策略

4.3总结

· Comparable (compareTo):

  · 定义自然排序

  · 在类内部实现

  · 用于默认排序规则

· Comparator:

  · 定义定制排序

  · 外部实现,更加灵活

  · 支持多种排序策略

  · 可以使用Lambda表达式简化代码

选择原则:

· 如果对象有自然的排序方式,实现 Comparable 接口

· 如果需要多种排序方式,或者不能修改原类,使用 Comparator

· 对于复杂的多级排序,优先使用 Comparator 的链式调用

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐