青云博客 记录、分享

ArrayList和LinkedList有什么区别

ArrayList和LinkedList是Java集合框架中List接口的两个常见实现类,它们在底层实现和性能特点上有以下几点区别: 底层数据结构:ArrayList使用数组来存储元素,而LinkedList使用双向链表来存储元素。 随机访问性能:ArrayList支持高效的随机访问(根据索引获取元

詹学伟 Published on 2024-04-22

什么是值传递和引用传递

值传递和引用传递是程序中常用的参数传递方式。 值传递是指在函数调用时,将实际参数的值复制一份传递给形式参数,在函数内对形式参数的修改不会影响到实际参数的值。这意味着函数内部对形参的改变不会影响到函数外部的变量。在值传递中,对形参的修改只作用于函数内部。 引用传递是指在函数调用

詹学伟 Published on 2024-04-22

Java支持多继承么,为什么

Java不直接支持多继承,即一个类不能同时继承多个父类。这是由设计上的考虑和语言特性决定的。 Java中选择了单继承的设计,主要出于以下几个原因: 继承的复杂性:多继承会引入菱形继承等复杂性问题。当一个类同时继承自多个父类时,可能会出现命名冲突、方法重复实现等问题,导致代码难以理解和维护。 接口的存

詹学伟 Published on 2024-04-22

构造器是否可被重写

构造器在Java中是一种特殊的方法,用于创建和初始化对象。与其他普通方法不同,构造器的名称必须与类名一致,并且没有返回类型。 在Java中,构造器不能被直接重写。子类无法定义与父类相同名称和参数的构造器。这是因为构造器是用于创建对象并初始化其状态的特殊方法,它与类的实例化密切相关。如果允许子类重写构

詹学伟 Published on 2024-04-22

"懒汉模式"和"饿汉模式"

懒汉模式和饿汉模式都是单例模式的实现方式,用于确保一个类只有一个实例存在。 懒汉模式:在首次使用时才进行对象的初始化,延迟加载实例。它可以避免不必要的资源消耗,但在多线程环境下需要考虑线程安全和同步开销。 饿汉模式:在类加载时就进行对象的初始化,无论是否需要。它通过类加载机制保证线程安全性,而且获取

詹学伟 Published on 2024-04-22

有哪些常见的运行时异常

运行时异常是在 Java 程序运行过程中才会出现的异常,通常情况下不需要进行 try-catch 处理。以下是 5 个常见的运行时异常: 空指针异常:当应用程序尝试使用 null 对象时抛出。 数组越界异常:当应用程序尝试访问数组元素的时候,数组下标超出了数组的范围。 类转换异常

詹学伟 Published on 2024-04-22

char型变量能存贮一个中文汉字吗

在Java中,char类型是用来表示单个字符的数据类型,它采用Unicode编码,可以存储各种字符,包括中文汉字。 由于Unicode编码使用16位来表示一个字符,char类型占用2个字节的内存空间。而中文汉字通常使用UTF-8编码,一个中文字符占用3个字节的存储空间。因此,将一个中文汉字直接赋值给

詹学伟 Published on 2024-04-22

2个不相等的对象有可能具有相同hashCode吗

有可能 两个不相等的对象有可能具有相同的哈希码。哈希码是由对象的哈希函数生成的一个整数值,用于支持快速查找和比较对象。 然而,由于哈希码的范围通常比对象的数量小得多,因此不同的对象可能会产生相同的哈希码。这种情况被称为哈希冲突。 哈希算法设计的目标是将不同的输入均匀分布在哈希码空间中,但无法避免完全

詹学伟 Published on 2024-04-22

synchronized的实现原理

synchronized是Java语言中最基本的线程同步机制,它通过互斥锁来控制线程对共享变量的访问。 具体实现原理如下: synchronized的实现基础是对象内部的锁(也称为监视器锁或管程),每个锁关联着一个对象实例。 当synchronized作用于某个对象时,它就会尝试获取这个对象的锁,如

詹学伟 Published on 2024-04-22

synchronized锁优化

synchronized还有一种重要的优化方式,即锁的优化技术。在Java 6及以上版本中,JVM引入了偏向锁、轻量级锁和重量级锁的概念来提高锁的性能。这些优化方式的原理如下: 偏向锁:偏向锁是指当一个线程获取到锁之后,会在对象头中记录下该线程的标识,下次再进入同步块时,无需进行额外的加锁操作,从而

詹学伟 Published on 2024-04-22
Previous Next