当前位置:编程学习 > JAVA >>

java中的空对象

只用对象的引用,而不存在引用的实体对象 就叫做空对象 
可不可以用一小段代码来举一下例子 --------------------编程问答-------------------- String str=null;
System.out.println(str.length());
这样就会报空指针异常.

String str="";
System.out.println(str.length());
这样就不会.
--------------------编程问答-------------------- 你说的不是空对象,而是空引用,对象哪里会来空的!!!! --------------------编程问答-------------------- 没有实体的对象称为空对象,老兄是你忘了吧 --------------------编程问答-------------------- 1楼应该是正确的 --------------------编程问答-------------------- 那这种算不算空对象呢 还有String 类型呢 还是算类呢
People p;
p.speak(); --------------------编程问答-------------------- Model model = null; --------------------编程问答-------------------- --------------------编程问答--------------------
引用 5 楼 ykswz2 的回复:
那这种算不算空对象呢 还有String 类型呢 还是算类呢
People p;
p.speak();

这样写在方法内会直接报编译异常的
如果是类的成员变量在类加载事会将p初始化为null

所有继承自Object的都是对象 --------------------编程问答-------------------- StringBuffer strb=null
strb.append(); --------------------编程问答--------------------
引用 5 楼  的回复:
那这种算不算空对象呢 还有String 类型呢 还是算类呢
People p;
p.speak();

-----------------

People p = null;
p.speak();
创建对象就一定要给对象初始化,即使初始化为空值。不然java virtual mathine是编译不了的。 --------------------编程问答--------------------   1、String str=new String(); //表示str对String 对象的引用,new String()表示是str的实体对象


  2、String str=null; //表示str引用的对象是null值,也可以引用的是空对象

  
  3、String str=""; //表示str只是作为一个空字符串,是存放在字符串缓冲池里的!

--------------------编程问答--------------------
引用 3 楼  的回复:
没有实体的对象称为空对象,老兄是你忘了吧


什么叫没实体的对象?我理解的空对象是指对象属性的内容为空,如String str = ""; --------------------编程问答-------------------- 太高级了,看不懂啊。。。 --------------------编程问答-------------------- ""这个好歹是个string类型,怎么会木有属性呢?
String str=null;
String abc=str;
这个算引用空对象吧? --------------------编程问答--------------------
引用 11 楼  的回复:
1、String str=new String(); //表示str对String 对象的引用,new String()表示是str的实体对象


  2、String str=null; //表示str引用的对象是null值,也可以引用的是空对象

  
  3、String str=""; //表示str只是作为一个空字符串,是存放在字符串缓冲池里的!
  空对象这个术语,本身就有问题把! --------------------编程问答-------------------- 2楼说的对 --------------------编程问答-------------------- Department depart  这样的定义
当depart 不存在  我怎么表示。。求解求解


(上级部门不存在给它一个值怎么表示啊) --------------------编程问答-------------------- 我觉得11楼讲的非常好,比方说String s1="A",String s2="A";那s1==s2成立,因为s1,s2放在dataSegment中.而String s1=new String("A"),和String s2=new String("A");s1!=s2;
因为s1,s2指向的不是同一个对象. --------------------编程问答-------------------- 没有实体的对象。是没有new的对象



String str = null;
String str1 = "";

以上是空的引用 --------------------编程问答-------------------- 假如:
UserInfo userInfo=null;
UserInfo user=userInfo;
这样是不会出错的;
而:
UserInfo userInfo=null;
String s=userInfo.getName();
这样是肯定错误的;
也就是“把空对象赋给别的对象不会错”,但是如果你想要“使用空对象的方法”,就肯定会抛出异常。 --------------------编程问答-------------------- 举个例子吧,一个足球运动员是一个对象,而它的球衣号码是引用,
所以,只存在对象的引用,也就是球员的号码
,,,
而所谓“不存在引用的实体对象”,意思就是说,球衣号码仅仅是一个代表球员的数字,,永远不会是“球衣号码是球员” --------------------编程问答-------------------- 空对象就是空引用,在Java中的数据类型中,null为空类型,将null赋值给引用变量,该应用变量就是空对象,也即空引用 --------------------编程问答-------------------- 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");
}
}
} --------------------编程问答--------------------
引用 23 楼  的回复:
java声明一个对象后(未实例化)就在栈内存中开辟了一个类似指针的空间(引用),里面值为NULL ,一旦实例化后 就在堆内存开辟一个空间 存放类实例的一些信息(变量),然后将栈内存的NULL改为 该堆内存的首地址。以上是JAVA类实例化的内存分配过程。
 public class MZZ
{
public static void main(String [] args)
{
Peopl……

正解 --------------------编程问答-------------------- 举例: String s = new String() 在这里 s 就是String的引用, 而new String() 表示String类对象的实例..  s =null; 表示对象的引用为空 ; 这时候,如果调用 s.length(); 就会抛出空指针异常 --------------------编程问答--------------------
引用 23 楼  的回复:
java声明一个对象后(未实例化)就在栈内存中开辟了一个类似指针的空间(引用),里面值为NULL ,一旦实例化后 就在堆内存开辟一个空间 存放类实例的一些信息(变量),然后将栈内存的NULL改为 该堆内存的首地址。以上是JAVA类实例化的内存分配过程。
 public class MZZ
{
public static void main(String [] args)
{
People……

 执行层 堆空间 栈空间
只能意会,不能言传…… --------------------编程问答-------------------- 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引用并且没有任何在栈空间的空对象引用它时,它就会被销毁
 */
}
}


没有实体的对象称为空对象(刚声明的对象就是空对象),空对象不能使用。如果使用空对象(如对象.变量或对象.方法)就会报空指针。当然,上面例子中可能有些词不准确,也只是便于理解 --------------------编程问答--------------------
引用 11 楼  的回复:
1、String str=new String(); //表示str对String 对象的引用,new String()表示是str的实体对象


  2、String str=null; //表示str引用的对象是null值,也可以引用的是空对象

  
  3、String str=""; //表示str只是作为一个空字符串,是存放在字符串缓冲池里的!

赞一个! --------------------编程问答-------------------- 应该是 只是建了个空的对象 
Person ps=null; --------------------编程问答-------------------- public class NullObject {

 private String a;
 public static void main(String[] args){

  System.out.println (a);
}
} --------------------编程问答--------------------
引用 20 楼 SmallYamateh 的回复:
假如:
UserInfo userInfo=null;
UserInfo user=userInfo;
这样是不会出错的;
而:
UserInfo userInfo=null;
String s=userInfo.getName();
这样是肯定错误的;
也就是“把空对象赋给别的对象不会错”,但是如果你想要“使用空对象的方法”,就肯定会抛出异常。

假如对象是从数据库中查出来的,必须这样引用,而查出来的对象刚好是空的,引用时抛空指针异常,如何处理? --------------------编程问答-------------------- 除
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,