java编码经常犯错的地方

1 NPE 异常

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2 赋值时自动拆箱出现NPE

变量赋值时 自动箱出现的空指针
方法传参时 自动拆箱出现的空指针
在这里插入图片描述
在这里插入图片描述

3 字符串,数组,集合在使用时出现空指针怎么办?

在这里插入图片描述

        // 1. 字符串使用 equals 可能会报空指针错误
//        System.out.println(stringEquals("xyz", null));
//        System.out.println(stringEquals(null, "xyz"));

        // 2. 对象数组 new 出来, 但是元素没有初始化
//        User[] users = new User[10];
//        for (int i = 0; i != 10; ++i) {
//            //users[i] = new User();
//            users[i].name = "imooc-" + i;
//        }

        // 3. List 对象 addAll 传递 null 会抛出空指针
        List<User> users = new ArrayList<User>();
        User user = null;
        List<User> users_ = null;

        users.add(user);
        users.addAll(users_);

4 使用Optional 规避空指针时,需要注意些什么?

csdn
在这里插入图片描述
在这里插入图片描述

public class OptionalUsage {

    private static void badUsageOptional() {

        Optional<User> optional = Optional.ofNullable(null);
        User user = optional.orElse(null); // good
        user = optional.isPresent() ? optional.get() : null; // bad
    }

    public static class User {
        private String name;

        public User(String name) {
            this.name = name;
        }
        public User() {
        }

        public String getName() {
            return name;
        }
    }

    private static void isUserEqualNull() {

        User user = null;
        if (user != null) {
            System.out.println("User is not null");
        } else {
            System.out.println("User is null");
        }

        Optional<User> optional = Optional.empty();
        if (optional.isPresent()) {
            System.out.println("User is not null");
        } else {
            System.out.println("User is null");
        }
    }

    private static User anoymos() {
        return new User();
    }

    public static void main(String[] args) {

        // 没有意义的使用方法
//        isUserEqualNull();

//        User user = null;
        User user = new User("12");
//        Optional<User> user1 = Optional.ofNullable(user);
        Optional<User> optionalUser = Optional.ofNullable(user);
//        // 存在即返回, 空则提供默认值
//        optionalUser.orElse(new User());
//        // 存在即返回, 空则由函数去产生
//        optionalUser.orElseGet(() -> anoymos());
//        // 存在即返回, 否则抛出异常
//        optionalUser.orElseThrow(RuntimeException::new);
        // 存在才去做相应的处理
//        optionalUser.ifPresent(u -> System.err.println(u.getName()));
        // map 可以对 Optional 中的对象执行某种操作, 且会返回一个 Optional 对象
//        Optional<String> name = optionalUser.map(u -> u.getName());
//        String anymos = name.orElse("anymos");
//        System.err.println(anymos);
//        // map 是可以无限级联操作的
        Integer integer = optionalUser.map(u -> u.getName()).map(name -> name.length()).orElse(0);
        System.err.println(integer);
    }

}

5 编码中常见的异常(并发修改,类型转换,枚举查找)及其解决方案

在这里插入图片描述

        // 直接使用 for 循环会触发并发修改异常
//        for (User user : users) {
//            if (user.getName().equals("imooc")) {
//                users.remove(user);
//            }
//        }

        // 使用迭代器则没有问题
        Iterator<User> iter = users.iterator();
        while (iter.hasNext()) {
            User user = iter.next();
            if (user.getName().equals("imooc")) {
                iter.remove();
            }
        }
    }```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值