概述
题目二
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是不同的
最后
以上就是欣喜过客为你收集整理的java最难面试题_java比较难面试题(一)的全部内容,希望文章能够帮你解决java最难面试题_java比较难面试题(一)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复