黑马程序员技术交流社区

标题: 构造方法可不可以使用递归算法 [打印本页]

作者: lixiuliang    时间: 2014-2-9 14:33
标题: 构造方法可不可以使用递归算法
传智播客入学测试第41题
作者: lixiuliang    时间: 2014-2-9 14:35
class MyClass {

        private MyClass(int num) {
                if ((num++) < 5) {
                        System.out.println(num);
                        new MyClass(num);
                }
        }

        public static void main(String[] args) {
                new MyClass(0);
        }
}

这样算不算是构造方法的递归调用?运行结果
1
2
3
4
5

作者: wq10zj    时间: 2014-2-9 15:02
本帖最后由 wq10zj 于 2014-2-9 15:08 编辑

// 算是递归调用吧  个人理解  不知道是不是这样


YouClass{
  YouClass()
   {
     
    }   YouClass(int num)
   {
      this.num=num;
    }
  
}

class MyClass extends YouClass{

             MyClass (int num) {
                if ((num++) < 5) {
                        System.out.println(num);
                                              // this();//这里也是用到递归 使用的父类的无参构造方法
                     
                        //这里不是可不可以的问题  而是需不需要的问题  这样创建的多个实例占内存  
                       //new MyClass(num);
                        
                        this(num);//用到递归 使用的父类的有参构造方法
                        num++;//这样也可以
                       
                }
        }

        public static void main(String[] args) {
                new MyClass(0);
        }
}


作者: lixiuliang    时间: 2014-2-9 18:08
wq10zj 发表于 2014-2-9 15:02
// 算是递归调用吧  个人理解  不知道是不是这样

程序是错的,但把你的程序调试了一遍终于知道为什么不能递归调用构造方法了。谢谢哈!
作者: lostom    时间: 2016-7-1 21:46
public class MyClass {

        public static void main(String[] args){
                S s = new S(100);
                S[] ss = s.getS();
                for (S s2 : ss) {
                        System.out.println(s2.getx());
                }
                System.out.println(ss.length);
        }
}
class S {
        static S[] s = new S[10];
        static int i = -1;
        int x= 0;
        public S( int x){
                this.x = x;
                if(i<9 && i>=0){
                        i++;
                        s[i]= new S(i);
                }else if(i==-1){
                        i++;
                        s[i] = this;
                        new S(i);
                }
        }
        public S[] getS(){
                return s;
        }
        public int getx(){
                return x;
        }
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2