空指针异常处理:NullPointException详解

空指针异常 NullPointException

空指针异常,是运行时异常,及时编写代码时出现了空指针异常,编译器(javac)
会编译通过不报错,但是运行时Runtime阶段会抛出NullPointException

一.空指针异常可能的情况

1.调用null对象的实例方法

(1).比如数据库连接时:

	Connection con = DriverManager.forName(url,root,password);	

当url对应端口号、root用户、passwowd密码,有一个不正确时,数据库都不会正确连接,c数据库连接对象con可能为空(null);

所以,若con为空时,调用数据库连接对象的close()方法就会抛出空指针异常

	con.close()

(2).比如String中对象为空时:

	String str = null;

当执行String类的length()方法时,Str为null,没有长度,也会抛出空指针异常

	str.length()

String补充知识:

1).String str = “abcd”;这不叫赋值!

	String str = "abcd";

	String str = new String("abcd");

这两种写法,效果一样,都是new了一个String类对象str,即在堆内存中开辟了一个新的空间。

2).String类的源码为:

	public final class String{

	}	

所以,String中每次new(可以等价为1)中的 = 号类型),都是开辟了一个新的内存,都有一个新的内存地址。

	String str = "abcd";	

内存中,分配给str对象的内存地址(比如0X666),str对象,指向该内存地址。

	str = "xyz";

内存中,又新分配给str一个新的内存地址(比如0X999
)

2.将null作为数组,访问其长度

	int[] array = null;

	array.length;

也会抛空指针异常。

注:成员变量,引用类型的默认值为null

	private static String str; (str = null,默认	)

	private static Connection con ;(con = null,不写默认为null)

一.解决办法:良好习惯

1.学会提前判断

(1).比如,调用数据库对象con的close()关闭资源的方法,因为con可能因为连接失败而为创建,若未创建就没有关闭资源的必要。

	if(con != null){
		con.close();
	}

(2).再比如:

	String str = new Scanner(System.in).nextLine();	

1).提前判断是否为空:

	if(str != null){
		int len = str.length()
	}

2).变量放在前边

	String str = null;	
 	str.equals("faker");

此时,编译不会报错,但是运行时抛空指针异常;

	String str = null;
	"Faker".equals(str);

这种变量放在前面的写法,若str = null,则编译器连编译都不会通过(比如你在eclipse上,直接显示代码错误,提醒你)。


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空