-
Notifications
You must be signed in to change notification settings - Fork 0
/
面试题.txt
41 lines (32 loc) · 3.33 KB
/
面试题.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
1.什么是java虚拟机?为什么java被称作“平台无关得编程语言”
java虚拟机是一个可以执行java字节码的虚拟机进程,java源文件被编译成能被java虚拟机执行的字节码文件,然后解释称不同平台需要的机器码。
执行的流程:
java命令首先启动虚拟机进程,虚拟机启动成功后读取参数(类名) 把他作为初始类加载到内存,对这个类进行初始化和动态连接,也就是说.class文件不是直接被系统加载后直接在cpu上运行的,而是被一个叫做虚拟机的进程托管的。
在虚拟机中有一个叫做类加载器的子系统,这个子系统在运行的时候高根据需要加载类,在java虚拟机中只有他需要一个类的时候才会调用类加载器来加载这个类,并不会在开始进行时加载所有的类。
由虚拟机加载的类,被加载到虚拟机内存中后,虚拟机会读取并执行他里面的字节码指令,虚拟机中执行字节码指令的部分叫做执行引擎。在执行的过程中还会把各个class文件动态连接起来。
平台无关是因为java被设计成允许应用程序可以运行在任意的平台而不需要程序员为每一个平台单独重写或者重新编译,也就是说java源程序不是直接编译成为机器码,而是二次编译的,第一次java源程序被javac编译成.class文件(和平台无关),第二次.class文件被jvm中的解释器编译,解释执行为不同平台所需要的机器码
2.JDK和JRE
JRE是java运行时环境,包括java虚拟机,java核心类库和支持文件,不包含开发工具(JDK)--编译器,调试器和其他工具
JDK时完整的java软件开发包,包含了JRE,编译器和其他的工具例如javaDoc,java调试器。
3.static关键字是什么意思?java中是否可以覆盖一个private或者是static的方法?
“static”关键字表示一个成员变量或者是方法可以在没有所属的类的实例变量情况下被访问
java中的static方法不能被覆盖,因为方法覆盖是基于运行时的动态绑定的,而static方法时编译时静态绑定的,static方法跟类的任何实例都不想管,所以概念上不适用
java中的private方法也不可以覆盖,因为private修饰的变量和方法只能在当前的类中使用。如果是其他的类继承当前类或者不能访问到private变量或方法的,当然也不可以覆盖
4.java支持的数据类型有哪些,什么是自动拆装箱?
基本数据类型:byte short int long float double boolean char
引用类型:String等 其实是对象的引用,JVM中虚拟栈中存的是对象的地址,创建的对象实质在堆中,通过地址来找到堆中的对象的过程,即为引用类型。
自动拆装箱是java编译器在基本数据类型和对应的对象包装类型之间做一个转化,例如 int -> Integer 反之为自动拆箱
5.java中方法覆盖和重载
java中的方法重载发生在同一个类里面两个或者多个方法的方法名相同但是参数列表不同,
覆盖说的是子类重新定义了父类的方法,必须有相同的方法名,参数列表和返回类型,覆盖着可能不会限制它所覆盖的方法的访问
6.构造方法,构造方法重载,复制构造方法
构造方法是为了初始化对象,构造函数的函数名和类名相同,在没有给类提供构造方法的情况下,java编译器会为这个类创建一个默认的构造方法
默认的构造函数没有参数,没有返回值,构造函数的函数体内没有内容
构造方法重载和方法重载很相似,可以为一个类创建多个构造方法,每一个构造方法必须有它唯一的参数列表
C++语法允许用户定义自己的复制构造函数以实现自定义的复制,比如说进行深复制。Java并不支持这样的复制构造函数。但是这并不代表Java中没有这种机制,
在Java中Object类的clone()方法就是这种机制的体现。而且通过以上三种方式对Java对象进行的操作都是对引用的操作,不像C++里面是对原对象的操作,因此Java中也不需要考虑需要使用复制构造函数这种问题
7.java支持多继承吗
java不支持多继承,只支持单继承,即一个类只有一个父类,但是java中的接口支持多继承,一个子接口可以有多个父接口。
接口的作用是用来扩展对象的功能,一个子接口继承多个父接口,说明子接口扩展了多个功能,当类实现接口时,类就扩展了相当的功能
8.接口和抽象类的区别
从设计层面来说,抽象是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。