马上毕业,最近去了2次面试都是java的,有段时间没做java了,面试的也很是郁闷这道为其中之一,本人稍加修改只为娱乐 o(∩_∩)o 哈哈 高手勿笑
  import java.io.*;
  class A{
          private B  b = new B(); 
 public  class B{
 
   public void say(){
     
       System.out.println("im  b");
       
       b.say();
     }
  }
 
 public static void main(String[] args){
 
   B   b =  new A().new B();  
   b.say();
  }

     }运行结果   看完马上答出来 看是否与结果相同
答案是 將會無限的執行say訪法,答到這裡你可以答下一個問題了 引起的原因是什麼,存在多少個B類的對象
答案是 存在兩個B類的對象可以運行下面的來得出結果
import java.io.*;
class D{

        public  static  int num = 0;
 private B  b = new B();
 
 
 public  class B{
   private String who = "in";
    
   
   public B(){
     D.num += 1;
    };
   
   public B(String who){
   
       this.who = who;
       D.num += 1;
   
    }
   
     public void say(){
     
       System.out.print("im  b"+who +" "+D.num);
       
       b.say();
     
      }
  }
 
  public static void main(String[] args){
 
   
    D   a = new D();
    B   b =  a.new B("out");  
    b.say();
 


}

}

解决方案 »

  1.   

    我一直以为,写代码应该应用一些好的实践,尽量使代码清晰易懂,而不是抓住某个语言的特性写一些看起来很有技巧,其实烂透了的代码。
    楼主写这个娱乐尚可,如果工作中写出new A().new B()的代码,如果我是你的boss,你懂的。
      

  2.   

    我经常写 StringBuffer sb =new StringBuffer(); 
      

  3.   

    不知道为什么要出这样的题。
    我是出题人的BOSS的话 应该把他FIRE掉!
      

  4.   

    在内部类B里面调用“父类A”中的成员变量b时候,这段代码可以理解为
     public void say(){
                    
                     System.out.println("im  b");
                     
                     say(); //自己调自己,无限递归无出口
                }