Java高级面试指南-技术问题整理

daicy
发布于 2024-11-29 / 8 阅读
0
0

Java高级面试指南-技术问题整理

一、Java基础相关

(一)Java基本概念

  1. Java的性质与应用领域
    • Java是一种通用的高级编程语言,其核心概念涵盖了面向对象编程(OOPS)的基本概念,包括抽象化、多态性、继承、封装等。Java常用于开发桌面应用程序和服务器环境(开发独立应用程序),是世界上使用最广泛的编程语言之一。
  2. JDK与JVM的区别
    • JDK(Java开发工具包)是一个开发目的的工具包,它还包括执行环境。而JVM(Java虚拟机)纯粹是运行时环境,无法使用JVM编译源文件。
  3. Java中的访问修饰符
    • 在Java中,访问说明符用于定义访问范围,包括public(类、方法、字段可从任何地方访问)、Protected(方法、字段可以从它们所属的同一类或子类以及同一包的类中访问,但不能从外部访问)、default(Method,Field,class只能从同一程序包访问,而不能从其本机程序包外部访问)、private(方法、字段可以从它们所属的相同类中访问)。

(二)面向对象编程(OOPS)

  1. OOPS基本概念
    • 抽象化:隐藏实现细节,只展示必要的功能。
    • 多态性:能够在不同上下文中为某事物赋予不同含义或用法,如“一个接口,许多实现”,具体表现为方法重载(overloading)和方法重写(overriding)。
    • 继承:子类从父类获取属性和方法。
    • 封装:将属性和方法组合在一个单元中,实现数据隐藏,帮助程序员遵循模块化开发,每个对象有独立的方法和变量,功能独立于其他对象。
  2. 多态性的具体体现与示例
    • 方法重载:在同一个类中,定义多个同名方法,但参数列表不同,根据不同输入参数调用不同实现,增加代码灵活性和可读性,例如:
class Overload {
    public void display(char c) {
        System.out.println(c);
    }
    public void display(char c, int num) {
        System.out.println(c + " " + num);
    }
}
  • 方法重写:发生在子类和父类之间,子类重写父类方法以实现更具体行为,运行时根据对象实际类型决定调用的方法实现,例如:
class Animal {
    public void makeSound() {
        System.out.println("My sound varies based on my type");
    }
}
class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("I bark");
    }
}
  1. 内部类与子类的区别
    • 内部类是嵌套在另一个类中的类,具有对其嵌套类的访问权限,可访问外部类中定义的所有变量和方法。
    • 子类是从另一个称为超类的类继承的类,可访问其父类的所有公共和受保护的方法以及字段。

(三)数据类型与变量

  1. 基本数据类型与包装类
    • Java的基本数据类型包括字节(byte)、短整型(short)、字符型(char)、整型(int)、长整型(long)、浮点型(float)、双精度型(double)、布尔型(boolean)。包装类则用于将原始数据类型包装为对象,以便在面向对象环境中使用,如Integer、Double等,提供了数据类型转换的多态API和实用程序方法,如hashCode()和equals()。
  2. 数据封装的意义与实现方式
    • 封装可帮助程序员遵循模块化方法进行软件开发,每个对象有自己的方法和变量,功能独立,还用于数据隐藏。实现方式包括将类声明为final,使其不可被继承;将类的所有成员声明为私有;不提供修改状态的API或公共方法,若有则应创建副本进行修改并返回;若成员可变,应声明为final;通过构造函数初始化对象,对可变对象参数进行深层克隆;不公开可变成员引用,如需公开应正确克隆并返回。
  3. 字符串相关
    • 字符串在Java中是不可变的,即创建后不可更改。字符串实例是具有两个字段(char[] value和int hash field)的对象,value表示字符串字符数组,hash用于存储字符串的hashCode,初始化为零,每次调用hashCode()时若为零则重新计算。字符串广泛用于共享参数、加载类、返回值等场景,因其不可变性,在多线程环境中自动变为线程安全,适用于HashMap或HashTable的键,且可从字符串池中获取字符串文字,提高性能。

评论