Loading

Java基础的一些问题

1、空指针异常的常见情况

  a、方法返回的对象为null。

      b、a为封装类,如果a对象为null,a再与基本数据类型比较时会出异常。 

 

2、基本数据类型与其封装类的取舍

  a、方法的参数的类型使用时,我通常是使用基本数据类型,这样方法内就不需要考虑参数为null的情况,特殊情况除外。

  b、类中的属性,我通常是用的封装类,因为如果为基本数据类型,则属性就会有一个默认值,这种情况很难判断属性到底有没有赋值。

  c、jdk1.5及以上版本,基本数据类型可以与封装类自由转换,但要注意封装类为null时,是无法转换为基本类型的。

 

3、JsonObject进行格式化时,对象的属性值明明为null, json字符串的值却为0、false等

  JSON时有默认值,所以封装类的值为null是就会被转换为0、false等默认值。

 

4、Infinity 与 volatile

  在Java除法中,允许浮点数运算时除数为0,所得结果为Infinity,是无穷大的意思。例如:double d = 5.1/0 ;  这里d的值就是Infinity。

  volatile是一个类型修饰符(type specifier)。它是被设计用来修饰被不同线程访问和修改的变量。如果没有volatile,基本上会导致这样的结果:要么无法编写多线程程序,要么编译器失去大量优化的机会。

 

5、BigDecimal使用误区

  BigDecimal的加减乘除方法都是有返回值的,这个返回值就是计算的结果,所以必须用一个引用来接收返回值,仅仅调用 加add()、减subtract()、乘multiple()、除divide() 是不会将计算结果放入调用者的对象中的。必须接收返回值。

 

6、子类反射获取父类的属性

  Class类有一个方法getSuperclass(),我们通过此方法,递归向上寻找属性,代码如下:

 1     public Field getSuperField(Class<?> classes, String fieldName) {
 2         Field field = null ;
 3         while(! classes.equals(Object.class)) {
 4             try {
 5                 field = classes.getDeclaredField(fieldName) ;
 6             } catch (NoSuchFieldException e) {
 7                 //忽略在当前类中找不到该属性的异常
 8             }
 9             //向上寻找父类,直到Object.cass为止
10             classes = classes.getSuperclass() ;
11         }
12         return field ;
13     }

 

posted @ 2014-02-13 12:56  孤独的天  阅读(130)  评论(0编辑  收藏  举报