• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

经典Java面试100例,轻松搞定BAT——高频面试题

互联网 diligentman 3小时前 2次浏览

经典Java面试100例,轻松搞定BAT——高频面试题

1. 什么是 Java 虚拟机? 为什么 Java 被称作是“平台无关的编程语言”?
Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程。 Java 源文件被编译成能被 Java 虚拟机执行的字节码文件。
Java 被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。 Java 虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其特性。
2. JDK 和 JRE 的区别是什么?
Java 运行时环境(JRE)是将要执行 Java 程序的 Java 虚拟机。它同时也包含了执行 applet 需要 的浏览器插件。
Java 开发工具包(JDK)是完整的 Java 软件开发包,包含了 JRE,编译器和其他的工具(比如: JavaDoc, Java调试器),可以让开发开发、编译、执行 Java 应用程序。
3. ”static”关键字是什么意思? Java 中是否可以覆盖(override)一个 private 或者是
static 的方法?

“static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。
Java 中 static 方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而 static 方法是编 译时静态绑定的。 static 方法跟类的任何实例都不相关,所以概念上不适用。 private 也是不支持覆盖的,因为私有的成员外界是看不到的所以也就不存在覆盖的问题。
4. 是否可以在 static 环境中访问非 static 变量?
static 变量在 Java 中是属于类的,它在所有的实例中的值是一样的。当类被 Java 虚拟机载入 的时候,会对 static 变量进行初始化。如果你的代码尝试不用实例来访问非 static 的变量, 编译器会报错, 因为这些变量还没有被创建出来, 还没有跟任何实例关联上。
5. Java 支持的数据类型有哪些? 什么是自动拆装箱?
Java 语言支持的 8 中基本数据类型是:
整型: byte short int long
浮点型: float double
布尔型: boolean
字符型: char
自动装箱是 Java 编译器在基本数据类型和对应的对象包装类型之间做的一个转化。比如: 把 int 转化
成 Integer, double 转化成 double, 等等。反之就是自动拆箱。

6. Java 中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?
重写方法的规则: (方法重写也称为方法覆盖)
1、参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载。
2、返回的类型必须一直与被重写的方法的返回类型相同,否则不能称其为重写而是重载。
3、访问修饰符的限制一定要大于被重写方法的访问修饰符( public>protected>default>private)
4、重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常。例如:
父类的一个方法申明了一个检查异常 IOException,在重写这个方法是就不能抛出 Exception,只能抛出IOException 的子类异常,可以抛出非检查异常。
而重载的规则:
1、必须具有不同的参数列表;
2、可以有不责骂的返回类型,只要参数列表不同就可以了;
3、可以有不同的访问修饰符;
4、可以抛出不同的异常;
重写与重载的区别在于:
重写多态性起作用,对调用被重载过的方法可以大大减少代码的输入量,同一个方法名只要往里面传递不同的参数就可以拥有不同的功能或返回值。
用好重写和重载可以设计一个结构清晰而简洁的类,可以说重写和重载在编写代码过程中的作用非同一般.
7. Java 中,什么是构造函数? 什么是构造函数重载? 什么是复制构造函数?
当新对象被创建的时候,构造函数会被调用。每一个类都有构造函数。在程序员没有给类提
供构造函数的情况下,Java 编译器会为这个类创建一个默认的构造函数。
Java 中构造函数重载和方法重载很相似。可以为一个类创建多个构造函数。每一个构造函数 必须有它自己唯一的参数列表。Java 不支持像 C++中那样的复制构造函数, 这个不同点是因为如果你不自己写构造函数的情况下, Java 不会创建默认的复制构造函数。
8. Java 支持多继承么? 支持多实现吗?
不支持, Java 不支持多继承。每个类都只能继承一个类, 但是可以实现多个接口。
9. 接口可以继承接口吗? 如果可以继承 请列举一个案例?
可以, List 继承 Collection
10. 接口和抽象类的区别是什么?
接口和抽象类有什么区别
你选择使用接口和抽象类的依据是什么?
接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象。
抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如, 苏格兰折耳猫, 布偶猫,这两个类(如果是类的话„„),他们的抽象类是猫。说明,他们都是猫。
猫可以吃东西,耗子也可以吃东西,你可以把“吃东西” 定义成一个接口,然后让这些类去实现它.
所以,在高级语言上,一个类只能继承一个类(抽象类) (正如猫不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)。
第一点.接口是抽象类的变体,接口中所有的方法都是抽象的。而抽象类是声明方法的存在而不去实现它的类。
第二点.接口可以多继承,抽象类不行
第三点.接口定义方法,不能实现,而抽象类可以实现部分方法。
第四点.接口中基本数据类型为 static 而抽类象不是的。
第五点. Java 接口中声明的变量默认都是 final 的。 抽象类可以包含非 final 的变量。
第六点. Java 接口中的成员函数默认是 public 的。抽象类的成员函数可以是 private, protected 或者是 public。
当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。
抽象类的功能要远超过接口,但是,定义抽象类的代价高。因为高级语言来说(从实际设计上来说也是)每个类只能继承一个类。在这个类中,你必须继承或编写出其所有子类的所有共性。虽然接口在功能上会弱化许多,但是它只是针对一个动作的描述。而且你可以在一个类中同时实现多个接口。在设计阶段会降低难度的。
接口是绝对抽象的, 不可以被实例化。抽象类也不可以被实例化
11. 什么是值传递和引用传递?
对象被值传递,意味着传递了对象的一个副本。因此,就算是改变了对象副本,也不会影响 源对象的值。
对象被引用传递,意味着传递的并不是实际的对象,而是对象的引用。因此,外部对引用对 象所做的改变会反映到所有的对象上。


程序员灯塔
转载请注明原文链接:经典Java面试100例,轻松搞定BAT——高频面试题
喜欢 (0)