文章目录
- 1. 场景案例
- 2. 针对于空指针的场景,有哪些方式可以避免问题
1. 场景案例
package com.gblfy;import org.springframework.beans.factory.annotation.Autowired;import javax.servlet.http.HttpServletRequest;/*** 理解什么是空指针*/
public class WhatIsnpe {@Autowiredprivate HttpServletRequest request;//定义一个User对象public static class User {private String name;private String[] address;public void print() {System.out.println("this is User class!");}public String readBook() {System.out.println("this is readBook method!");return null;}}//定义一个自定义异常public class CustomException extends RuntimeException {}public static void main(String[] args) {
// 第1种场景:调用空对象的实例方法User user=null;user.print();// 第2种场景:访问了空对象的属性
// User user=null;
// System.out.println(user.name);// 第3种场景:当数组是一个空对象的时候,取它的长度
// User user = new User();
// System.out.println(user.address.length);// 第4种场景:null 当做Throwable 的值
// CustomException exception=null;
// throw exception;// 第5种场景:方法的返回值是 null,调用方直接去使用
// User user = new User();
// System.out.println(user.readBook().contains("mysql"));}
}
// 由于疏忽造成空指针问题//1.直接打印的时候System.out.println(request.getParameter("username"));//修改成if (request.getParameter("username")){System.out.println(request.getParameter("username"));}else {throw exception;}//2.给对象重新赋值又调用User user = new User();Tools tools = new Tools();//这里getUser()方法有可能返回值是null 最简单直接return null即可user= tools.getUser();user.print();//修改成user= tools.getUser()==null?new User():tools.getUser();
2. 针对于空指针的场景,有哪些方式可以避免问题
使用之前一定要下初始化,或者检查是否初始化
尽量避免在函数中返回NULL,或给出详细的注释(良好的编程习惯)
外部传值,除非有明确的的说明(非NULL),否则,一定要及时判断