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