
java基础
伯约带你学java
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
自动装箱与拆箱了解吗?原理是什么?
资料,我根据我从小白到架构师多年的学习经验整理出来了一份。从字节码中,我们发现装箱其实就是调用了 包装类的。、 需要的小伙伴 可以关注我。方法,拆箱其实就是调用了。最近很多同学问我有没有。原创 2024-01-21 15:43:11 · 474 阅读 · 0 评论 -
HashMap 的长度为什么是 2 的幂次方
我们上面也讲到了过了,Hash 值的范围值-2147483648 到 2147483647,前后加起来大概 40 亿的映射空间,只要哈希函数映射得比较均匀松散,一般应用是很难出现碰撞的。但问题是一个 40 亿长度的数组,内存是放不下的。所以这个散列值是不能直接拿来用的。用之前还要先做对数组的长度取模运算,得到的余数才能用来要存放的位置也就是对应的数组下标。这也就解释了 HashMap 的长度为什么是 2 的幂次方。资料,我根据我从小白到架构师多年的学习经验整理出来了一份。、 需要的小伙伴 可以关注我。原创 2024-01-20 11:05:58 · 448 阅读 · 0 评论 -
HashMap 的底层实现#JDK1.8 之前
相比于之前的版本, JDK1.8 之后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为 8)(将链表转换成红黑树前会判断,如果当前数组的长度小于 64,那么会选择先进行数组扩容,而不是转换为红黑树)时,将链表转化为红黑树,以减少搜索时间。判断当前元素存放的位置(这里的 n 指的是数组的长度),如果当前位置存在元素的话,就判断该元素与要存入的元素的 hash 值以及 key 是否相同,如果相同的话,直接覆盖,不相同就通过拉链法解决冲突。所谓扰动函数指的就是 HashMap 的。原创 2024-01-20 11:04:50 · 420 阅读 · 0 评论 -
2024最新Java高频面试题总结(附答案PDF)春招面试必备!
这两部分内容相辅相成,前面的核心知识点介绍让后面的面试题更容易理解,后面的面试题加深了读者对于 Java 核心点的掌握。如此一来,让你所学及所用,不仅能够应付面试,更能学习到更多有价值的 Java 技术点,让你在面试中和工作中都能展示的更加出色。原创 2024-01-19 11:33:27 · 2023 阅读 · 0 评论 -
ArrayList 可以添加 null 值吗?
值无意义,会让代码难以维护比如忘记做判空处理就会导致空指针异常。中可以存储任何类型的对象,包括。原创 2024-01-18 11:18:43 · 534 阅读 · 0 评论 -
ArrayList 和 Vector 的区别?(了解即可)
ArrayList 是 List 的主要实现类,底层使用 Object[]存储,适用于频繁的查找工作,线程不安全 。原创 2024-01-18 11:14:32 · 387 阅读 · 0 评论 -
静态变量有什么作用?
它可以被类的所有实例共享,无论一个类创建了多少个对象,它们都共享同一份静态变量。也就是说,静态变量只会被分配一次内存,即使创建多个对象,这样可以节省内存。静态变量是通过类名来访问的,例如。关键字修饰就无法这样访问了)。通常情况下,静态变量会被。关键字修饰成为常量。原创 2024-01-13 14:10:52 · 402 阅读 · 0 评论 -
HashMap 为什么线程不安全?
数据丢失这个在 JDK1.7 和 JDK 1.8 中都存在,这里以 JDK 1.8 为例进行介绍。中,多个键值对可能会被分配到同一个桶(bucket),并以链表或红黑树的形式存储。操作会导致线程不安全,具体来说会有数据覆盖的风险。JDK1.7 及之前版本,在多线程环境下,扩容时会造成死循环和数据丢失的问题。还有一种情况是这两个线程同时。JDK 1.8 后,在。原创 2024-01-13 14:02:35 · 467 阅读 · 0 评论 -
静态变量有什么作用?
它可以被类的所有实例共享,无论一个类创建了多少个对象,它们都共享同一份静态变量。也就是说,静态变量只会被分配一次内存,即使创建多个对象,这样可以节省内存。静态变量是通过类名来访问的,例如。关键字修饰就无法这样访问了)。通常情况下,静态变量会被。关键字修饰成为常量。原创 2024-01-10 14:10:16 · 540 阅读 · 0 评论 -
成员变量与局部变量的区别?
对于编译器(javac)来说,局部变量没赋值很好判断,可以直接报错。而成员变量可能是运行时赋值,无法判断,误报“没默认值”又会影响用户体验,所以采用自动赋默认值。默认值有两种设置方式:手动和自动,根据第一点,没有手动赋值一定要自动赋值。成员变量在运行时可借助反射等方法手动赋值,而局部变量不行。先不考虑变量类型,如果没有默认值会怎样?变量存储的是内存地址对应的任意随机值,程序读取该值运行会出现意外。原创 2024-01-10 14:08:39 · 411 阅读 · 0 评论 -
接口和抽象类有什么共同点和区别?
接口中的成员变量只能是 public static final 类型的,不能被修改且必须有初始值,而抽象类的成员变量默认 default,可在子类中被重新定义,也可被重新赋值。原创 2024-01-04 14:15:27 · 450 阅读 · 0 评论 -
JAVA基本类型和包装类型的区别
staticnullnull====equals()这是因为 HotSpot 虚拟机引入了 JIT 优化之后,会对对象进行逃逸分析,如果发现某一个对象并没有逃逸到方法外部,那么就可能通过标量替换来实现栈上分配,而避免堆上分配内存基本数据类型的成员变量如果没有被static修饰的话(不建议这么使用,应该要使用基本数据类型对应的包装类型),就存放在堆中。原创 2023-12-30 11:34:37 · 407 阅读 · 0 评论 -
java三种注释方式
通常用于解释方法内某单行代码的作用。:通常用于生成 Java 开发文档。:通常用于解释一段代码的作用。原创 2023-12-30 11:30:14 · 473 阅读 · 0 评论 -
hashCode()方法如何理解?
hashCode() 返回散列值,而 equals() 是用来判断两个对象是否等价。等价的两个对象散列值一定相同,但是散列值相同的两个对象不一定等价。在覆盖 equals() 方法时应当总是覆盖 hashCode() 方法,保证等价的两个对象散列值也相等。下面的代码中,新建了两个等价的对象,并将它们添加到 HashSet 中。原创 2023-12-25 10:47:43 · 406 阅读 · 0 评论 -
java关键字--Super
访问父类的构造函数: 可以使用 super() 函数访问父类的构造函数,从而委托父类完成一些初始化的工作。 访问父类的成员: 如果子类重写了父类的中某个方法的实现,可以通过使用 super 关键字来引用父类的方法实现。原创 2023-12-24 10:47:48 · 392 阅读 · 0 评论 -
java抽象类与接口
抽象类和抽象方法都使用 abstract 关键字进行声明。抽象类一般会包含抽象方法,抽象方法一定位于抽象类中。抽象类和普通类最大的区别是,抽象类不能被实例化,需要继承抽象类才能实例化其子类。接口是抽象类的延伸,在 Java 8 之前,它可以看成是一个完全抽象的类,也就是说它不能有任何的方法实现。从 Java 8 开始,接口也可以拥有默认的方法实现,这是因为不支持默认方法的接口的维护成本太高了。在 Java 8 之前,如果一个接口想要添加新的方法,那么要修改所有实现了该接口的类。原创 2023-12-22 14:55:06 · 363 阅读 · 0 评论 -
一文理解透static关键字【Java】
静态方法在类加载的时候就存在了,它不依赖于任何实例。所以静态方法必须有实现,也就是说它不能是抽象方法(abstract)。只能访问所属类的静态字段和静态方法,方法中不能有 this 和 super 关键字。静态语句块在类初始化时运行一次。非静态内部类依赖于外部类的实例,而静态内部类不需要。静态内部类不能访问外部类的非静态的变量和方法。在使用静态变量和方法时不用再指明 ClassName,从而简化代码,但可读性大大降低。原创 2023-12-20 11:14:06 · 686 阅读 · 0 评论 -
final关键字
声明数据为常量,可以是编译时常量,也可以是在运行时被初始化后不能被改变的常量。声明方法不能被子类重写。private 方法隐式地被指定为 final,如果在子类中定义的方法和基类中的一个 private 方法签名相同,此时子类的方法不是重写基类方法,而是在子类中定义了一个新的方法。声明类不允许被继承。原创 2023-12-20 10:54:25 · 359 阅读 · 0 评论 -
java三大特性
继承实现了关系,例如 Cat 和 Animal 就是一种 IS-A 关系,因此 Cat 可以继承自 Animal,从而获得 Animal 非 private 的属性和方法。继承应该遵循里氏替换原则,子类对象必须能够替换掉所有父类对象。Cat 可以当做 Animal 来使用,也就是说可以使用 Animal 引用 Cat 对象。父类引用指向子类对象称为。原创 2023-12-15 14:40:21 · 914 阅读 · 0 评论