对象和类之间的区别

时间:2014-01-07 08:52:48

标签: java

假设我们这个类没有任何构造函数和实例变量

public class ConsoleWriter{
  public void write(){
    System.out.println("Console Writing...");
  }
}

你有另一个类App有2个变量console和console1

public class App{
   ConsoleWriter console;
   ConsoleWtiter console1=new ConsoleWriter();
}

现在我知道console1是ConsoleWriter的对象,而console只是ConsoleWriter的引用类型。

有这种情况时(没有构造函数,没有实例变量)

有什么区别?

如果我们可以使用console1来创建对象console,它将如何有用呢。

console.write();//would output Console Writing...
console1.write();//would output Console Writing...

8 个答案:

答案 0 :(得分:4)

console1 is an object of ConsoleWriter

不正确它是指向ConsoleWriter类型的Object的引用。由于未初始化,它将指向null。此外,由于未初始化,您无法调用此方法。

console.write();//would output Console Writing...

这也是不正确的。必须先进行初始化。

ConsoleWtiter console1=new ConsoleWriter();

这相当于

ConsoleWtiter console1;

创建一个引用,指向ConsoleWriter类的Objects /实例。由于它是一个实例变量,因此它被赋予默认值,即null。

console1 = new ConsoleWriter();

此时,引用控制台实际上指向了ConsoleWriter类的Object。只有在这之后(初始化),你才能调用类的方法。

答案 1 :(得分:2)

“现在我知道console1是ConsoleWriter的对象,而console只是ConsoleWriter的引用类型。” - 错了。 console和console1都是引用..不同之处在于console1指向ConsoleWriter对象,而console不指向任何东西。

因此。 console.anyFunction()会给你一个异常(NulPointerException),因为console没有初始化,而console1.someFunction()将作为console1指向ConsoleWriter对象。

答案 2 :(得分:1)

请参阅JLS

  

对于所有引用类型(§4.3),默认值为null。

所以当你写:

ConsoleWriter console;
console1.write();

就像写作:

null.write();  //Will throw NullPointerException

另一方面,当你这样做时:

ConsoleWriter console1=new ConsoleWriter();

然后您构建类型为ConsolWriter的新对象

答案 3 :(得分:1)

你真的需要知道声明,实例化和初始化对象

之间的区别
ConsoleWriter console;
ConsoleWiter console1=new ConsoleWriter();

不,以下行是错误的

console.write();//would output Console Writing...
console1.write();//would output Console Writing...

你在第一行遇到NullPointerException。

你没有初始化它,现在它保持默认值null

第二行执行write()方法的位置。为了进一步使用它,你必须初始化它。

推荐:Declaring, Instantiating and Initializing an Object

答案 4 :(得分:1)

console.write();会给你运行时异常,很可能是空指针异常

但是

 ConsoleWtiter console1=new ConsoleWriter();
console1.write();

会给你

Console Writing...

答案 5 :(得分:1)

console不可用。这不是ConsoleWriter;它是空的。如果你试图调用它的方法,你将得到一个NullPointerException。这不是C ++,其中

ConsoleWriter console;

构建ConsoleWriter

答案 6 :(得分:1)

  

现在我知道console1是ConsoleWriter的对象

没有。 console1是对ConsoleWriter的引用,它不是null,因为您已将其初始化。

  

虽然console只是ConsoleWriter的引用类型。

正确。 console1是对ConsoleWriter的引用,它为null,因为您没有初始化它。

  

有什么区别?

不同之处在于你没有初始化其中一个。

答案 7 :(得分:0)

没有指定构造函数的任何class始终具有您可以使用的默认构造函数。在你的情况下,这是:

public class ConsoleWriter{
  public ConsoleWriter(){
  }
}