EffectiveJava 学习总结(二)

第三章、对于所有对象都通用的方法

1、覆盖equals时请遵守通用约定
  • 使用的场景
    • 实现特殊逻辑判断就需要覆盖equals方法
    • 确定equals不能被调用的类需要覆盖equals防止意外调用
  • 约定

    • 自反性,非null的 x.equals(x) 返回true
    • 对称性,非null的x、y, x.equals(y)返回true,则y.equlas(x)也返回true
    • 传递性,同对称性,xyz三个参数也同理
    • 一致性,无论多少次调用,返回的都是同样的
    • 对于非null的x,x.equals(null)返回false
    • 非null判断,否则可能会报出NullPointerException异常

          @Override
          public boolean equals(Object o){
              if(!(o instanceof MyType)){
                  return false;
              } else {
                  MyType mt = (MyType)o;
              }
              ...
          }
    • 特殊需要注意

      • double使用Double.compare,float使用Float.compare
      • 其他基本类型则用==
      • 对象可以递归的调用equals方法
      • 数组可以使用Arrays.equals,但是数组内可能有对象为null,为了防止null异常,需要注意判断
  • 其他需要注意
    • 不要企图让equals方法过于智能
    • equals(Object o)这里的Object不要替换为其他类型
2、覆盖equals时总要覆盖hashCode
  • 总是要覆盖hashCode,才能保证有相同的hash码,不过java没有提供散列函数,书里提供了一个方法,但是不能获取最新的
    @Override
    public int hashCode() {
        int result = 17;
        result = 31 * result + areaCode;
        result = 31 * result + prefix;
        result = 31 * result + lineNumber;
        return result;
    }   
3、始终要覆盖toString
  • 对象太大的话可以使用摘要返回
4、谨慎的覆盖clone
  • 谨慎
5、考虑实现Comparable接口
  • 顺序的比较,可以实现自己的逻辑,不要使用要小心

第四章、类和接口

一、使类和成员的可访问性最小化
  • 建议一开始都是private的,只有当另外一个类确定必须要访问的时候再放开访问权限
二、在公有类中使用访问方法而非公有域
  • 例如使用get和set访问对象属性,让公有类直接暴露域从来都不是一个好的办法。
三、使可变性最小化
  • 不可变类不要提供set这种能修改属性的方法,通过方法进行计算或是逻辑业务
  • 如果不是必须放开访问权限,设为final最好。构造器要完全初始化好对象,不要在构造器或者静态工厂之外再提供公有的初始化方法
四、复合优先于继承
  • 公认的
五、要么为继承而设计,并提供文档说明,要么就禁止继承
六、接口优于抽象类
七、类层次优于标签类
  • 如果例如矩形还是圆形,通过enum来判断不如直接写2个内部类,结构清晰不乱,也没有一堆if判断5
八、用函数对象表示策略??
九、优先考虑静态成员类
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图像识别技术在病虫害检测中的应用是一个快速发展的领域,它结合了计算机视觉和机器学习算法来自动识别和分类植物上的病虫害。以下是这一技术的一些关键步骤和组成部分: 1. **数据收集**:首先需要收集大量的植物图像数据,这些数据包括健康植物的图像以及受不同病虫害影响的植物图像。 2. **图像预处理**:对收集到的图像进行处理,以提高后续分析的准确性。这可能包括调整亮度、对比度、去噪、裁剪、缩放等。 3. **特征提取**:从图像中提取有助于识别病虫害的特征。这些特征可能包括颜色、纹理、形状、边缘等。 4. **模型训练**:使用机器学习算法(如支持向量机、随机森林、卷积神经网络等)来训练模型。训练过程中,算法会学习如何根据提取的特征来识别不同的病虫害。 5. **模型验证和测试**:在独立的测试集上验证模型的性能,以确保其准确性和泛化能力。 6. **部署和应用**:将训练好的模型部署到实际的病虫害检测系统中,可以是移动应用、网页服务或集成到智能农业设备中。 7. **实时监测**:在实际应用中,系统可以实时接收植物图像,并快速给出病虫害的检测结果。 8. **持续学习**:随着时间的推移,系统可以不断学习新的病虫害样本,以提高其识别能力。 9. **用户界面**:为了方便用户使用,通常会有一个用户友好的界面,显示检测结果,并提供进一步的指导或建议。 这项技术的优势在于它可以快速、准确地识别出病虫害,甚至在早期阶段就能发现问题,从而及时采取措施。此外,它还可以减少对化学农药的依赖,支持可持续农业发展。随着技术的不断进步,图像识别在病虫害检测中的应用将越来越广泛。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值