精华内容
下载资源
问答
  • BigDecimal空指针异常——个人应用

    BigDecimal空指针异常——个人应用

    参考文章:

    (1)BigDecimal空指针异常——个人应用

    (2)https://www.cnblogs.com/sun7897/p/10103352.html


    备忘一下。


    展开全文
  • 处理BigDecimal空指针异常

    万次阅读 2017-08-02 16:56:00
    BigDecimal在java中是一种特殊的类了,关于BigDecimal中空指针异常的处理做了如下的控制就可以了 if (!monthlyPaymentsSum.equals(BigDecimal.ZERO)) { debtEchoInfo.setCreditMonthlyWithoutCard...

    BigDecimal在java中是一种特殊的类了,关于BigDecimal中空指针异常的处理做了如下的控制就可以了

    if (!monthlyPaymentsSum.equals(BigDecimal.ZERO))
    		{
    			debtEchoInfo.setCreditMonthlyWithoutCard(monthlyPaymentsSum.add(debtEchoInfo.getCardMonthly()));
    		}else {
    			debtEchoInfo.setCreditMonthlyWithoutCard(debtEchoInfo.getCardMonthly());
    		}


    展开全文
  • BigDecimal数组空指针异常

    千次阅读 2017-08-04 17:02:10
    BigDecimal[] tempSum = new BigDecimal[24];//气温综合 BigDecimal[] tempAvg = new BigDecimal[24];//气温平均值 即为第n天的初次预测温度 for(int l = 0;l;l++){//一天的24小时 for(int j=0;j;j++)

    代码:

     BigDecimal[] tempSum = new BigDecimal[24];//气温综合
            BigDecimal[] tempAvg = new BigDecimal[24];//气温平均值 即为第n天的初次预测温度
    
     for(int l = 0;l<=23;l++){//一天的24小时
                for(int j=0;j<daynum;j++){//daynum天的历史数据
                    tempSum[l] = tempSum[l].add(allTemp[l+j*24]);
                }
                tempAvg[l] = new BigDecimal(0.0);
                tempAvg[l] = tempSum[l].divide(new BigDecimal(daynum+""));
            }


    错误:NullPointerException


    原因:通过Debugger可以看出,BigDecimal数组在被声明后,所有元素都是null


    解决:

     Arrays.fill(tempSum,BigDecimal.ZERO);
    通过Arrays的静态方法fill,来填充0值

    参考资料:https://stackoverflow.com/questions/20683665/declare-initial-value-of-bigdecimal-array-in-java

    展开全文
  • java 避免空指针异常

    2019-05-04 11:47:01
    Java应用中抛出的空指针异常是解决空指针的最好方式,也是写出能顺利工作的健壮程序的关键。熟话说“预防胜于治疗”,对于这么令人讨厌的空指针异常,这句话也是成立的。值得庆幸的是运用一些防御性的编码技巧,跟踪...

    Java应用中抛出的空指针异常是解决空指针的最好方式,也是写出能顺利工作的健壮程序的关键。熟话说“预防胜于治疗”,对于这么令人讨厌的空指针异常,这句话也是成立的。值得庆幸的是运用一些防御性的编码技巧,跟踪应用中多个部分之间的联系,你可以将Java中的空指针异常控制在一个很好的水平上。顺便说一句,这是Javarevisited上的第二个空指针异常的帖子。在上个帖子中我们讨论了Java中导致空指针异常的常见原因,而在本教程中我们将会学习一些Java的编程技巧和最佳实践。这些技巧可以帮助你避免Java中的空指针异常。遵从这些技巧同样可以减少Java代码中到处都有的非空检查的数量。作为一个有经验的Java程序员,你可能已经知道其中的一部分技巧并且应用在你的项目中。但对于新手和中级开发人员来说,这将是很值得学习的。顺便说一句,如果你知道其它的避免空指针异常和减少空指针检查的Java技巧,请和我们分享。

    这些都是简单的技巧,很容易应用,但是对代码质量和健壮性有显著影响。根据我的经验,只有第一个技巧可以显著改善代码质量。如我之前所讲,如果你知道任何避免空指针异常和减少空指针检查的Java技巧,你可以通过评论本文来和分享。

    1) 从已知的String对象中调用equals()和equalsIgnoreCase()方法,而非未知对象。

    总是从已知的非空String对象中调用equals()方法。因为equals()方法是对称的,调用a.equals(b)和调用b.equals(a)是完全相同的,这也是为什么程序员对于对象a和b这么不上心。如果调用者是空指针,这种调用可能导致一个空指针异常

    Object unknownObject = null;
    
    
    
    //错误方式 – 可能导致 NullPointerException
    
    if(unknownObject.equals("knownObject")){
    
       System.err.println("This may result in NullPointerException if unknownObject is null");
    
    }
    
    
    
    //正确方式 - 即便 unknownObject是null也能避免NullPointerException
    
    if("knownObject".equals(unknownObject)){
    
        System.err.println("better coding avoided NullPointerException");
    
    }

    这是避免空指针异常最简单的Java技巧,但能够导致巨大的改进,因为equals()是一个常见方法。

    2) 当valueOf()和toString()返回相同的结果时,宁愿使用前者。

    因为调用null对象的toString()会抛出空指针异常,如果我们能够使用valueOf()获得相同的值,那宁愿使用valueOf(),传递一个null给valueOf()将会返回“null”,尤其是在那些包装类,像Integer、Float、Double和BigDecimal。

    BigDecimal bd = getPrice();
    
    System.out.println(String.valueOf(bd)); //不会抛出空指针异常
    
    System.out.println(bd.toString()); //抛出 "Exception in thread "main" java.lang.NullPointerException"


    3) 使用null安全的方法和库 有很多开源库已经为您做了繁重的空指针检查工作。其中最常用的一个的是Apache commons 中的StringUtils。你可以使用StringUtils.isBlank(),isNumeric(),isWhiteSpace()以及其他的工具方法而不用担心空指针异常。

    //StringUtils方法是空指针安全的,他们不会抛出空指针异常
    
    System.out.println(StringUtils.isEmpty(null));
    
    System.out.println(StringUtils.isBlank(null));
    
    System.out.println(StringUtils.isNumeric(null));
    
    System.out.println(StringUtils.isAllUpperCase(null));
    
    
    
    Output:
    
    true
    
    true
    
    false
    
    false

    但是在做出结论之前,不要忘记阅读空指针方法的类的文档。这是另一个不需要下大功夫就能得到很大改进的Java最佳实践。

    4) 避免从方法中返回空指针,而是返回空collection或者空数组。

    这个Java最佳实践或技巧由Joshua Bloch在他的书Effective Java中提到。这是另外一个可以更好的使用Java编程的技巧。通过返回一个空collection或者空数组,你可以确保在调用如size(),length()的时候不会因为空指针异常崩溃。Collections类提供了方便的空List,Set和Map: Collections.EMPTY_LIST,Collections.EMPTY_SET,Collections.EMPTY_MAP。这里是实例。

    public List getOrders(Customer customer){
    
        List result = Collections.EMPTY_LIST;
    
        return result;
    
    }

    你同样可以使用Collections.EMPTY_SET和Collections.EMPTY_MAP来代替空指针。

    5) 使用annotation@NotNull 和 @Nullable

    在写程序的时候你可以定义是否可为空指针。通过使用像@NotNull和@Nullable之类的annotation来声明一个方法是否是空指针安全的。现代的编译器、IDE或者工具可以读此annotation并帮你添加忘记的空指针检查,或者向你提示出不必要的乱七八糟的空指针检查。IntelliJ和findbugs已经支持了这些annotation。这些annotation同样是JSR 305的一部分,但即便IDE或工具中没有,这个annotation本身可以作为文档。看到@NotNull和@Nullable,程序员自己可以决定是否做空指针检查。顺便说一句,这个技巧对Java程序员来说相对比较新,要采用需要一段时间。

    6) 避免你的代码中不必要的自动包装和自动解包。

    且不管其他如创建临时对象的缺点,如果wrapper类对象是null,自动包装同样容易导致空指针异常。例如如果person对象没有电话号码的话会返回null,如下代码会因为空指针异常崩溃。

    Person ram = new Person("ram");
    
    int phone = ram.getPhone();

    当使用自动包装和自动解包的时候,不仅仅是等号,&lt; &gt; 同样会抛出空指针异常。你可以通过这篇文章来学习更多的Java中的自动包装和拆包的陷阱

    7) 遵从Contract并定义合理的默认值。

    在Java中避免空指针异常的一个最好的方法是简单的定义contract并遵从它们。大部分空指针异常的出现是因为使用不完整的信息创建对象或者未提供所有的依赖项。如果你不允许创建不完整的对象并优雅地拒绝这些请求,你可以在接下来的工作者预防大量的空指针异常。类似的,如果对象允许创建,你需要给他们定义一个合理的默认值。例如一个Employee对象不能在创建的时候没有id和name,但是是否有电话号码是可选的。现在如果Employee没有电话号码,你可以返回一个默认值(例如0)来代替返回null。但是必须谨慎选择,哟有时候检查空指针比调用无效号码要方便。同样的,通过定义什么可以是null,什么不能为null,调用者可以作出明智的决定。failing fast或接受null同样是一个你需要进行选择并贯彻的,重要的设计决策

    8)定义数据库中的字段是否可为空。

    如果你在使用数据库来保存你的域名对象,如Customers,Orders 等,你需要在数据库本身定义是否为空的约束。因为数据库会从很多代码中获取数据,数据库中有是否为空的检查可以确保你的数据健全。在数据空中维护null约束同样可以帮助你减少Java代码中的空指针检查。当从数据库中加载一个对象是你会明确,哪些字段是可以为null的,而哪些不能,这可以使你代码中不必要的!= null检查最少化。

    9) 使用空对象模式(Null Object Pattern)

    还有一种方法来避免Java中的空指针异常。如果一个方法返回对象,在调用者中执行一些操作,例如Collection.iterator()方法返回迭代器,其调用者执行遍历。假设如果一个调用者并没有任何迭代器,其可以返回空对象(Null object)而非null。空对象是一个特殊的对象,其在不同的上下文中有不同的意义。例如一个空的迭代器调用hasNext()返回false时,可以是一个空对象。同样的在返回Container和Collection类型方法的例子中,空对象可以被用来代替null作为返回值。我打算另写一篇文章来讲空对象模式,分享几个Java空对象的例子。

    这就是全部了,这是几个易于遵从的避免空指针异常的Java技巧和最佳实践。你可以欣赏到这些技巧将非常有用,且不太难实现。如果你有其他比秒这个异常的技巧,而又没包含在这里,请通过评论来和我们分享,我将收录在这里。

     

    原文链接:https://blog.csdn.net/kuyuyingzi/article/details/16973429

    展开全文
  • Java应用中抛出的空指针异常是解决空指针的最好方式,也是写出能顺利工作的健壮程序的关键。 避免Java中的空指针异常的常用技巧(同时避免大量的非空检查): 1) 从已知的String对象中调用equals()和...
  • 关于Java中的空指针异常

    千次阅读 2010-08-19 11:05:00
    空指针异常
  • // Double d1 = 0.2; // Double d2 = 0.3; // System.out.println(d1.compareTo(d2)); //-1 // Double d1 = null; // Double d2 = 0.3; // System.out.println(d1.c...
  • <p>java: Internal error in the mapping processor: java.lang.NullPointerException at org.mapstruct.ap.internal.processor.DefaultVersionInformation.createManifestUrl(DefaultVersionInformation.java:182) ...
  • 输入复杂对象不再导致 java 空指针异常 这个怎么运作: 使用 Java 反射,我们构造了包含所有字段的对象图(如果类扩展了父类,则继承)。 我们使用深度优先搜索遍历,应用模板和访问者设计模式,我们定义在访问每个...
  • 避免实体类空指针异常,并赋初值 可扩展
  • 空指针是运行时异常,所以就导致在编码时不易发现,因为Java中对象可以设为null,当去使用为null的对象操作时会抛出空指针,NullPointerException 官方解释???? NullPointerException is a RuntimeException. In ...
  • BigDecimal bd = getPrice(); System.out.println(String.... //不会抛出空指针异常 System.out.println(bd.toString()); //抛出 "Exception in thread "main" java.lang.NullPointerException"
  • 避免实体类空指针异常.

    千次阅读 2016-11-22 14:53:11
    import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method;...import java.math.BigDecimal; import java.util.ArrayList; import java.util.List;     import com
  • java.lang.NullPointerException解决: 问题描述:对象集合中,根据对象的某个属性进行升降排序时,未考虑对应属性的null值,导致出现空指针异常。 解决方法:Comparator.nullsFirst和Comparator.nullsLast 根据对象...
  • // 注意:必须要初始化值,否则会报空指针 totalMoney = totalMoney.add(new BigDecimal(5)); 在使用BigDecmial进行比较的时候不能使用equals与==比较了,需要使用compareTo()进行比较 BigDecimal temp1 = new ...
  • 1) 从已知的String对象中调用equals()和equalsIgnoreCase()方法,而非未知对象。 总是从已知的非空String对象中调用equals()方法。...如果调用者是空指针,这种调用可能导致一个空指针异常 Object unkn...
  • 使用场景: @Data @Component public class Info implements Serializable { private Integer id; private String name; private Integer age; @TableField(exist = false) private String str;...
  • 究其原因是因为按照上述两个参数的配置,testdb.item中fee_rate字段类型为decimal(10,6),数据为0.000000,经过一系列处理0.000000最终会被处理为0,看下边最终导致空指针异常的部分,就会一目了然。 public static...
  • BigDecimal divide异常

    2016-10-24 09:53:17
    异常报错信息:Non-terminating decimal expansion; no exact representable decimal result. java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result. 问题...
  • 先给你们写我的解决方式,造福伸手党: ...我没有证据是不是来自于这,堆栈信息其实并没有打印它,只打印到了`getConstructor`方法343行的异常. 所以,如果你有时间,并且感兴趣,找出原因,请回复我.
  • RuntimeException类以及子类 ArithmeticException—算术异常 NullPointerException—空指针异常 ArrayIndexOutofBoundsException—数组下标越界异常 ClassCastException—类型转换异常 NumberFomatException—数字...
  • toString是Object的方法,对象应该没有toString方法,为什么不报错?
  • 避免空指针的几个写法equalsObject的equals方法是方法是对称的,调用a....但是要注意a == null时会抛出空指针异常。例如:Object unknownObject = null;if(unknownObject.equals("knownObject")){}所以我宁愿把确定不...
  • 使用BigDecimal的divide报异常 图片: 出现这个的原因是BigDecimal的divide方法需要取具体的小数位。 解决方法如下:
  • java空指针处理

    2017-03-13 10:12:16
    Java 小技巧和在java应用避免NullPonintException的最佳方法在java应用程序中,一个NullPonintException(空指针异常)是最好解决(问题)的方法。同时,空指针也是写健壮的顺畅运行的代码的关键。“预防好过治疗”...
  • 在java应用程序中,一个NullPonintException(空指针异常)是最好解决(问题)的方法。同时,空指针也是写健壮的顺畅运行的代码的关键。“预防好过治疗”这句话也同样适用于令人不爽的NullPonintException。通过应用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,916
精华内容 1,566
关键字:

bigdecimal空指针异常