zoukankan      html  css  js  c++  java
  • 阿里Java开发规约笔记

    借助阿里开发规约,回顾一下Java开发编码基础方面的知识,结合自己使用中遇到的问题,记录一下规约中以前翻过的错、有共鸣的问题。

    1、覆写方法时要加上@Override注解。重写一个类型T的equals方法,一开始把参数类型写成T,比较没起作用,后来改成Object后才生效,如果加上注解一开始就会报错提示。

    【强制】所有的覆写方法,必须加@Override 注解。 说明:getObject()与 get0bject()的问题。一个是字母的 O,一个是数字的 0,加@Override 可以准确判断是否覆盖成功。另外,如果在抽象类中对方法签名进行修改,其实现类会马上编 译报错。

    2、如果一个对象放入Set或者作为HashMap的key一定要重写hashCode和equals方法。要注意这两个方法的规定:

      一个对象只要内容不变,则它的hashCode方法返回的整数不变。

      两个对象equals返回true,则它们的hashCode方法返回的整数一定相同,否则它们的hashCode方法返回的整数不一定不相同。

      两个对象它们的hashCode方法返回的整数不相同,则它们肯定不满足equals,否则它们返回的整数相同,则不一定满足equals。

      判断两个对象是否相同最终时要通过equals方法,但在Set或HashMap中放入元素时可以通过hashCode方法减少equals方法的调用次数,从而提高性能。

    【强制】关于 hashCode 和 equals 的处理,遵循如下规则: 1) 只要重写 equals,就必须重写 hashCode。 2) 因为 Set 存储的是不重复的对象,依据 hashCode 和 equals 进行判断,所以 Set 存储的 对象必须重写这两个方法。 3) 如果自定义对象作为 Map 的键,那么必须重写 hashCode 和 equals。 说明:String 重写了 hashCode 和 equals 方法,所以我们可以非常愉快地使用 String 对象 作为 key 来使用。

    3.Arrays.asList()把数据转成集合时后台的数据仍是数组。

    【强制】使用工具类 Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方 法,它的 add/remove/clear 方法会抛出 UnsupportedOperationException 异常。

    说明:asList 的返回对象是一个 Arrays 内部类,并没有实现集合的修改方法。Arrays.asList 体现的是适配器模式,只是转换接口,后台的数据仍是数组。

    String[] str = new String[] { "you", "wu" };

    List list = Arrays.asList(str);

    第一种情况:list.add("yangguanbao"); 运行时异常。

    第二种情况:str[0] = "gujin"; 那么 list.get(0)也会随之修改。

    4、创建线程或线程池时要指定名字方面排查问题。

    【强制】创建线程或线程池时请指定有意义的线程名称,方便出错时回溯。 正例:

    public class TimerTaskThread extends Thread { public TimerTaskThread() { super.setName("TimerTaskThread"); ... }

    阿里巴巴Java开发手册(纪念版).pdf

  • 相关阅读:
    布局的诡异bug合集+解决方法(更新中)
    java并发:CopyOnWriteArrayList简单理解
    java集合: LinkedList源码浅析
    Idea设置类注释模板
    jquery使用FormData提交数据
    postman发送json请求
    消息队列的简单理解
    如何设计一个消息队列?
    SpringBoot配置logback
    linux下安装kafka
  • 原文地址:https://www.cnblogs.com/doit8791/p/8387576.html
Copyright © 2011-2022 走看看