java比较难面试题(一)


                    

  题目二

   60. 运行以下程序,控制台将打印:?

 public   ExamTest {

                publicstatic void main(String[] args) {

                       System.out.println(newWolf("灰太狼",32.3));

                 }

      }

         class Animal{
              private String desc  ;
             public Animal(){

                      this.desc= getDesc();

                 }

                publicString getDesc(){

                      return"Animal" ;

                 }

                    public    String toString(){    、
                    return desc ;

                 }

     }

      class Wolf  extends Animal{  
                      private String name ;    
                      private double weight ;     
            publicWolf(String name , double weight ){

                   this.name= name ;

                      this.weight= weight ;

                 }

                publicString getDesc(){

                      return"Wolf[name=" + name + ", weight="+weight + "]" ;

                 }

} 

                     

      打印结果是:Wolf[name=null, weight=0.0]

                你猜对了吗。。。。。。。。。

               当然不能猜了,需要分析下才行,首先看main函数,这里有个输出语句,这个输出语句里面new 了个对象,下面看这个对象的构造方法(创建一个对象必须走这个

         方法),传入了两个参数,参数内容是 "灰太狼",32.3,但是,这时还没赋值,又要调用父类的构造方法,父类构造方法中又调用了getDesc()方法,注意子类复写父类方法

     因此此时调用的是子类方法,但是因为子类成员没有赋值,所以打印的是默认值,即null,和0.0,因此打印了结果了Wolf[name=null,weight=0.0],注意父类的toString()方法

                        

  


  

题目二.

              58阅读以下程序,运行结果为

   public classExamTest {  public static void main(String[] args) {  
                 new Derived(); 
 } 
}
    class Base{  
                private int i = 2 ; 
            public Base(){      
              this.display();
    } 
   public voiddisplay(){ 
           System.out.println(i);
   } 
  } 
class
          Derived extends Base{ 
          private int i = 22;  
          public Derived(){ 
      super();       
             i= 222 ; 
 } 
   public voiddisplay(){ 
         System.out.println(i);
   } 
} 

    

  打印结果为   :  0  ;

               自己看到这答案时也很诧异,但是仔细分析下知道原因,下面来分析下

                 首先通过 new Derived()创建子类对象,这时会调用空参的构造方法,然后执行父类的构造方法, 然后执行父类构        造方法 中this.display()方法,注意这个this指得是子类对象,即是你创建的对象 ,所以执行的子类的display()方法,思考下打印的i的值是什么能?此时Derived对象还未创建,属性还未赋值,Base对象也没没有创建成功,因为构造方法还未执行完,所以i也还没有赋值,综上所述,打印的结果是0,因为整型成员变量默认为0


        

   

题目三

                          61.运行下面的程序,控制台打印结果为


      

public class ExamTest { 
 	public static void main(String[] args) {  	 	
                        String s1 = "Hello World" ; 
	 	 	String s2 = "Hello " + "World" ; 
	 	 	String temp1 = "Hello " ; 
 	 	        String temp2 = "World" ;  	 	
                        String s5 = temp1 + temp2 ;  	 	
                        boolean flag1 = s1 ==s2 ;  	
                	boolean flag2 = s1==s5 ;  	 	
                        System.out.println("flag1:"+flag1); 
	 	 	System.out.println("flag2:"+flag2); 
	 	} 
} 
                  打印结果:  true|false

    

        

                   

s2和s1一样指向helloworld,但是,s5是s3和s4地址和,和s1是不同的

 

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值