zoukankan      html  css  js  c++  java
  • java编程常见错误汇总 (持续更新)

    1. 判断String类型数据要用 "equals" 而非 "==", 否则会出现判断条件总是成立或者不成立而走入错误的 if 分支。

    2. 较大数据进行 "*" 或者 "+" 运算时, 要在阿拉伯数字后面加上"L"防止溢出,在真实环境上吃过亏,debug花了不下半个小时啊~~~~谨记!!!

    3. 基础类型数据不可以被赋值为 null, 直接赋值的话编译器当然会提示你这样做不对,但是隐式的赋值就不一定了,比如以下这种情况:

     

    this.setRecommend_id(sm != null ? sm.getId() : null);

    这里 recommend_id 为 int类型变量,setRecommend_id是它的set函数, sm是另外一个类,以上的写法编译器并不会指出它有错误,但是一旦 sm == null 成立,程序运行时就会抛出 NullPointerException 异常,所以平时一定要注意变量是用基础类型还是包装类型

    4. String转为数字变量的时候要贴别注意小数点后位数,比如 String str = "3", Double.parseDouble(str)这个函数有可能会返回 3.0000000000001(原因我也不清楚,以后有时间有心情可以研究)。因此我们需要手动将输出结果四舍五入,比如:

    String.format("%.2f", new Double(str)).toString()

    5. 判断相等符号 "==" 经常会误写成 "=", 如果可以让编译器自己判断这种错误就好了,其实也不难,只要写代码时注意一些小trick即可:

    int a = 0;
    // 该写法容易出错
    if (a == 0) {
        logger.info("OK")    
    }
    // 安全写法
    if (0 == a) {
        logger.info("OK")    
    }
    // 如果误写为以下情形,编译器会报错
    if (0 = a) {
        logger.info("OK")    
    }

    6. java当中的for each 循环中,被循环的主体不能为null,否则会报错,例如以下代码运行就会报错NullPointerException:

    List<Integer> list = null;
            
     for (Integer e : list){
         System.out.println("e");
    }

    7. java当中有时候会出现 e.getmessage() 为空的情况,如下图所示:

            try {
            // 我的代码
            }catch (Exception e) {
    
                throw new RuntimeException("安卓通知基本信息设置出错" + e.getMessage());
            }   

    其打印出来的信息可能是 runtimeException + null , 原因e.getMessage抓取的 NullPointerException(说明一下上文跳出的的exception就是nullPointerException)就是null。

    那怎么办,简单,logger.error("",e) 是可以抓住这样的exception的。在上面加上一行,logger.error("msg", e)即可

    8. java类内容打印,经过实验应该是调用 get 方法,特殊的地方是 boolean 值调用is方法, 值得注意的是get方法返回值要和原先值对应,比如原先是Boolean get函数的返回值换成了boolean,就打不出来了~~~

    public class RecmndedMemInfo {
        
    
        private Boolean transfered; 
    
        public boolean getTransfered() { // 这里应该改成 Boolean, 否则打印为空
            return transfered;
        }
    
        public void setTransfered(Boolean transfered) {
            this.transfered = transfered;
        }
    
        public String toString(){
            try {
                return JSON.json(this);
            } catch (Exception e) {
                return "";
            }
            
        }
        
        public static void main(String[] args) {
            
            RecmndedMemInfo rm = new RecmndedMemInfo();        
    
            rm.setTransfered(null);
            
            System.out.println(rm); // 打印显示为空
        }
        
    }

      

  • 相关阅读:
    Django框架----路由系统(详细)
    Django框架----路由系统、视图和模板(简单介绍)
    Django框架----模板继承和静态文件配置
    Django框架----模板语法
    毕昇杯之无线通信模块
    新版本ubuntu13.10软件安装
    毕昇杯总结1
    调试程序的方法总结
    新年,新气象
    基于51,人体红外感应和RC522的门禁系统
  • 原文地址:https://www.cnblogs.com/yxmfighting/p/7280911.html
Copyright © 2011-2022 走看看