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

天天进步一点点,距离大腿又近一步!
阅读本文大概须要6分钟

系列文章
java面试| 精选基础题(1)
java面试|精选基础题(2)java

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");        }    }}

输出:数组

finallyreturn1

因而可知,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方法   }}

热门阅读:this

**实用代码|javaMail发送邮件(文末重磅资源!)
【推荐两款神器】不限速下载、追剧神器
java"当心机"(1)【资源彩蛋!】**spa


**一个立志成大腿而天天努力奋斗的年轻人
期待你的到来!**指针

微信公众号,java从心

若是以为文章不错,请点个赞、分享给你的朋友呗!

相关文章
相关标签/搜索