java面试题1000道

java面试题1000道

1. JDK与JRE之间的区别

答:JDK是java开发工具包的一个标准,它包含了一些工具,以及为开发java程序所需要的库,它也包含编译器,调试工具。

JRE是java运行时环境,它包含在JDK当中,JRE提供必要的库以及JVM,因为这是运行java程序所必须的。

2. 什么是java虚拟机

答:java虚拟机(java Virturl Machine JVM)是一个抽象的机器,用于执行java字节码,不同的硬件平台JVM是不同的,JVM本身是平台相关的,JVM负责加载验证以及执行字节码。

3. JVM的内存区域有哪些类型

答:在java当中,JVM分配内存给不同的进程、方法、还有对象,内存区域划分如下:

  1. 类加载器:它属于JVM的一个组件用于加载类文件
  2. 类(方法)区:它存储了每个类的结构比如运行时的常量池,字段和方法数据,以及方法的代码。
  3. 堆:堆是运行时创建的,它包含了那些在运行时为对象分配的数据。
  4. 栈:栈存储局部变量和部分的运行时结果,它也有助于方法调用和返回,每个线程在其线程创建的时候创建一个私有的JVM栈。
  5. 程序计数器:这个内存区域包含了JVM目前正在执行的指令地址。
  6. 本地方法栈:这个区域是为应用程序当中所有的本地方法所保留的内存区域。

4. 什么是JIT编译器

答:JIT全称:just in time,及时的,及时编译器主要用于改善java的性能,它默认是开启的,它是编译时更早的处理以便运行时更良好的运行,java已经通过在JVM当中广泛的使用JIT编译器。

5. java与其它语言不一样的地方

答:java最大的特点是它的平台无关性,java编译器将java源代码编译为字节码然后由JVM负责解释执行,对于世界上绝大多数流行的平台都有其对应的JVM,java字节码可以运行在有JVM支持的平台上,其它的语言往往需要为特定的平台编译特定的库。

6. 为什么说java是一次编写,到处运行

答:可以在Windows上编写Java代码并在Windows中编译它。从Windows中获得的类和jar文件可以在UNIX环境下运行,真正的实现了跨平台。所有这些可移植性的背后都是Java字节码。Java编译器生成的字节码可以由任何JVM来解释。因此,编写Java程序变得更加容易,这些程序几乎可以在任何平台上运行。java编译器负责编译,JVM负责解释执行。

7. java当中的类加载器如何工作

答:在java当中,类加载器用于加载类文件,它可以从指定的物理位置,比如文件系统,或者网络位置等等获取。

主要有三种方式:

  1. Bootstrap ClassLoader 这是第一个类加载器,它从RT.jar文件加载类。
  2. Extension ClassLoader:(扩展类加载器),它从jre/lib/ext加载类文件。
  3. Application ClassLoader:它依赖于类路径查找类文件的位置,如果你在类路径当中指定了jar,那么类加载将会加载它们。

8. main这个单词用于main方法你认为它是关键字吗?

答:不是,它就是一个方法名而已,我们可以在一个类当中取别的同名的方法,它不是一个关键字。

9. main方法可以修改为public void static形式吗?

答:不能,任何方法都必须先写限定符然后才能是返回值,顺序不能修改。但是改为

static public void main()是可以的。

10. 在Java中我们对局部变量不指定任何值,那么它的默认值是什么?

答:Java不会帮我们进行初始化我们的局部变量,所以它的值是null,但是并没有显式赋值为null,所以如果你尝试直接使用未赋值的局部变量将会得到错误。

11. 我们运行一个Java的类不需要传递参数,那么数组String[]args的值到底是什么?

答:如果没有传递参数,那么这个数组将会是没有元素的空数组,但是它不是null。

12. Java当中byte和char这两种数据类型有何区别?

答:二者本质上都是数字类型,只是用于展示不同的数据范围,它们之间最主要的区别在于,byte可以用于存储二进制数据,而char用于存储字符串文本数据。

比如

char ch = 'x';

byte数据范围为-128到127

一个byte等于8bits。但是char是16bits所以它等于两个bytes

char=2bytes=16bits。

13 OOP的基本原则有哪些?

答:

  1. 抽象
  2. 封装
  3. 继承
  4. 多态

14 面向对象的语言和基于对象的语言之间的区别是什么?

答:面向对象的编程语言如Java和C++遵循OOPS(如封装、抽象、多态性和继承)等概念。基于对象的编程语言遵循OOOPS的一些特性,但它们不支持多态性和继承,javaScript、VBScript等基于对象的编程语言为Objectsand提供了支持,可以从构造函数构建对象。他们的语言支持封装。这些也被称为原型语言。

15 在Java当中成员变量的引用类型数据默认值是什么?

答:Java中的所有成员变量的引用类型对象默认值都是null。

16 为什么需要构造器?

答:java是一种面向对象的语言,在其中我们创建和使用对象。构造函数是类似于方法的一段代码。它是用于创建对象并设置对象的初始状态。构造函数是一个与类同名的特殊函数。没有构造函数,就没有其他方法来创建对象。默认情况下,Java为每个对象提供默认构造函数。如果我们重载一个构造函数,那么我们必须实现默认的构造函数。

17 Java当中为什么需要默认构造器?

答:默认构造函数是在没有定义其他构造函数的情况下由Java自动生成的无参数构造函数。Java规范表明,如果类中没有重载构造函数,它将提供默认构造函数。但它并没有说明在一个类中编写一个覆盖过多的构造函数的情况。我们需要至少一个构造函数来创建一个对象。

18 Java构造器有返回值吗?

答:没有,根据sun的规范说明:

Constructor declarations look like method declarations—except that they use the name of the class and have no return type.

构造器声明很像方法的声明,特殊的是它使用的名字必须是类名并且没有返回值类型。

19 Java当中可以继承构造器吗?

答:Java不支持继承构造器。

20. 为什么构造器不能被final static abstract 修饰?

答:如果我们把一个方法设为final,那就意味着我们不希望任何类重写它。但是构造函数(按Java语言编写

规范)不能被重写。所以修饰它是没有用的。

如果我们将一个方法设置为抽象的,这意味着它没有主体,应该在子类中实现。但是当使用新关键字时,构造函数是隐含调用的。因此它需要方法体。

如果我们将方法设为静态,则意味着它属于类,不属于一个特定的对象。初始化对象总是使用构造器来完成的。因此,标记构造函数静态是没有用的。

21. this关键字的作用?

答:在Java中,“这个”关键字指的是对象的当前实例。这对于区分实例变量和局部变量是有用的。它可以用来调用构造函数。或者它可以用来指代实例。在方法重写的情况下,可以调用当前类的方法。

22. 解释一下继承这个概念

答:继承是面向对象程序设计中的一个重要概念。有些对象具有某些特征和行为。通过继承,我们可以将共同的行为和特性放在一个基类中,也称为超类,然后所有具有共同行为的对象从这个基类继承。它表现为一种is a的关系。继承可以促进代码重用,方法重写和多态性。

23. java当中哪个类是所有类的超类?

答: Object.

24. java为何不支持多继承?

答:多重继承意味着一个类可以继承来自两个或多个父类的行为。多重继承的问题是父类可能对同一方法有不同的实现。所以他们有不同的方法来做同样的事情。现在,子类应该选择哪种实现方式?这导致多重继承的模糊性。这是Java不支持实现多继承的主要原因。

假设你有一个类电视和另一个类原子弹。有方法switchOn(),但只有TV有switchOff()方法。如果你的类继承了这两个类,那么你同时从两个父类继承了switchOn方法,如果要switchOn就容易困惑,但是switchOff只会切到电视又可以唯一确定,种种不确定性提高了编程难度,所以java选择不支持多继承。为了弥补不能多继承的缺陷,在Java中实现多个接口。

25. OOP当中,何谓组合?

答:组合也被成为HAS-A关系,他涉及到两个类,比如说汽车类有驾驶轮,如果一个类保存另一个类的实例,那么它被称为组合。

26. 聚合与组合这两个概念的区别?

答:在OOPS中,聚合和组合是关联关系的类型。组合是一种强关系。如果混合对象被销毁,那么它的所有部分都被销毁。汽车有方向盘。如果汽车被破坏,那么方向盘就没有意义了。

对于聚合关系则没有组合关系那么强,比如一个图书馆有学生,如果一个图书馆被摧毁了,学生还是存在的,所以图书馆和学生的关系是聚合关系,一个图书馆有数,如果图书馆被销毁,那么书籍也会被销毁,图书馆的书不能脱离这个图书馆而存在,所以书和图书的关系是组合关系。

27. java当中为何没有指针?

答:java当中使用引用代替指针,这些引用指向对象的内存空间,但是并不是直接的访问这些内存地址,JVM可以在VM内存当中自由的移动对象。

指针的移除有助于java管理内存以及提高垃圾回收效率,他也帮助了开发者,不再需要担心内存分配以及回收的问题。

28. 如果在java当中没有指针,为什么我们还有NullPointerException?

答:在java当中,指针等同于引用,当我们使用a.这种方式的时候,JVM使用指针在操作,但是开发者仅仅能看到的是对象的引用。当一个对象引用指向空的时候,并且我们又尝试使用它去访问方法或者成员变量,我们就会得到一个空指针异常。

29. super关键字的作用?

答:super关键字可以用在子类的方法当中或者构造器当中,它指的对象的直接父类对象,通过使用super我们可以调用父类当中的方法。也可以在构造器当中调用父类的构造器。

30. 构造函数当中是否可以同时使用this()与super()?

答:不能,java不允许在同一个构造器当中同时使用this()与super(),java规范表明,super()或者this()在构造器当中只能出现在第一行。

posted @ 2018-08-22 16:24  沙漠皇帝  阅读(1856)  评论(1编辑  收藏  举报