通过new代码字实例化对象时,会分配堆上的空间(用于存储对象及其字段的系统内存部分),并执行构造函数。在这种情况下,构造函数在标准输出上写入,无论是否为对象创建引用,都会执行此操作。
之后,你是对的,无法访问该对象,因为不存在对它的引用。因此,垃圾收集器最终会释放内存空间。
就像亚当所说的那样,这通常是不鼓励的,因为它会让你的期望变得混乱,构造函数应该初始化对象,并且应该可以通过它的方法与外部世界进行交互。
因此,即使它更长一点,更好的结构化代码可能看起来像这样:
class TestCode {
public TestCode() {}
public void welcome() {
System.out.println();
System.out.println("Welcome to the Program");
}
public static void main( String args[] ){
TestCode tc = new TestCode();
tc.welcome();
}
}附:当然,在某些情况下,您可能希望在每次实例化时都在实例外部进行操作,例如保留类的所有实例的静态列表,并因此在每次构造时向其添加特定实例。尽管如此,最好创建一个私有的init()方法并从构造函数中调用它,以便更好地分离具有不同功能的元素。
作为另一个例子,这里是一个不同的,功能相同的方式你的代码可以重新制定:
class TestCode {
public TestCode() {
init();
}
private void init() {
System.out.println();
System.out.println("Welcome to the Program");
}
public static void main( String args[] ){
TestCode tc = new TestCode();
// Or simply: new TestCode();
}
}