null含义
在java中,null值表示引用不指向任何对象。在运行过程中系统发现使用了这样的引用时可以立即终止进一步的访问。
- 如果是对象的field的话系统在初始化对象的时候会将那些对象的值赋为null。
- 方法内变量,程序员需要自己给变量初始化为null
【对于field字段的链接在学完反射后在此处添加】
1 classT{
2 Object obj = null;
3 Object obj1;//系统在初始化的时候自动给它赋null
4}
5 class T{
6 public void x(){
7 Object obj = null;//这个需要程序员自己来完成
8 }
9}
(也就是所谓的类中变量不用初始化,方法中局部变量必须初始化)
@@@@@对空对象不能调用非静态方法属性的描述
空对象也是对象,同样通过对象名引用方法或者属性,但是和一般的
对象有点不同。
一般的java对象分为属性,方法和储存空间,若一个对象的属性和方法
为空则可以看做是一个空对象。
@@!空对象调用非静态方法会出现空指针异常:
Exception in thread “main ” java.lang.NullPointetException
这是因为一个null对象中自身储存空间内饰没有任何方法和属性的,所
以任何空对象.xxx调用非静态方法或属性都会出现空指针异常
但空指针可以调用静态方法和属性,具体代码在下:
public class 空指针{
static int id = 0;
public static void main(String[]args){
//(空指针)null将无类型的对象null强制转换成为空指针类的对象
System.out.prinltn("获取静态属性id的值"+((空指针)null).id);
//空对象调用静态属性
((空指针)null).test();//空对象调用静态方法
}
以上代码去掉static关键字后,程序不会报错(说明实例化null转为空指针对象没有问题),但运行时会报出空指针异常(说明实例化后的空间里面没有方法和属性。)
图片摘自https://blog.csdn.net/lgh2691861/article/details/52248038
系木见告先生博客中的部分内容,侵权必删。
@另,非空对象可以被强转为父类对象,调用的方法仍为重写后的方法
但是转化为非父类对象会报错
继续
- null是代表不确定的对象
java中,null是一个关键字用来标识一个不确定的对象,因而可以将
null赋给引用类型变量,但是不能赋给基本类型变量
比如 int a = null;(错误)。 Object o = null(正确)
Java中所有的变量遵循一个原则:先定义,且初始化后,才可以使用。
有时候可以给变量指定一个null的值,以免报错(程序有可能在try语句块中初始化值。)
例:
Connection conn = null;
try {
conn = DdriverManager.getConnection("url","user","password");
}catch(SQLException e){
e.printStarkTrace();
}
- null本身不是对象,也不是Object的实例
虽然null能代表一个不确定的对象,但null字段本身不属于对象
也不是java.lang.Object的实例
//null是否为对象,属于Object类型
if (null istanceof java.lang.Object){
System.out.println("null属于java.lang.Object类型");
}else{
System.out.println("null不属于java.lang.Object类型");
}
结果输出:null不属于java.lang.Object类型
- Java默认给变量赋值
在定义变量的时候,如果的定义后没有给变量赋值,则java在运行的时候会自动给变量赋值。
整数型:0
浮点型:0.0
布尔型:false
其他引用类型:null
-容器与null
List:允许重复元素,可以加任意多个null
Set:不允许重复元素,最多可以加入一个null
Map:Map的key最多可以加入一个null,value字段没有限制
数组:基本类型数组,定义后不给定初始值,java自动赋值。
引用类型数组,不给定初始值,则所有元素值为null
- null的其他作用:
- 判断一个引用类型数据是否为null。可以用==判断
- 释放内存,让一个非null引用类型变量指向null。这样这个对象就不再被任何对象引用。等待JVM去回收。