常用的代码健壮性判断

1. Arrays工具类toString()中的判断:

public static String toString(long[] a) {	//Arrays工具类toString()方法的源码
         if (a == null) //空指针判断
             return "null";
         int iMax = a.length - 1;
         if (iMax == -1) //空数组判断
             return "[]";
 
         StringBuilder b = new StringBuilder();
         b.append('[');
         for (int i = 0; ; i++) { //省略长度判断,提高效率
             b.append(a[i]);
             if (i == iMax)
                 return b.append(']').toString();
             b.append(", ");
         }
     }

2. 多态中的判断,判断是否为继承关系

  • 2.1 使用getClass()方法,重写equals()方法
public boolean equals(Object o) {
     // a quick test to see if the objects are identical
    if (this == o) return true; 
    // must return false if the explicit parameter is null or the classes don`t match
    if (o == null || getClass() != o.getClass()) return false;
    
    User user = (User) o;
    return id == user.id &&
            username.equals(user.username) &&
            password.equals(user.password);
}
  • 2.2 instanceof 运算符在运行时指出对象是否是特定类的一个实例

https://www.cnblogs.com/zjxynq/p/5882756.html

  • 用法:
    result = object instanceof class
  • 参数:
    Result:布尔类型。
    Object:必选项。任意对象表达式。
    Class:必选项。任意已定义的对象类。
  • 说明:
    如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false。但是instanceof在Java的编译状态和运行状态是有区别的:在编译状态中,class可以是object对象的父类,自身类,子类。在这三种情况下Java编译时不会报错。在运行转态中,class可以是object对象的父类,自身类,不能是子类。在前两种情况下result的结果为true,最后一种为false。但是class为子类时编译不会报错。运行结果为false。
  • 例子:
//接口Person
public interface Person {
	public void eat();
}
//实现类People
public class People implements Person {
	private int a=0;
	@Override
	public void eat() {
	System.out.println("======"+a);
	}
}
//子类xiaoming:
public class xiaoming extends People {
	private String name;@Override
	public void eat() {
	System.out.println("+++++++++");
	}
}
//主函数
public static void main(String[] args) {
	  People p=new People();
	  xiaoming x=new xiaoming();
	  System.out.println(p instanceof Person);
	  System.out.println(p instanceof xiaoming); -----2
	  System.out.println(x instanceof Person);
	  System.out.println(x instanceof People);
}
/*
注意:上面2处的代码在编译时不会报错。
运行结果:true
false
true
true
*/

3. 创建 File对象时的判断

  • 3.1 返回对象数组进行操作前:
File[] files = dirFile.listFiles();
//对返回的文件对象数组进行操作前,先判断数组是否为空,为空说明为空文件夹或者是文件
if (files != null) {	
}
  • 3.2 对文件夹对象进行操作前:
//判断对象是否存在,不存在先创建,用 mkdir() 还是 mkdirs() 可视使用情况而定
if (!targetDir.exists()) {	
//    targetDir.mkdir();
      targetDir.mkdirs();
}

4.Servlet相关:

  • 4.1 完成对数据库的CRUD操作后,将代码 surround with try/catch,对异常进行处理而非抛给客户端。其中try代码块中为操作成功的返回值,catch代码块中为操作失败后的返回值或相应的提示信息
try {
    String sql = "insert into message values(null,?,?,?,?,?,?);";
    int i = template.update(sql,stu.getName(),stu.getGender(),
            stu.getAge(),stu.getBirthday(),stu.getTel(),stu.getHobby());
    return i;
} catch (DataAccessException e) {
    e.printStackTrace();
    return 0;//存储失败,返回0
}
  • 4.2 response发送响应前,对对象进行非空判断,防止空指针异常
if (user != null) {
    response.getWriter().write("登录成功!" + user.getUsername() + ",欢迎您");
}

你可能感兴趣的:(Java,Web,Java基础)