当前位置:广告 > 365问答 > j**a类中声明并构造自己
已有回答

j**a类中声明并构造自己

j**a类中声明并构造自己

class A{

        A  a = new A();

}

我晕了,想不明白。编译能过,运行不行。但是加个static或者不构造又可以运行。能好好说说到底怎么个回事吗?

 错误提示at FF.TTT.<init>(A.j**a:4)


LV 4天前

详细问题描述及疑问:期待您的答案,你就是当代的活雷锋,太感谢了 !

本页链接:http://365.yxad.com/q/1552573344217948/

满意答案

第1个回答:

LV4天前你的JDK是什么版本?你的程序当然编译有问题的,没有main而这个与声明并构造自己无关,以下程序可以编译运行的(JDK1.8.0_131)classA{Aa=newA();publicstaticvoidmain(String[]args){}}追问:你main里面加At=newA();看看。不行的。我知道没main。重点不是那个。追答:classA{publicstaticvoidmain(String[]args){Aa=newA();}}我的j**a下可以编译并运行追答:程序完全符合j**a语法,当然可以运行的,不知你问题出在哪追问:你那个是空类。classA{publicstaticvoidmain(String[]args){Aa=newA();}}你是不是被我绕晕了?追问:classA{Aa=newA();//这里publicstaticvoidmain(String[]args){At=newA();}}追答:你的这个的确有问题,是无限递归了错是报栈溢出,你的t调用A的构造,而构造中又调用A的构造,无限循环,最后导致了栈溢出你的确不能在类中直接调用本身的缺省构造的


第2个回答:

匿名网友LV3天前不是的,你可以选择不添加构造方法,因为j**a中默认的有一个构造方法,构造方法的使用与否全看你自己的操作需求,但是一旦你创建了构造方法,j**a虚拟机将不再采用默认的无参的构造方法,而使用你定义的构造方法


第3个回答:

匿名网友LV4天前说明是没由输入的对象,所以只是编译通过,运行无法通过的,望采纳


希望我的回答,能够帮助到你。
大家还关注
AD160-600