• Java高级规范之三


      

    三十一、如果变量名要加注释,说明命名不是很准确。

    不规范示例:暂无

    规范实例:暂无

    解析:暂无

    三十二、任何类字段除非必要,否则都要私有化

    不规范示例:

    public class Person{

      String name;

      String sex;

      int age;

    }

    规范示例:

    public class ClassName{

      private String name;

      private String sex;

      private int age;

    }

    解析:没有为程序的安全考虑,可以被其他的类访问

    三十三、尽量减少一个类属性的作用域,在离使用它的最近的地方定义。

    不规范示例:

      int index = 1;//类似这种情况,变量声明离使用的地方有些远。

      String sql = "insert into Student(ID,name,password,sex,address)Values(?,?,?,?,?)"

      PreparedStatement preparedStatement= connection.prepareStatement(sql);

      preparedStatement.setString(index++,user.getID());

      preparedStatement.setString(index++,user.getName());

      preparedStatement.setString(index++,user.getPassword());

      preparedStatement.setString(index++,user.getSex());

      preparedStatement.setString(index++,user.getAddress());

      preparedStatement.executeUpdate(); preparedStatement.close();

    规范示例:

      String sql=  "insert into Student(ID,name,password,sex,address)Values(?,?,?,?,?)"

      PreparedStatement preparedStatement= connection.prepareStatement(sql);

      int index = 1;

      connection.prepareStatement(sql);

      preparedStatement.setString(index++,user.getID());

      preparedStatement.setString(index++,user.getName());

      preparedStatement.setString(index++,user.getPassword());

      preparedStatement.setString(index++,user.getSex());

      preparedStatement.setString(index++,user.getAddress());

      preparedStatement.executeUpdate(); preparedStatement.close();

    解析:当别人维护时容易引起混淆,容易引发错误。

    三十四、单例模式的使用必须要考虑同步。

    不规范示例:

      public static  Connection conn=null;

      //没有使用同步

      public static Connection getConnection()throws ClassNotFoundException,SQLException{

        if(){

          if(conn==null){

          Class.forName("com.p6spy.engine.spy.P6SpyDriver");

          conn=DriverManager.getConnection("jdbc:mysql://locallhost:3306/test", "root","root");

          }

        return conn;

      }

    规范示例:

    //最熟悉地得到一个Connection连接

      public static  Connection conn=null;

      public static synchronized Connection getConnection()throws ClassNotFoundException,SQLException{

        if(){ if(conn==null){

        Class.forName("com.p6spy.engine.spy.P6SpyDriver");

        conn=DriverManager.getConnection("jdbc:mysql://locallhost:3306/test", "root","root");

        }

        return conn;

      }

    解析:当有多个用户并发使用的时候会造成数据的混乱,导致线程不安全

    三十五、方法里面参数最好不要超过三个。

    不规范示例:

      public void update(int id,String name,String code,String sex){

        ........................

      }

    规范示例:

      public void update(int id,String,name,String sex){

        ........................

      }

      //如果参数超过三个,必须把数据封装成一个pojo

      //如把上面的update方法中的参数封装起来

      public class User(){

        private int id;

        private String code;

        private String name;

        public String getName(){return name;}

        public void setName(String name){this.name=name;}

        public void String getCode(){return code;}

        public void setCode(String code){this.code=code;}

        public void setId(int id){this.id=id;}

        public void getId{return id;

      }

        ......................

      public void update(User user){

        ..................

      }

    解析:参数多容易出现错误,尤其是调用的时候,如果参数的顺序传错误,将是一个非常大的麻烦,而且没有拓展性

    三十六、值类或值对象必须重写toString方法。

    不规范示例:

      public calss Code{

      private int id;

      private String code;

      private String name;

      private String sex;

      public String getSex(){return sex;}

      public void setSex(String sex){this.sex=sex;}

      public String getName(){return name;}

      public void setName(String name){this.name=name;}

      public void String getCode(){return code;}

      public void setCode(String code){this.code=code;}

      public void getId{return id;}

      public void setId(int id){this.id=id;}

      }

    规范示例:

      public calss Person{

      private int id;

      private String code;

      private String name;

      private String sex;

      public String getSex(){return sex;}

      public void setSex(String sex){this.sex=sex;}

      public String getName(){return name;}

      public void setName(String name){this.name=name;}

      public void String getCode(){return code;}

      public void setCode(String code){this.code=code;}

      public void getId{return id;}

      public void setId(int id){this.id=id;}

      public String toString(){

        return new StringBuffer().append(id+",").append(name+",").append(sex).toString();

      }

      }

    解析:toString的作用是以字符串的形式返回它的实例信息,因为不同的类的信息是不同的,所以要重写,不能全部都继承Object的toString方法。

    三十七、重写equals方法的时候,必须重写hashCode方法。

    不规范示例:

      public class People{

      //必要的属性

      //必要的get和set方法

      //toString方法

      没有hashCode方法

      没有equals方法

      }

    规范示例:

      public class People{

      //必要的属性

      //必要的get和set方法

      //toString方法

      public int hashCode(){

      final int prime = 37;

      int result =1;

      result = prime * result +id;

      result = prime * result +((name==null)?0:name.hashCode());

      result = prime * result +((sex==null)?0:sex.hashCode());

      return result;

      }

      public boolean equals(Object obj){

      if(this==obj) return true;

      if(obj==null) return false;

      if(getClass()!=obj.getClass()) return false;

      People other = (People)obj;

      if(id!=other.id) return false;

      if(name==null){

      if(other.name!=null) return false;

      } else if(!name.equals(other.name)) return false;

      if(sex==null){

      if(other.sex!=null) return false;

      }else if(!sex.equals(other.sex)) return false;

      return true;

      }

      }

    解析:重写equals和hashcode方法是为了像Set一样不能存储重复的元素,并实现Serializable是为了使这个类可以序列化

    三十八、单元测试的时候必须是对象比较,如果一个字段有100个字,有时候数据库会自动删除一些,此时我们就不知道程序哪儿出bug了。

    不规范示例:暂无

    规范示例:暂无

    解析:实用的开放经验

    三十九、单元测试类的类名后面要加Test。

    不规范示例:

      //这是一个UserDAO的单元测试类

      public class UserDAO{}

    规范示例:

      public class UserDAOTest{}

    解析:这样写是让别人知道这个类是用做测试的,清晰易懂。

    四十、操作提示颜色,成功用蓝色字体,错误用红色字体。

    不规范示例:暂无

    规范示例:暂无

    解析:实用的开放经验

  • 相关阅读:
    Spark研究笔记7:重要的工厂类UserManager(原创) CVT
    Spark研究笔记9:重要的工厂类PresenceManager(原创) CVT
    Spark研究笔记11:实体类 CVT
    Spark研究笔记5:重要的工厂类NativeManager(原创) CVT
    Spark研究笔记8:重要的工厂类PluginManager(原创) CVT
    Spark研究笔记6:重要的工厂类SessionManager(原创) CVT
    Spark研究笔记12:监听类 CVT
    Spark研究笔记10:重要的工厂类SoundManager(原创) CVT
    声明和定义的区别
    LINQ查询操作符
  • 原文地址:https://www.cnblogs.com/amirsterry/p/3761979.html
Copyright © 2020-2023  润新知