怎么理解在java类中实例化自己

不明白为什么类自身的实例化对象能作为类的属性出现,另外下面的代码为什么会报错?

package com.sdb.test;

public class Test1 {
    public Test1 t1 = new Test1();
    public void m1() {
        System.out.println(t1);
    }
    
    public static void main(String[] args) {
        Test1 tt = new Test1();
        tt.m1();    
    }
}

能作为属性出现其实很正常啊,但有风险,比如说你现在的报错就是自身作为属性间接导致的。在创建一个Test1对象时,Test1下的属性也要实例化一个Test1,紧接着这一个Test1又要实例化另一个Test1,导致这个程序一直无限的实例化Test1对象,导致内存溢出而报的错。自身作为属性出现时,不应该直接在属性上实例化