[英]Difference between Object and Class
可以说我们有没有任何构造函数和实例变量的此类
public class ConsoleWriter{
public void write(){
System.out.println("Console Writing...");
}
}
并且您有另一个具有两个变量console和console1的类App
public class App{
ConsoleWriter console;
ConsoleWtiter console1=new ConsoleWriter();
}
现在,我知道console1是ConsoleWriter的对象,而console只是ConsoleWriter的引用类型。
遇到这种情况时(没有构造函数,没有实例变量)
有什么区别 ?
或者如果我们可以使用console
创建对象console1
话,它将有什么用。
console.write();//would output Console Writing...
console1.write();//would output Console Writing...
console1 is an object of ConsoleWriter
它是不正确的引用,它将指向ConsoleWriter类型的对象。 由于未初始化,因此它将指向null
。 此外,您还无法对此进行调用,因为它尚未初始化。
console.write();//would output Console Writing...
这也是不正确的。 必须先初始化。
ConsoleWtiter console1=new ConsoleWriter();
这相当于
ConsoleWtiter console1;
它创建一个引用,该引用将指向类ConsoleWriter的对象/实例。 由于它是一个实例变量,因此被分配了默认值,即null。
console1 = new ConsoleWriter();
此时,参考控制台实际上指向ConsoleWriter类的Object。 只有在此(初始化)之后,您才能调用该类的方法。
“现在我知道console1是ConsoleWriter的对象,而console只是ConsoleWriter的引用类型。” 错了 console和console1都是引用。区别在于console1指向ConsoleWriter对象,而console不指向任何对象。
所以。 console.anyFunction()会给您一个异常(NulPointerException),因为未初始化console,而console1.someFunction()将作为console1指向ConsoleWriter对象的指针而工作。
您确实需要知道声明,实例化和初始化对象之间的区别
ConsoleWriter console;
ConsoleWiter console1=new ConsoleWriter();
不,以下几行是错误的
console.write();//would output Console Writing...
console1.write();//would output Console Writing...
您将在第一行中遇到NullPointerException。
您无需初始化它,现在它保留默认值null
。
第二行执行write()
方法。 为了进一步使用它,您必须对其进行初始化。
console.write();
将为您提供运行时异常,很可能是空指针异常
但
ConsoleWtiter console1=new ConsoleWriter();
console1.write();
会给你
Console Writing...
console
不可用。 它不是ConsoleWriter
; 它是空的。 如果尝试调用其方法,则会收到NullPointerException。 这不是C ++,
ConsoleWriter console;
构造一个ConsoleWriter
。
现在我知道console1是ConsoleWriter的对象
号console1
是一个参考ConsoleWriter
这是不是空的,因为你初始化它。
而console只是ConsoleWriter的引用类型。
正确。 console1
是对ConsoleWriter
的引用,该引用为null,因为您没有初始化它。
有什么区别 ?
不同之处在于您没有初始化其中之一。
任何未指定构造函数的class
都始终具有您可以使用的默认构造函数。 您的情况是:
public class ConsoleWriter{
public ConsoleWriter(){
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.