java声明一个对象后(未实例化)就在栈内存中开辟了一个类似指针的空间(引用),里面值为NULL ,一旦实例化后 就在堆内存开辟一个空间 存放类实例的一些信息(变量),然后将栈内存的NULL改为 该堆内存的首地址。以上是JAVA类实例化的内存分配过程。 public class MZZ { public static void main(String [] args) { People p = null; p.run(); } class People { public void run() { System.out.println("People run"); } } }
举例: String s = new String() 在这里 s 就是String的引用, 而new String() 表示String类对象的实例.. s =null; 表示对象的引用为空 ; 这时候,如果调用 s.length(); 就会抛出空指针异常
package Test;public class Test { public void a(){ System.out.println("一个方法"); } } package Test;public class ShowTest { /** * @param args */ public static void main(String[] args) { //声明一个没有引用实体对象的对象(变量), Test s;//在这里S已经存在于栈空间中,但是并没有指向堆空间中的某个实体对象这里的S可以说是没有引用实体的对象,空对象;
s=new Test();//new Test()方法,这里在堆空间中生成一个对象,s=把这个对象和S关联起来 //也就是把s变量的地址指向 new Test 对象 这个语句以后s就是有引用对象的变量了 s.a(); /** * 当堆空间中的这个实例对象new Test()不在被s引用并且没有任何在栈空间的空对象引用它时,它就会被销毁 */ } } 没有实体的对象称为空对象(刚声明的对象就是空对象),空对象不能使用。如果使用空对象(如对象.变量或对象.方法)就会报空指针。当然,上面例子中可能有些词不准确,也只是便于理解
应该是 只是建了个空的对象 Person ps=null;
public class NullObject { private String a; public static void main(String[] args){ System.out.println (a); } }
System.out.println(str.length());
这样就会报空指针异常.String str="";
System.out.println(str.length());
这样就不会.
People p;
p.speak();
如果是类的成员变量在类加载事会将p初始化为null所有继承自Object的都是对象
strb.append();
p.speak();
创建对象就一定要给对象初始化,即使初始化为空值。不然java virtual mathine是编译不了的。
2、String str=null; //表示str引用的对象是null值,也可以引用的是空对象
3、String str=""; //表示str只是作为一个空字符串,是存放在字符串缓冲池里的!
什么叫没实体的对象?我理解的空对象是指对象属性的内容为空,如String str = "";
String str=null;
String abc=str;
这个算引用空对象吧?
当depart 不存在 我怎么表示。。求解求解
(上级部门不存在给它一个值怎么表示啊)
因为s1,s2指向的不是同一个对象.
String str1 = "";以上是空的引用
UserInfo userInfo=null;
UserInfo user=userInfo;
这样是不会出错的;
而:
UserInfo userInfo=null;
String s=userInfo.getName();
这样是肯定错误的;
也就是“把空对象赋给别的对象不会错”,但是如果你想要“使用空对象的方法”,就肯定会抛出异常。
public class MZZ
{
public static void main(String [] args)
{
People p = null;
p.run();
}
class People
{
public void run()
{
System.out.println("People run");
}
}
}
public void a(){
System.out.println("一个方法");
}
}
package Test;public class ShowTest { /**
* @param args
*/
public static void main(String[] args) {
//声明一个没有引用实体对象的对象(变量),
Test s;//在这里S已经存在于栈空间中,但是并没有指向堆空间中的某个实体对象这里的S可以说是没有引用实体的对象,空对象;
s=new Test();//new Test()方法,这里在堆空间中生成一个对象,s=把这个对象和S关联起来
//也就是把s变量的地址指向 new Test 对象 这个语句以后s就是有引用对象的变量了
s.a();
/**
* 当堆空间中的这个实例对象new Test()不在被s引用并且没有任何在栈空间的空对象引用它时,它就会被销毁
*/
}
}
没有实体的对象称为空对象(刚声明的对象就是空对象),空对象不能使用。如果使用空对象(如对象.变量或对象.方法)就会报空指针。当然,上面例子中可能有些词不准确,也只是便于理解
Person ps=null;
public static void main(String[] args){ System.out.println (a);
}
}