1. Java中一个类可以继承多个类吗?
Java中只能继承一个类,但是接口可以实现多个,用逗号分隔。其中Java 8中有default方法,可以让接口当作一般类来使用。
2. this和super的区别?
this代表本类的当前实例引用,super代表父类实例引用。
3. 创建线程有哪几种方式?
1. 继承Thread类
2. 实现Runnable接口
3. 实现Callable接口
4. 线程池创建
注:深入分析源码其实只有一种,均是通过实现Runnable接口。
4. StringBuffer和StringBuilder的区别?
1. 线程安全性:前者是线程安全的,其对内部方法加了Synchronize同步锁,后者线程不安全。
2. 性能:后者比前者高,因为后者没有加同步锁。
3. 可变性:两者与String对比,String通过final修饰是不可变的,这两者是可变的。
5. Java类的加载过程?
1)加载(Loading):这是类加载的第一个阶段,负责将字节码文件加载到内存中,并将其转换为JVM内部表示的结构体,即运行时数据区的方法区。在这个阶段,JVM为类的静态字段分配内存并设置默认值,如整型默认为0,布尔型默认为false,引用类型默认为null。1
2)验证(Verification):这个阶段用于确保字节码的正确性和安全性。它检查字节码是否符合Java虚拟机规范,包括语法验证、字节码验证、符号引用验证等,以防止恶意的字节码对JVM的安全造成威胁。
3)准备(Preparation):在这个阶段,JVM为类的静态变量分配内存空间,并根据数据类型给它们设置默认值。这些变量所使用的内存都将在方法区中进行分配。
4)解析(Resolution):这个阶段是将符号引用解析为直接引用的过程。在Java中,符号引用是一种在编译时使用的符号名称,而直接引用是在运行时直接指向内存中的对象、方法、字段等的指针或句柄。
5)初始化(Initialization):这是类加载的最后一个阶段,主要负责执行类的初始化代码。在这个阶段,JVM将按照程序员定义的顺序执行类构造器`()`的代码,对静态变量进行初始化,执行静态代码块等。
需要注意的是,类加载过程中的每个阶段都是有序、依次进行的,且是按需加载的。也就是说,只有在需要使用某个类时,才会触发该类的加载过程。