查漏补缺15--java 中null 值的特征

package com.javabase.javabase.nullInJava;

import org.junit.Test;
import org.springframework.expression.spel.ast.NullLiteral;

/**
 * @Author ShawnYang
 * @Date 2019-10-18 18:06
 * @Description TODO
 * 修改人:
 * 修改时间:
 * 修改备注:
 */
public class NullInJavaTest {

//  ①null值大小写敏感
//    private String str= Null;
    private String str=null;

//  ② null 是任何引用类型的隐式初始默认值
    private String str2;
    private Integer integer;


//  ③ null 可以被赋值给任何引用类型,同时也可以将null转化成任何引用类型
    private String str3=(String)null;

    private Integer i=(Integer)null;

//  ④ null 不能赋值给基本类型变量
//  ⑤ 引用类型变量为null,通过自动拆箱把引用类型变量变为基本类型变量,会报空指针异常
// 特别是在map结构中 k v 都是包装对象,当遍历时,赋值给基本对象,如果k 或 v 是null 会抛出空指针异常

//    int a=i;//此时会编译不通过


//  ⑥ null不是任何一个类型的子类
    @Test
    public void test(){
//        System.out.println(str);
        System.out.println(integer);
//        System.out.println(a);
        System.out.println(i instanceof Integer);//⑥ false
    }
}

//  ⑦ 可以将null 传递给方法的引用类型入参

//  ⑧ 可以使用== 和!= 来比较null值,不能使用其他算法或者大于小于等逻辑操作
// 最好使用null值在前(null == something/null != something),容易发现异常,少用something == null/something != null
// 也可使用equals 进行比较 同样null 最好放在前面

// ⑨ 使用一个值为 null 的引用类型变量调用非静态方法,会抛出空指针异常,但是可以 使用一个值为 null 的引用类型变量调用静态方法,因为静态方法
//使用静态绑定(在对象创建之前就已经绑定了),不会抛出空指针异常。
public class ceshi{
  public static void main(String args[]){
      ceshi myObject = null;
      myObject.iAmStaticMethod();
      myObject.iAmNonStaticMethod();                             
   }
 
   private static void iAmStaticMethod(){
        System.out.println("I am static method, can be called by null reference");
   }
 
   private void iAmNonStaticMethod(){
       System.out.println("I am NON static method, don't date to call me by null");
   }
}

运行结果:

I am static method, can be called by null reference
Exception in thread "main" java.lang.NullPointerException
        at ceshi.main(ceshi.java:6)

我们可以看到对象完全没有实例化但是却正常的执行了其静态的方法,这其实也不奇怪,静态方法完全可以使用类名直接使用,只不过绕了个弯,编译器,所以不足为奇。

与null 最常见的异常:java.lang.NullPointerException
引发这个异常的情况有:

调用 null 对象的实例方法
访问或修改 null 对象的属性
将 null 作为一个数组,获得其长度
将 null 作为一个数组,访问或修改其时间片
将 null 作为 Throwable 值抛出

参考:null值你要知道的9件事
java中的null值和sql中的null值

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值