10 道 OOP 方面的 Java 面试题,祝你跳槽涨薪一臂之力(1)

简介: 10 道 OOP 方面的 Java 面试题,祝你跳槽涨薪一臂之力

按照惯例,2 月份是一波面试找工作的高峰期,我就是 2014 年的 2 月份回的三线城市。 不过,当时傻乎乎的没有刷面试题,幸好三线城市要求的面试题不是很过分,能答得上来。


如果你年后也有跳槽的打算,我还是建议你提前做好准备。今天,我为你精心准备了 13 道 OOP 方面的 Java 面试题,如果你觉得有收获的话,别忘了点赞分享啊。


第一题,Java 是什么?


Java 是一门计算机编程语言,高级、健壮、面向对象,并且非常安全。它由 Sun 公司在 1995 年开发,主力开发叫 James Gosling,被称为 Java 之父。


其实 Oracle 官网有一段关于 Java 的定义,是这样的:


Java 是由 Sun Microsystems 在 1995 年首先发布的编程语言和计算平台。有许多应用程序和 Web 站点只有在安装 Java 后才能正常工作,而且这样的应用程序和 Web 站点日益增多。Java 快速、安全、可靠。从笔记本电脑到数据中心,从游戏控制台到科学超级计算机,从手机到互联网,Java 无处不在!

第二题,什么是 OOP ?


面向对象编程——Object Oriented Programming,简称 OOP,是一种程序设计思想。OOP 把对象作为程序的基本单元,一个对象包含了成员变量和操作成员变量的方法。


面向过程的程序设计把计算机程序视为一系列的命令集合,即一组方法的顺序执行。为了简化程序设计,面向过程把方法继续切分为子方法,即把大块方法通过切割成小块方法来降低系统的复杂度。


而面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递。


OOP 有三大特征:


封装

多态

继承

面向对象编程的语言不只有 Java,还有 C#、C++、Python 等等。如果面试官有闲情逸致的话,还可以给他讲一个小学课本上的《女娲造人》。


女娲要造人,首先要想的是所造的人长什么样,女娲为了方便就按照自己的样子捏了一个模板,后面她只需要按照这个模板来捏就行。在 OOP 中,这个模板就称为类。


女娲按照模板(类)捏了一个人,这个人就是具体的对象;人有很多器官,比如眼睛、耳朵、鼻子、大脑、手和脚,同样还有年龄、身高,女娲为了区别每个人就会给每个对象不同的基本特征。另外,捏出的人要会走路,会吃饭,会干活等行为方式。


在 OOP 中,对象的基本特征称为成员变量,行为方式称为方法,所以类是由成员变量和方法构成的;成员变量最好隐藏起来,当需要人做什么的时候,就通过方法来完成。暴露方法的行为称为封装。


女娲想着一个人太无聊,就给它捏个伴,暂且就叫它男人和女人吧,男人和女人都是根据这个模板来的,有着一样的基本特征和行为,只是某些特征(成员变量)和行为(方法)在实现上有差异,那么这种根据模板而捏造不同实现细节的类的行为称为多态,就是一个模板有男人和女人两种形态。


女娲为了省事就让人类自己繁衍后代,就有了父子的关系,子类具有父类的基本特征和行为,子类也可以改变这些特征和行为,这种父子关系实现称为继承。


第三题,Java 有哪些特性?


面向对象。

参照第二题。


平台无关性。

Java 是“一次编写,到处运行(Write Once,Run any Where)”的语言,因此采用 Java 语言编写的程序具有很好的可移植性,而保证这一点的正是 Java 的虚拟机机制。在引入虚拟机之后,Java 语言在不同的平台上运行不需要重新编译。


Java 语言使用 Java 虚拟机机制屏蔽了具体平台的相关信息,使得 Java 语言编译的程序只需要生成虚拟机上的目标代码,就可以在多种平台上不加修改地运行。


简单性。

Java 舍弃了很多 C++ 中难以理解的特性,比如操作符的重载和多继承等,而且 Java 语言加入了垃圾回收机制,解决了程序员需要管理内存的问题,使编程变得更加简单。


支持多线程。

Java 支持多个线程同时执行,并提供多线程之间的同步机制。


健壮性。

Java 的强类型机制、异常处理、垃圾回收机制等都是 Java 健壮性的重要保证。


高性能。

随着 JIT(Just in Time,即时编译)的发展,Java 的运行速度也越来越快。


第四题,Java 是 100% 面向对象吗?


不是的。Java 有 8 中基本数据类型,包括 boolean、char、byte、short、int、long、float 和 double,它们都不是对象。


image.png


第五题,什么是抽象?


抽象是指为了某种目的,对一个概念或一种现象包含的信息进行过滤,移除不相关的信息,只保留与某种最终目的相关的信息。例如,一个皮质的足球,我们可以过滤掉它的质料,得到更一般性的概念,也就是球。从另外一个角度看,抽象就是简化事物,抓住事物本质的过程。


在 Java 中,可以通过两种形式来体现抽象:抽象类和接口。


定义抽象类的时候需要用到关键字 abstract,放在 class 关键字前。


public abstract class AbstractPlayer {
    abstract void play();
}
通过 extends 关键字可以继承抽象类。
public class BasketballPlayer extends AbstractPlayer {
    @Override
    void play() {
        System.out.println("我是张伯伦,篮球场上得过 100 分");
    }
}
接口是通过 interface 关键字定义的,它可以包含一些常量和方法。
public interface Electronic {
    // 常量
    String LED = "LED";
    // 抽象方法
    int getElectricityUse();
    // 静态方法
    static boolean isEnergyEfficient(String electtronicType) {
        return electtronicType.equals(LED);
    }
    // 默认方法
    default void printDescription() {
        System.out.println("电子");
    }
}
通过 implements 关键字可以实现一个接口。
public class Computer implements Electronic {
    public static void main(String[] args) {
        new Computer();
    }
    @Override
    public int getElectricityUse() {
        return 0;
    }
}
相关文章
|
28天前
|
Java 程序员
Java社招面试中的高频考点:Callable、Future与FutureTask详解
大家好,我是小米。本文主要讲解Java多线程编程中的三个重要概念:Callable、Future和FutureTask。它们在实际开发中帮助我们更灵活、高效地处理多线程任务,尤其适合社招面试场景。通过 Callable 可以定义有返回值且可能抛出异常的任务;Future 用于获取任务结果并提供取消和检查状态的功能;FutureTask 则结合了两者的优势,既可执行任务又可获取结果。掌握这些知识不仅能提升你的编程能力,还能让你在面试中脱颖而出。文中结合实例详细介绍了这三个概念的使用方法及其区别与联系。希望对大家有所帮助!
164 60
|
4天前
|
Java 程序员 开发者
Java社招面试题:一个线程运行时发生异常会怎样?
大家好,我是小米。今天分享一个经典的 Java 面试题:线程运行时发生异常,程序会怎样处理?此问题考察 Java 线程和异常处理机制的理解。线程发生异常,默认会导致线程终止,但可以通过 try-catch 捕获并处理,避免影响其他线程。未捕获的异常可通过 Thread.UncaughtExceptionHandler 处理。线程池中的异常会被自动处理,不影响任务执行。希望这篇文章能帮助你深入理解 Java 线程异常处理机制,为面试做好准备。如果你觉得有帮助,欢迎收藏、转发!
45 14
|
7天前
|
安全 Java 程序员
Java 面试必问!线程构造方法和静态块的执行线程到底是谁?
大家好,我是小米。今天聊聊Java多线程面试题:线程类的构造方法和静态块是由哪个线程调用的?构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节有助于掌握Java多线程机制。下期再见! 简介: 本文通过一个常见的Java多线程面试题,详细讲解了线程类的构造方法和静态块是由哪个线程调用的。构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节对掌握Java多线程编程至关重要。
37 13
|
27天前
|
算法 安全 Java
Java线程调度揭秘:从算法到策略,让你面试稳赢!
在社招面试中,关于线程调度和同步的相关问题常常让人感到棘手。今天,我们将深入解析Java中的线程调度算法、调度策略,探讨线程调度器、时间分片的工作原理,并带你了解常见的线程同步方法。让我们一起破解这些面试难题,提升你的Java并发编程技能!
68 16
|
24天前
|
Java 程序员 调度
Java 高级面试技巧:yield() 与 sleep() 方法的使用场景和区别
本文详细解析了 Java 中 `Thread` 类的 `yield()` 和 `sleep()` 方法,解释了它们的作用、区别及为什么是静态方法。`yield()` 让当前线程释放 CPU 时间片,给其他同等优先级线程运行机会,但不保证暂停;`sleep()` 则让线程进入休眠状态,指定时间后继续执行。两者都是静态方法,因为它们影响线程调度机制而非单一线程行为。这些知识点在面试中常被提及,掌握它们有助于更好地应对多线程编程问题。
55 9
|
29天前
|
安全 Java 程序员
Java面试必问!run() 和 start() 方法到底有啥区别?
在多线程编程中,run和 start方法常常让开发者感到困惑。为什么调用 start 才能启动线程,而直接调用 run只是普通方法调用?这篇文章将通过一个简单的例子,详细解析这两者的区别,帮助你在面试中脱颖而出,理解多线程背后的机制和原理。
60 12
|
30天前
|
Java 数据安全/隐私保护 开发者
【潜意识Java】深入理解 Java 面向对象编程(OOP)
本文介绍了Java中的面向对象编程(OOP)核心概念,包括封装、继承、多态和抽象。封装通过访问控制保护数据,提高安全性;继承支持代码复用,减少冗余;多态实现灵活的行为调用;抽象则隐藏细节,简化接口设计。掌握这些概念有助于编写高效、灵活且易于维护的代码。文章通过实例详细讲解了每个概念在Java中的应用,并总结了它们的优势。
44 3
|
1月前
|
监控 Dubbo Java
Java Dubbo 面试题
Java Dubbo相关基础面试题
|
1月前
|
SQL Java 数据库连接
Java MyBatis 面试题
Java MyBatis相关基础面试题
|
1月前
|
存储 监控 算法
Java JVM 面试题
Java JVM(虚拟机)相关基础面试题

热门文章

最新文章