1. Java的基本数据类型包括
  • 整数类型:byte(1字节)、short(2字节)、int(4字节)、long(8字节,需加L或l后缀)
  • 浮点类型:float(4字节,需加F或f后缀)、double(8字节)
  • 字符类型:char(2字节,采用Unicode编码)
  • 布尔类型:boolean(表示true或false,不能用0或非0表示)
  1. 自动装箱与拆箱是什么?
    自动装箱是指基本数据类型自动转换为对应的包装类型(如int转为Integer),自动拆箱则相反。这是Java 5引入的特性,旨在简化基本数据类型与包装类型之间的转换。
  2. 分别介绍一下JDK、JRE、JVM
    JDK 是Java 开发工具包。jdk 是整个 Java 开发的核心,是我们识别java语法的基础,包含jvm。
    JRE是Java 运行时环境。它主要包含两个部分:jvm 和 Java 的一些基本类库。
    JVM 是Java虚拟机,我们最终的代码会运行在JVM上。JVM是跨平台的.
  3. ==和equals的区别
    对于基本数据类型==是比较的值,对于引用数据类型来说,==比较的是引用地址.
    equals是用于引用数据类型,通常通过重写类的equals方法来实现比较值是否相等,没有重写 equals() 方法,则默认行为是比较两个对象的引用地址是否相同,即和 == 的效果一样.
  4. 面向对象的特征有哪些
  • 抽象:忽略与当前目标无关的细节,只关注必要的部分。
  • 继承:允许新类继承现有类的属性和方法,实现代码复用。
  • 封装:将数据与操作数据的方法结合,隐藏对象的内部实现细节。
  • 多态:允许不同类的对象对同一消息作出响应,实现接口的重用。
  1. 类、对象、实例的关系是什么
    类是对象的模板,定义了对象的属性和方法;对象是类的实例,具有类的所有属性和方法;实例是对象创建时的具体形态。
  2. Java中的访问修饰符有哪些?它们的区别是什么
  • private:仅在当前类中可见。
  • default(不写时默认为default):在当前包内可见。
  • protected:在当前包内及子类(无论子类在哪个包)中可见。
  • public:在任何地方都可见。
  1. String、StringBuilder和StringBuffer的区别是什么
  • String:不可变类,每次操作都会生成新的String对象。
  • StringBuilder:可变类,线程不安全,适用于单线程环境下的字符串拼接。
  • StringBuffer:可变类,线程安全,适用于多线程环境下的字符串拼接。
  1. String a = “123” 和 String a = new String(“123”) 的区别是什么
    前者会在字符串常量池中查找是否存在"123",若存在则直接引用,不存在则创建后引用;后者一定会在堆上创建一个新的String对象,内容为"123",然后a引用这个对象。
  2. Java中的异常处理机制是怎样的
    Java中的异常处理通过try-catch-finally语句实现。try块中放置可能抛出异常的代码,catch块用于捕获并处理异常,finally块无论是否发生异常都会执行,常用于释放资源。
  3. Error和Exception的区别是什么
  • Error:表示程序运行时JVM内部错误或资源耗尽等严重问题,通常无法恢复。
  • Exception:表示程序可以捕获并处理的异常情况,可以通过try-catch语句进行捕获和处理。
  1. Java中的泛型(Generics)是如何工作的
    Java中的泛型是JDK 5引入的一个特性,它提供了编译时类型安全检测机制,允许程序员在编译时检测到非法的类型。泛型的工作原理主要体现在以下几个方面:
  • 类型参数化:在定义类、接口或方法时,可以指定一个或多个类型参数,这些类型参数在运行时会被具体的类型所替换。
  • 类型擦除:泛型信息只存在于编译时,在运行时,JVM会将泛型类型擦除为它的原始类型(如List会被擦除为List),并通过类型转换和类型转换安全检查来保证类型安全。
  • 泛型与继承:泛型与继承的关系比较复杂,通常情况下,子类不能改变父类的泛型类型参数。
  1. Java中的final关键字有哪些用法
    final是Java中的一个修饰符,它可以用来修饰类、方法和变量。final的用法主要包括:
  • 修饰类:表示该类不能被继承。
  • 修饰方法:表示该方法不能被重写。
  • 修饰变量:表示该变量的值一旦被初始化后就不能被改变(对于基本数据类型的变量,其值不可变;对于引用类型的变量,其引用不可变,但对象本身的内容可变)。
  1. Java中的静态方法(static method)和非静态方法(non-static method)有什么区别
  • 静态方法属于类,可以通过类名直接调用,不需要创建类的实例。
  • 非静态方法属于类的实例,需要通过类的对象来调用。
  • 静态方法中不能直接访问类的非静态成员(变量和方法),反之亦然。
  1. Java中的接口(Interface)和抽象类(Abstract Class)有什么区别
  • 接口是一种引用类型,是一种特殊的类,只包含抽象方法和常量,不能有实例,新版本中可以有default方法。
  • 抽象类不能被实例化,至少包含一个抽象方法,可以有非抽象方法和变量。
  • 一个类可以实现多个接口,但只能继承一个抽象类。