java(SE)中易混淆的概念
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 的链式调用
更多推荐



所有评论(0)