码迷,mamicode.com
首页 > 编程语言 > 详细

java面试题

时间:2019-03-28 13:39:47      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:默认   jdk   分配   必须   javac   默认方法   四舍六入   它的   .exe   

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.普通类和抽象类有哪些区别?

  

  1. 抽象类不能用new调出构造方法创建对象(不能被实例化),普通类可以new出来。
  2. 抽象类可以有构造函数,被继承时子类必须继承父类一个构造方法,抽象方法不能被声明为静态。
  3. 抽象方法只需申明,而无需实现,留给继承它的子类去实现,抽象类中可以允许普通方法有主体
  4. 含有抽象方法的类必须申明为抽象类。
  5. 抽象的子类必须实现抽象类中所有抽象方法,否则这个子类也是抽象类。

构造函数就是在new的同时赋值,抽象类的构造函数可以为继承它的子类使用。

抽象类不能使用static修饰词,因为抽象类是不能实例化的,即不能被分配内存,而static修饰的方法在类实例化之前就已经别分配了内存,这样一来矛盾就出现了:抽象类不能被分配内存,而static方法必须被分配内存。所以抽象类中不能有静态的抽象方法。

9.抽象类能使用 final 修饰吗?

不能

抽象类生来就是要被继承使用的,而final修饰的类是不允许被继承,重写。

10.接口和抽象类有什么区别?

  

  1. 抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。
  2. 抽象类要被子类继承,接口要被类实现。
  3. 接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现。(经评论指出,在Java8中使用default 关键字可以为接口定义默认方法,接口的子类也可以实现此默认方法)
  4. 接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。
  5. 抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。
  6. 抽象方法只能申明,不能实现,接口是设计的结果 ,抽象类是重构的结果
  7. 抽象类里可以没有抽象方法
  8. 如果一个类里有抽象方法,那么这个类只能是抽象类
  9. 抽象方法要被实现,所以不能是静态的,也不能是私有的。
  10. 接口可继承接口,并可多继承接口,但类只能单根继承。

 

java面试题

标签:默认   jdk   分配   必须   javac   默认方法   四舍六入   它的   .exe   

原文地址:https://www.cnblogs.com/tuanzhangak47/p/10614325.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!