首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java异常处理最佳实践

", e); } } 因此,仅仅想要处理异常才去捕获,否则只需要在方法签名中声明让调用者去处理。 9. 包装异常不要抛弃原始的异常 捕获标准异常并包装为自定义异常是一个很常见的做法。...创建一个异常非常慢,抛出一个异常又会消耗1~5ms,一个异常在应用的多个层级之间传递,会拖累整个应用的性能。...【推荐】防止NPE,是程序员的基本修养,注意NPE产生的场景: 1) 返回类型为基本数据类型,return包装数据类型的对象,自动拆箱有可能产生NPE。...4) 远程调用返回对象,一律要求进行空指针判断,防止NPE。 5) 对于Session中获取的数据,建议进行NPE检查,避免空指针。...【推荐】定义时区分unchecked / checked 异常,避免直接抛出new RuntimeException(),更不允许抛出Exception或者Throwable,应使用有业务含义的自定义异常

70950
您找到你想要的搜索结果了吗?
是的
没有找到

懵逼...

为什么 return null 的时候,程序不会抛出 NPE 呢? 好像有千言万语,又不知从何说起。 我把归结到常识问题这一类,要对一个常识问题进行解释,还真的不太好组织语言。...安安静静的待在某个地方(局部变量、成员字段、静态字段)不会有任何问题;它从一个地方被搬运到另一个地方也不会有任何问题(变量赋值、返回值等)。...在Java里,下述操作隐含对引用的解引用: 读字段(字节码 getfield):x.y,x为nullNPE; 写字段(字节码 putfield):x.y = z,x为nullNPE。...注意:z的值是什么没关系; 读数组长度(字节码 arraylength):a.length,a为nullNPE; 读数组元素(字节码aload,为类型前缀):a[i],a为nullNPE;...写数组元素(字节码astore,为类型前缀):a[i] = x,a为nullNPE

29820

Java开发中如何正确踩坑

2.级联调用易产生 NPE 这段代码有点容易迷惑人,因为进行了集合元素的 isEmpty 判断,按说不会出问题了吧。...解决方案: 很简单咯,这么写:"mafly".equals(user.getName()); equals 方法容易抛空指针异常,应使用常量或确定有值的对象来调用 equals。...解决方案: 设置做下检验,对的特性正确理解及使用。...由于 HashMap 的干扰,很多人认为 ConcurrentHashMap 是可以置入 null 值,而事实上, 存储 null 值时会抛出 NPE 异常 Map 类集合 K/V 能不能存储 null...踩坑姿势: Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方法,的 add/remove/clear 方法会抛出 UnsupportedOperationException

59240

一文读懂 JAVA 异常处理

多用于在多系统集成某个子系统故障,异常类型可能有多种,可以用统一的异常类型向外暴露,不需暴露太多内部异常细节。...【推荐】 防止 NPE,是程序员的基本修养,注意 NPE 产生的场景: 1)返回类型为基本数据类型, return 包装数据类型的对象,自动拆箱有可能产生 NPE。...【推荐】 定义时区分 unchecked / checked 异常,避免直接抛出 new RuntimeException(), 更不允许抛出 Exception 或者 Throwable,应使用有业务含义的自定义异常...;另一种抛出该异常的可能原因是某个类已经由一个类加载器加载至内存中,另一个加载器又尝试去加载。... JVM 发现可以处理异常的代码,会把发生的异常传递给它。

1K20

Java开发中遇到的那些坑!

2.级联调用易产生 NPE 这段代码有点容易迷惑人,因为进行了集合元素的 isEmpty 判断,按说不会出问题了吧。...解决方案: 很简单咯,这么写:"mafly".equals(user.getName()); equals 方法容易抛空指针异常,应使用常量或确定有值的对象来调用 equals。...解决方案: 设置做下检验,对的特性正确理解及使用。...由于 HashMap 的干扰,很多人认为 ConcurrentHashMap 是可以置入 null 值,而事实上, 存储 null 值时会抛出 NPE 异常 Map 类集合 K/V 能不能存储 null...踩坑姿势: Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方法,的 add/remove/clear 方法会抛出 UnsupportedOperationException

1.1K10

Java开发手册之异常处理

catch请分清稳定代码和非稳定代码,稳定代码指的是无论如何不会出错的代码。对于非稳定代码的catch尽可能进行区分异常类型,再做对应的异常处理。...【强制】捕获异常是为了处理,不要捕获了却什么都不处理而抛弃之,如果不想处理,请将该异常抛给它的调用者。最外层的业务使用者,必须处理异常,将其转化为用户可以理解的内容。...【推荐】防止NPE,是程序员的基本修养,注意NPE产生的场景: 1) 返回类型为基本数据类型,return 包装数据类型的对象,自动拆箱有可能产生 NPE。...4) 远程调用返回对象,一律要求进行空指针判断,防止NPE。 5) 对于Session中获取的数据,建议NPE检查,避免空指针。...【推荐】定义时区分unchecked / checked 异常,避免直接抛出new RuntimeException(),更不允许抛出Exception或者Throwable,应使用有业务含义的自定义异常

69410

二、异常日志 (一) 异常处理

【强制】catch请分清稳定代码和非稳定代码,稳定代码指的是无论如何不会出错的代码。对于非稳定代码的catch尽可能进行区分异常类型,再做对应的异常处理。 ...【强制】捕获异常是为了处理,不要捕获了却什么都不处理而抛弃之,如果不想处理,请将该异常抛给它的调用者。最外层的业务使用者,必须处理异常,将其转化为用户可以理解的内容。...【推荐】防止NPE,是程序员的基本修养,注意NPE产生的场景: 1)返回类型为基本数据类型,return包装数据类型的对象,自动拆箱有可能产生NPE。...4) 远程调用返回对象,一律要求进行空指针判断,防止NPE。 5) 对于Session中获取的数据,建议NPE检查,避免空指针。...【推荐】定义时区分unchecked / checked 异常,避免直接抛出new RuntimeException(),更不允许抛出Exception或者Throwable,应使用有业务含义的自定义异常

47420

避开NullPointerException的10条建议

后续若也没有为该变量赋值,则使用这个变量里的内容,便会抛出 NPE。...对空对象调用静态方法或类方法不会NPE,因为静态方法不需要实例来调用任何方法; 访问或更改空对象上的任何变量或字段抛出异常抛出 null; 数组为 null ,访问数组长度; 数组为...,避免返回 null,而应是空集合或空数组 返回空集合或空数组,可以保证调用方法(如 size()、 length())不会出现 NPE。...再举个 Jackson 中的例子,子节点不存在, path()会返回一个 MissingNode 对象,调用 MissingNode 对象的 path() 方法是将继续返回 MissingNode...这样的链式调用将不会抛出 NPE。最后返回后,用户只需检查结果是否为 MissingNode 就能判断是不是找到了。

2K30

java开发手册黄山版_码出高效java开发手册pdf

反例:定义为基本数据类型 Boolean isDeleted 的属性,的方法也是 isDeleted(),RPC框架在反向解 析的时候,“误以为”对应的属性名称是 deleted,导致属性获取不到,进而抛出异常...说明:框架在调用属性 xxx的提取方法,并不能确定哪个方法一定是被优先调用到。...【推荐】防止 NPE,是程序员的基本修养,注意 NPE产生的场景: 1) 返回类型为基本数据类型,return 包装数据类型的对象,自动拆箱有可能产生 NPE。...4) 远程调用返回对象,一律要求进行空指针判断,防止 NPE。 5) 对于Session 中获取的数据,建议进行 NPE检查,避免空指针。...【强制】某一列的值全是NULL,count(col)的返回结果为0,但sum(col)的返回结果 为NULL,因此使用sum()需注意NPE问题。

1.6K50

《Java开发手册》

反例:定义为基本数据类型 Boolean isDeleted 的属性,的方法也是 isDeleted(),RPC框架在反向解 析的时候,“误以为”对应的属性名称是 deleted,导致属性获取不到,进而抛出异常...说明:框架在调用属性 xxx的提取方法,并不能确定哪个方法一定是被优先调用到。...【推荐】防止 NPE,是程序员的基本修养,注意 NPE产生的场景: 1) 返回类型为基本数据类型,return 包装数据类型的对象,自动拆箱有可能产生 NPE。...4) 远程调用返回对象,一律要求进行空指针判断,防止 NPE。 5) 对于Session 中获取的数据,建议进行 NPE检查,避免空指针。...【强制】某一列的值全是NULL,count(col)的返回结果为0,但sum(col)的返回结果 为NULL,因此使用sum()需注意NPE问题。

1.9K10

Java开发手册-异常日志

【推荐】在获取第三方服务错误码,向上抛出允许本系统转义,由 C 转为 B,并且在错误信息上带上原有的第三方错误码。 10.【参考】错误码分为一级宏观错误码、二级宏观错误码、三级宏观错误码。...【强制】catch 请分清稳定代码和非稳定代码,稳定代码指的是无论如何不会出错的代码。对于非稳定 代码的 catch 尽可能进行区分异常类型,再做对应的异常处理。...【推荐】防止 NPE,是程序员的基本修养,注意 NPE 产生的场景: 1)返回类型为基本数据类型,return 包装数据类型的对象,自动拆箱有可能产生 NPE 反例:public int method...4)远程调用返回对象,一律要求进行空指针判断,防止 NPE。 5)对于 Session 中获取的数据,建议进行 NPE 检查,避免空指针。...【推荐】定义时区分 unchecked / checked 异常,避免直接抛出 new RuntimeException(),更不允许抛出 Exception 或者 Throwable,应使用有业务含义的自定义异常

53410

Java编码手册之华山版小精华

【强制】Object 的 equals 方法容易抛空指针异常,应使用常量或确定有值的对象来调用 equals。...这点要特别注意,如果位置错误真的会抛出NPE问题,而且目前小编在code review过程中也发现同事会存在这样的问题; 12....【强制】 switch 括号内的变量类型为 String 并且此变量为外部参数,必须先进行 null 判断。 13.【强制】在高并发场景中,避免使用”等于”判断作为中断或退出的条件。...【推荐】防止 NPE,是程序员的基本修养,注意 NPE 产生的场景: 1) 返回类型为基本数据类型,return 包装数据类型的对象,自动拆箱有可能产生 NPE。...4) 远程调用返回对象,一律要求进行空指针判断,防止 NPE。 5) 对于 Session 中获取的数据,建议进行 NPE 检查,避免空指针。

60840

【148期】最最最全面的Java异常面试及解答

特点:Java 编译器不会检查。也就是说,程序中可能出现这类异常,倘若既"没有通过throws声明抛出",也"没有用try-catch语句捕获",还是会编译通过。...虽然 Java 编译器不会检查运行时异常,但是我们也可以通过 throws 进行声明抛出,也可以通过 try-catch 对进行捕获处理。如果产生运行时异常,则需要通过修改代码来进行避免。...非受检异常 编译器不会进行检查并且不要求必须处理的异常,也就说程序中出现此类异常,即使我们没有try-catch捕获,也没有使用throws抛出该异常,编译也会正常通过。...访问某个类的不存在的属性抛出该异常。 java.lang.NoSuchMethodException:方法不存在异常。访问某个类的不存在的方法抛出该异常。...【推荐】防止NPE,是程序员的基本修养,注意NPE产生的场景:1) 返回类型为基本数据类型,return包装数据类型的对象,自动拆箱有可能产生NPE

55520

Java异常面试题(2020最新版)

特点:Java 编译器不会检查。也就是说,程序中可能出现这类异常,倘若既"没有通过throws声明抛出",也"没有用try-catch语句捕获",还是会编译通过。...虽然 Java 编译器不会检查运行时异常,但是我们也可以通过 throws 进行声明抛出,也可以通过 try-catch 对进行捕获处理。如果产生运行时异常,则需要通过修改代码来进行避免。...非受检异常  编译器不会进行检查并且不要求必须处理的异常,也就说程序中出现此类异常,即使我们没有try-catch捕获,也没有使用throws抛出该异常,编译也会正常通过。...访问某个类的不存在的属性抛出该异常。  java.lang.NoSuchMethodException:方法不存在异常。访问某个类的不存在的方法抛出该异常。 ...【推荐】防止NPE,是程序员的基本修养,注意NPE产生的场景: 1) 返回类型为基本数据类型,return包装数据类型的对象,自动拆箱有可能产生NPE

75030

【Java 8】巧用Optional之优雅规避NPE问题

避之不及的 NullPointerException NPE : NullPointerException 空指针异常是最常见的Java异常之一,抛出NPE错误不是用户操作的错误,而是开发人员的错误,...如果变量存在,直接返回封装的变量值,否则就抛出一个NoSuchElementException异常。所以,除非你非常确定Optional变量一定包含值,否则最好不要使用这个方法。...orElse(T other),允许你在 Optional对象不包含值提供一个默认值。 orElseGet(Supplier exceptionSupplier)和get方法非常类似,它们遭遇Optional对象为空都会抛出一个异常,但是使用orElseThrow你可以定制希望抛出的异常类型。...extends T> other)的区别 这两个函数的区别:value值不为null,orElse函数依然会执行返回T的方法,而orElseGet函数并不会执行返回T的方法。

34810

Dating Java8系列之巧用Optional之优雅规避NPE问题

翎野君/文 避之不及的 NullPointerException NPE : NullPointerException 空指针异常是最常见的Java异常之一,抛出NPE错误不是用户操作的错误,而是开发人员的错误...如果变量存在,直接返回封装的变量值,否则就抛出一个NoSuchElementException异常。所以,除非你非常确定Optional变量一定包含值,否则最好不要使用这个方法。...orElse(T other),允许你在 Optional对象不包含值提供一个默认值。 orElseGet(Supplier exceptionSupplier)和get方法非常类似,它们遭遇Optional对象为空都会抛出一个异常,但是使用orElseThrow你可以定制希望抛出的异常类型。...extends T> other)的区别 value值不为null,orElse函数依然会执行返回T的方法,而orElseGet函数并不会执行返回T的方法。

11610

Java开发规范记录

注意:count(*)会统计值为 NULL 的行,而 count(列名)不会统计此列为 NULL 值的行。...某一列的值全是 NULL ,count(column)的返回结果为 0,但 sum(column)的返回结果为 NULL,因此使用 sum() 需注意 NPE 问题 正例:可以使用如下方式来避免...说明:索引文件具有 B-Tree 的最左前缀匹配特性,如果左边的值未确定,那么无法使用此索引 表达是与否概念的字段,必须使用 is_xxx 的方式命名,数据类型是 unsigned tinyint (...因此,数据库名、表名、字段名,都不允许出现任何大写字母,避免节外生枝....使用工具类 Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方 法,的 add/remove/clear 方法会抛出 UnsupportedOperationException

12910
领券