java面试题
Posted tuanzhangak47
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java面试题相关的知识,希望对你有一定的参考价值。
1.JDK 和 JRE 有什么区别?
JDK可以支持Java程序的开发,包括编译器(javac.exe)、开发工具(javadoc.exe、jar.exe、keytool.exe、jconsole.exe)和更多的类库(如tools.jar)等。
JRE为java的开发环境,包括JVM虚拟机(java.exe等)和基本的类库(rt.jar等),是java程序运行所需要的软件环境。
JKD包含JRE。如果你需要运行java程序,只需安装JRE就可以了。如果你需要编写java程序,需要安装JDK。
JRE根据不同操作系统(如:windows,linux等)和不同JRE提供商(IBM,ORACLE等)有很多版本,最常用的是Oracle公司收购SUN公司的JRE版本。
2.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
不对,Java 对于 eqauls 方法和 hashCode 方法的规定是如果两个对象 equals 方法相等则它们的 hashCode 值一定要相同,如果两个对象的 hashCode 相同则它们的 equals 方法并不一定相同。
3.final 在 java 中有什么作用?
final修饰的类,叫final类,不可被继承,
final修饰的方法,不可被重写,
final修饰的变量,不可被修改,final经常和static组合使用来定义常量。
4.java 中的 Math.round(-1.5) 等于多少?
-1
Math.round()方法准确说是“四舍六入”,5要进行判断对待。
Math.round()的原理是对传入的参数+0.5之后,再向下取整得到的数就是返回的结果,返回值为long型。这里的向下取整是说取比它小的第一个整数或者和它相等的整数。
因此Math.round(-1.5)的结果是-1.5 + 0.5 再向下取整,即-1.0取整,结果是-1.
Math.round(-1.4)的结果是 -1.4 + 0.5 即-0.9 向下取整,结果是-1。
同理,Math.round(1.5)即为 1.5 + 0.5 再向下取整,结果是2。
5.String 属于基础的数据类型吗?
不属于。
String不是基本的数据类型,是final修饰的java类,java中的基本类型一共有8个,它们分别为:
1 字符类型:byte,char
2 基本整型:short,int,long
3 浮点型:float,double
4 布尔类型:boolean
6.String str="i"与 String str=new String("i")一样吗?
不一样,如果内存中已经为"i"字符串分配了内存,那么str将指向"i"内存对象的地址;
String str = new String("i"),内存中重新分配一片内存区域存放"i", 然后str指向"i",也就是内存中实际有2个"i"对象,而且存放的地址不一样。造成资源浪费
7.抽象类必须要有抽象方法吗?
不一定
抽象类中不一定要有抽象方法,但是抽象方法在的类必须是抽象类。
8.普通类和抽象类有哪些区别?
- 抽象类不能用new调出构造方法创建对象(不能被实例化),普通类可以new出来。
- 抽象类可以有构造函数,被继承时子类必须继承父类一个构造方法,抽象方法不能被声明为静态。
- 抽象方法只需申明,而无需实现,留给继承它的子类去实现,抽象类中可以允许普通方法有主体
- 含有抽象方法的类必须申明为抽象类。
- 抽象的子类必须实现抽象类中所有抽象方法,否则这个子类也是抽象类。
构造函数就是在new的同时赋值,抽象类的构造函数可以为继承它的子类使用。
抽象类不能使用static修饰词,因为抽象类是不能实例化的,即不能被分配内存,而static修饰的方法在类实例化之前就已经别分配了内存,这样一来矛盾就出现了:抽象类不能被分配内存,而static方法必须被分配内存。所以抽象类中不能有静态的抽象方法。
9.抽象类能使用 final 修饰吗?
不能
抽象类生来就是要被继承使用的,而final修饰的类是不允许被继承,重写。
10.接口和抽象类有什么区别?
- 抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。
- 抽象类要被子类继承,接口要被类实现。
- 接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现。(经评论指出,在Java8中使用default 关键字可以为接口定义默认方法,接口的子类也可以实现此默认方法)
- 接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。
- 抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。
- 抽象方法只能申明,不能实现,接口是设计的结果 ,抽象类是重构的结果
- 抽象类里可以没有抽象方法
- 如果一个类里有抽象方法,那么这个类只能是抽象类
- 抽象方法要被实现,所以不能是静态的,也不能是私有的。
- 接口可继承接口,并可多继承接口,但类只能单根继承。
以上是关于java面试题的主要内容,如果未能解决你的问题,请参考以下文章
2020年1-6月份Java面试题总结,20多类1100道面试题含答案解析