Java面试题及详细答案120道之(021-040)

前后端面试题》专栏集合了前后端各个知识模块的面试题,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs,nodejs,mangoDB,MySQL,Linux… 。

前后端面试题-专栏总目录

在这里插入图片描述

一、本文面试题目录

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 教程】
1Openlayers 【入门教程】 - 【源代码+示例 300+】
2Leaflet 【入门教程】 - 【源代码+图文示例 150+】
3MapboxGL【入门教程】 - 【源代码+图文示例150+】
4Cesium 【入门教程】 - 【源代码+综合教程 200+】
5threejs【中文API】 - 【源代码+图文示例200+】

31. 为什么在Java中使用Runnable Interface?

  • 答案:Runnable接口用于实现多线程应用程序,实现该接口的类可创建线程对象,通过重写其run方法定义线程执行的任务。

32. Java中实现多线程的两种方法是什么?

  • 答案
    • 通过实现Java.lang.Runnable接口,重写run方法,然后将实现类对象作为参数传递给Thread类构造函数创建线程对象。示例代码如下:
public class MyRunnable implements Runnable {
    @Override
    public 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 {
    @Override
    public 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道
1Java面试题及详细答案120道(01-20)
2Java面试题及详细答案120道(21-40)
3Java面试题及详细答案120道(41-60)
4Java面试题及详细答案120道(61-80)
5Java面试题及详细答案120道(81-100)
6Java面试题及详细答案120道(5101-120)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

还是大剑师兰特

打赏一杯可口可乐

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值