专栏首页KEN DO EVERTHINGjava面试| 精选基础题(3)

java面试| 精选基础题(3)

1.float f=3.4;是否正确?

答:不正确,编译无法通过。3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换float f =(float)3.4; 或者写成float f =3.4F;。(相关阅读:java"小心机"(1)【资源彩蛋!】第4点类型转换)

2.+=的隐式转换

例1:short s1 = 1; s1 = s1 + 1;有错吗?
例2:short s1 = 1; s1 += 1;有错吗?
  • 对于例1,编译不通过。由于1是int类型,因此s1+1运算结果也是int 型,需要强制转换类型才能赋值给short型。(相关阅读:java"小心机"(1)【资源彩蛋!】第5点类型提升)
  • 对于例2,可以正确编译.因为s1 += 1;相当于s1 = (short)(s1 + 1);编译器会自动隐式直接将+=运算符后面的操作数强制装换为前面变量的类型。

3.try{}里有一个return语句,代码执行顺序如何?

public class ReturnInTry {
    public static void main(String[] args){
       System.out.println(test());
    }

   static public String test(){
       String str = "return1";
        try{
            return str;
        }finally {
            str = "return2";
            System.out.println("finally");
        }
    }
}

输出:

finally
return1

由此可见,finally代码块中的代码会在return语句前执行,但为什么finally代码块中的str = "return2";未生效呢? 其实它这样执行的:当try中含有return语句且存在finally代码块,return语句不会立刻返回而是记录下该返回值(存在某个地方),待finally代码块执行完毕后再返回该值,所以在finally代码块中无法改变return的返回值。

4.for与foreach的区别

  • for 效率更高,可以在遍历的过程中对源数组或者集合进行修改
  • foreach 便捷简单;更安全 foreach实际上使用迭代器实现遍历的,其中会产生中间变量,导致性能的降低;foreach虽然能遍历数组或者集合,但是只能用来遍历,无法在遍历的过程中对数组或者集合进行修改

5.java的this关键字

  • 概念 this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。
  • 用法 1.普通的直接引用
public class ThisTest {
    public ThisTest retutrnThis(){
        //this相当于是指向当前对象本身
        //返回对象本身
        return this;
    }
}

2.形参与成员名字重名时,用this来区分

public class ThisTest {
    private String name;
    public void ThisTest (String test){
        this.test = test;
    }
}

3.引用构造函数

public class ThisTest {
    private String name;
    private int count;

    public void ThisTest (String test){
        this.test = test;
    }

    public void ThisTest (String test,int count){
         //调用另一个构造函数
        //只能在第一行调用,且只能调用一次
        this.ThisTest(test);
        this.count = count;
    }
}

6.java的super关键字

  • 概念 this和super很像,this指向的是当前对象本身,super指向的是当前调用对象的父类。子类创建对象时调用构造函数,会隐式调用父类的无参构造方法,创建一个子类对象的同时,该子类对象还包含了一个父类对象。该父类对象在子类对象内部(super指向该对象)。
  • 作用 1.主要存在于子类方法中,用于指向子类对象中父类对象。 2.访问父类的属性 3.访问父类的函数 4.访问父类的构造函数
  • 必须使用super的时刻 1.父类覆盖了无参构造函数时
public class Father {
 public String name;
 public Father(String name) {
  this.name = name;
 }
}

public class Son extends Father{
 public Son(String name) {
  //必须调用,否则他会默认调用父类的无参构造函数,
  //而父类的无参构造函数已经被有参的覆盖,所以找不到
  super(name);
 }
}

2.子类重写了父类的方法,又想用父类该方法时

class Parents{
    Public Parents(){}
    public void write(){
        System.out.println("Parents");
   }
}

class Children extends Parents{
    Public Children(){}
    public void write(){
        System.out.println("Children");
        super.write();//调用父类的write方法
   }
}

本文分享自微信公众号 - java从心(javaFollowHeart),作者:a丶ken

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-07-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 每日一题(15)

    你可能会认为程序会打印test.question.Question14 .class,但实际结果是 ////////////////////////.class

    KEN DO EVERTHING
  • 推荐几个高质量图片网站,再也不怕没图装X了

    Unsplash是一个免费高质量照片的网站,照片都是真实的摄影,照片分辨率也很大,全是生活中的景象作品,清新的生活气息图片可以作为桌面壁纸,也可以应用于文章配图...

    KEN DO EVERTHING
  • 每日一题(1)

    KEN DO EVERTHING
  • 判断目标函数的凹凸性

    于小勇
  • 单调栈-查找前/后第一个更大/小数

    执生
  • Github最全买房租房攻略,火了!

    Java小咖秀
  • HTML+CSS基础知识点简要汇总(思维导图)

    Mirror王宇阳
  • 36页PPT智能金融在客服机器人中台的落地实践

    肉眼品世界
  • Pulsar Flink 连接器的介绍与使⽤

    王知无
  • 11月10日,WeMap腾讯地图产业版发布会,邀你一起“创建世界”!

    ?

    腾讯位置服务

扫码关注云+社区

领取腾讯云代金券