空指针异常,是运行时异常,及时编写代码时出现了空指针异常,编译器(javac)
会编译通过不报错,但是运行时Runtime阶段会抛出NullPointException
(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
)
int[] array = null;
array.length;
也会抛空指针异常。
注:成员变量,引用类型的默认值为null
private static String str; (str = null,默认 )
private static Connection con ;(con = null,不写默认为null)
(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上,直接显示代码错误,提醒你)。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删