假设我们这个类没有任何构造函数和实例变量
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...
答案 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()
方法的位置。为了进一步使用它,你必须初始化它。
答案 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(){
}
}