Java面试题及详细答案120道之(021-040)
《前后端面试题
》专栏集合了前后端各个知识模块的面试题,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs,nodejs,mangoDB,MySQL,Linux… 。
文章目录
- 一、本文面试题目录
- 21. 对象在java中如何序列化?
- 22. Java中的try…catch是用于异常处理吗?
- 23. 有没有什么办法在出现异常时跳过finally?
- 24. 什么时候类的构造函数会被调用?
- 25. 一个类可以有多个构造函数吗?
- 26. 我们可以覆盖类的静态方法吗?
- 27. String是Java的数据类型吗?
- 28. 为什么Java中的String被称为Immutable?
- 29. 数组和向量之间有什么区别?
- 30. 什么是多线程?
- 31. 为什么在Java中使用Runnable Interface?
- 32. Java中实现多线程的两种方法是什么?
- 33. 当数据需要进行大量更改时,String和StringBuffer谁是更好的选择?
- 34. 每个switch语句后使用break的目的是什么?
- 35. 如何在Java中完成垃圾回收?
- 36. 可以在Main()方法前执行代码?
- 37. 一个类可以同时既是父类也是子类吗?请举例说明?
- 38. 如果类中没有定义构造函数,那么类的对象将会怎么创建?
- 39. 在多线程中,如何确保资源不会同时被多个线程使用?
- 40. Java中,接口可以继承接口吗?
- 二、120道面试题目录列表
一、本文面试题目录
21. 对象在java中如何序列化?
- 答案:序列化是指把Java对象转换为字节序列的过程,只有支持java.io.Serializable接口的对象才能写入流中。
22. Java中的try…catch是用于异常处理吗?
- 答案:是。try后面往往跟着catch或finally,try抛出的异常会被catch捕获,finally中的代码在代码终止前会执行。
23. 有没有什么办法在出现异常时跳过finally?
- 答案:通常异常发生时会执行finally,除非在try的末尾有强制中止代码,如System.exit(0);
24. 什么时候类的构造函数会被调用?
- 答案:每次用new来创建对象时,都会调用构造函数。例如
new User()
,若User类有构造函数,其构造函数会被调用。
25. 一个类可以有多个构造函数吗?
- 答案:可以,一个类可以有多个具有不同参数的构造函数,创建对象时调用哪个构造函数取决于传递的参数。
26. 我们可以覆盖类的静态方法吗?
- 答案:不能。静态方法属于类,在编译时解析,不能被覆盖。
27. String是Java的数据类型吗?
- 答案:String不是Java的原始数据类型,它是java.lang.String类的对象,可使用String类的内置方法。
28. 为什么Java中的String被称为Immutable?
- 答案:因为String对象一旦赋值就不可更改,若更改则会创建新对象。例如
String str = "hello"; str = "world";
,此时会创建新的String对象"world",并将str的引用指向新对象。
29. 数组和向量之间有什么区别?
- 答案:数组是对相同原始类型数据的组合,是静态的,长度固定;向量(如Java中的Vector类)本质上是动态的,长度可变化,且Vector可以容纳不同数据类型的对象(但通常建议存放同一类型)。
30. 什么是多线程?
- 答案:多线程是指在单个程序中以并发方式执行多个任务,同一个进程的多个线程堆栈共享,有助于提高程序性能。
No. | 大剑师精品GIS教程推荐 |
---|---|
0 | 地图渲染基础- 【WebGL 教程】 - 【Canvas 教程】 - 【SVG 教程】 |
1 | Openlayers 【入门教程】 - 【源代码+示例 300+】 |
2 | Leaflet 【入门教程】 - 【源代码+图文示例 150+】 |
3 | MapboxGL 【入门教程】 - 【源代码+图文示例150+】 |
4 | Cesium 【入门教程】 - 【源代码+综合教程 200+】 |
5 | threejs 【中文API】 - 【源代码+图文示例200+】 |
31. 为什么在Java中使用Runnable Interface?
- 答案:Runnable接口用于实现多线程应用程序,实现该接口的类可创建线程对象,通过重写其run方法定义线程执行的任务。
32. Java中实现多线程的两种方法是什么?
- 答案:
- 通过实现Java.lang.Runnable接口,重写run方法,然后将实现类对象作为参数传递给Thread类构造函数创建线程对象。示例代码如下:
public class MyRunnable implements Runnable {@Overridepublic void run() {System.out.println("线程正在运行");}public static void main(String[] args) {MyRunnable runnable = new MyRunnable();Thread thread = new Thread(runnable);thread.start();}
}
- 继承Java.lang.Thread类,重写run方法,直接创建子类对象并启动线程。示例代码如下:
public class MyThread extends Thread {@Overridepublic void run() {System.out.println("线程正在运行");}public static void main(String[] args) {MyThread thread = new MyThread();thread.start();}
}
33. 当数据需要进行大量更改时,String和StringBuffer谁是更好的选择?
- 答案:StringBuffer是更好的选择。因为String是不可变的,每次数据更改都会创建新对象,开销大;而StringBuffer是可变的,可直接修改内容。
34. 每个switch语句后使用break的目的是什么?
- 答案:break用于在执行完当前case语句后中断switch语句,若不使用break,会继续执行后续case语句,直到遇到break或switch结束。
35. 如何在Java中完成垃圾回收?
- 答案:Java中,对象不被引用时,垃圾回收会自动发生,对象会被自动销毁。也可调用System.gc()方法或Runtime.gc()方法建议垃圾回收器执行垃圾回收,但只是建议,垃圾回收器不一定立即执行。
36. 可以在Main()方法前执行代码?
- 答案:可以,使用静态代码块。静态代码块中的语句会在类加载时执行,先于main方法执行,且只执行一次。示例代码如下:
public class MainClass {static {System.out.println("静态代码块先执行");}public static void main(String[] args) {System.out.println("main方法执行");}
}
37. 一个类可以同时既是父类也是子类吗?请举例说明?
- 答案:可以。例如在继承层次结构中,Animal类是Dog类的父类,同时Animal类又是Object类的子类。
38. 如果类中没有定义构造函数,那么类的对象将会怎么创建?
- 答案:即使类没有定义显式构造函数,对象在创建时也会执行隐式构造函数,该构造函数没有参数。
39. 在多线程中,如何确保资源不会同时被多个线程使用?
- 答案:可通过使用同步的概念来控制,使用synchronized关键字修饰方法或代码块,确保同一时间只有一个线程能访问共享资源。示例代码如下:
public class SynchronizedExample {private int count = 0;public synchronized void increment() {count++;}public static void main(String[] args) {SynchronizedExample example = new SynchronizedExample();Thread thread1 = new Thread(() -> {for (int i = 0; i < 1000; i++) {example.increment();}});Thread thread2 = new Thread(() -> {for (int i = 0; i < 1000; i++) {example.increment();}});thread1.start();thread2.start();try {thread1.join();thread2.join();} catch (InterruptedException e) {e.printStackTrace();}System.out.println("Count: " + example.count);}
}
40. Java中,接口可以继承接口吗?
- 答案:可以。接口可以继承多个接口,通过extends关键字实现。例如:
interface A {void methodA();
}
interface B extends A {void methodB();
}
接口B继承了接口A,就拥有了methodA方法,同时还定义了自己的methodB方法。
二、120道面试题目录列表
文章序号 | Java面试题120道 |
---|---|
1 | Java面试题及详细答案120道(01-20) |
2 | Java面试题及详细答案120道(21-40) |
3 | Java面试题及详细答案120道(41-60) |
4 | Java面试题及详细答案120道(61-80) |
5 | Java面试题及详细答案120道(81-100) |
6 | Java面试题及详细答案120道(5101-120) |