持续更新Java面试题(二)

本文详细解析了Java中的逻辑与(&&)的短路特性,位运算符(>>和<<)的应用,Math.round的四舍五入规则,重写与重载的区别,以及抽象类、接口和构造器的相关概念。
摘要由CSDN通过智能技术生成

11、&和&&的区别

        &运算符有两种用法:(1)按位与,(2)逻辑与。这里只说逻辑与,按位与会放到位运算解释。&和&&都表示和,但是使用&时,&两边都要进行判断;而使用&&时,只要左边为false则直接返回false,相当于“短路”,所以&&称为“短路与”。&&会减少判断的次数,也可以用在特定的场景,例如:list != null && list.size() != 0;这个时候,想要进行&&右边的判断,必须保证左边成立,这也是&&最常用的用法。

12、>>和<<的用法

        这两个都是位运算,分别表示右移三位和左移三位,是二进制的运算,例如:2<<3,相当于2乘以2的三次方,二进制表示为000010变为了010000,转换成十进制就是2变为16;右移相当于除以2的三次方,会丢失精度。例如:ArrayList的扩容grow方法:newCapacity = oldCapacity + (oldCapacity >> 1),当oldCapacity=15时,oldCapacity >> 1就是从001111变为了000111,也就是15变为了7。此处一定注意!

13、Math.round(1.5)等于多少,Math.round(-1.5)呢

        Math.round(1.5)的返回值是2,Math.round(-1.5)的返回值是-1。这个四舍五入的原理是在参数上加0.5再向下取整。

14、重写(override)和重载(overload)的区别是什么

        重写发生在子父类之间,判断条件是方法名、参数列表都相同,返回值类型小于等于父类;重载发生在一个类中,判断条件是方法名相同,参数列表不同(参数类型、个数不同或两者都不同)。注:返回值类型不能用来判断是否是重载,因为返回值类型是方法运行后的状态表达,而在编译过程中,更在意的是语法是否通顺,返回值类型的定义不定义和使用不使用无必然联系,定义了在某种场景下也可能不会使用,假如这时还有一个本来就无返回值的方法,那编译器就判断不了调用的是哪个方法,这样就会产生歧义,为了避免这种歧义发生,就设定规则,仅用返回值类型不能区分重载。

15、构造器是否可以被重写

         构造器不能被继承,也就不能被重写,但可以重载。

16、抽象类和接口有哪些区别

  • 抽象类用abstract修饰,接口用interface修饰;
  • 抽象类被子类继承,接口被子类实现;
  • 抽象类可以定义构造器,接口不可以;
  • 抽象类可以定义成员变量,接口只能定义常量;
  • 抽象类中的成员可以被任意权限修饰符修饰,接口只能是public;
  • 抽象类有抽象方法和普通方法,接口只有抽象方法(JDK1.8之后加入了默认方法和静态方法)。

17、抽象方法是否能被static修饰,是否可同时是本地方法,是否能被synchronized修饰

        都不能,抽象方法需要被重写,而static修饰的方法不能被重写;本地方法是由本地代码(如C代码)实现的方法,而抽象方法没有实现;Synchronized和方法的实现细节有关,而抽象方法没有实现。故,都是矛盾的。

18、接口是否可继承接口,抽象类是否可实现接口,抽象类是否可继承具体类

        接口可以继承接口,且支持多继承;抽象类可以实现接口;抽象类可继承具体类也可以继承抽象类。

19、静态变量和实例变量有什么区别

        静态变量是被static修饰的变量,属于类,一个类不管创建了多少对象,在内存中只有一份静态变量,所有类共用这一份静态变量;实例变量依存于具体对象,每个对象都有自己的实例变量。

20、final的用法

         被final修饰的类不能被继承,修饰的变量在赋值后不能被修改(常量),修饰的方法不能被重写。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值