在实际的Java开发过程中很多知识可能我们用到了,但是没有仔细、全面的去了解,这些知识点可能很基础,但是也很重要,而且容易被忽略,可能只有在面试的时候才会偶尔翻起来看,本课程就总结一些这类知识点,希望能加深一下印象。主要内容包括,面向对象编程思维、Java语法、集合、IO、多线程等等。
try-with-resources机制是Java 7新增的语法,它可以实现在try代码块结束后自动释放声明的资源,能够降低代码量,提高代码可读性
switch语句在开发中经常会用到,它主要用于替换多个if/else语句,提高代码的可读性,在Java 13以后,switch语句终于有了比较大的变化,变得更加好用
Lambda表达式是Java 8发布的新特性,主要是用于简化匿名内部类作为参数传递的写法,省去了一些模版代码,让代码更加简洁
在Java中final关键字可以修饰类、方法和变量,包括局部变量、成员变量、参数,不同的使用场景有不同的作用
在Java中会经常用到静态代码块和构造方法,但是还有一种代码块叫构造代码块,用的比较少,但是在面试时会因为代码块执行顺序而提到
equals和hashCode都是在java.lang.Object类定义的方法,equals用于比较当前对象和另外一个对象是否相等,而hashCode用于返回当前对象的哈希码,主要用于快速查找对象在基于哈希表集合中的存储位置
枚举可以看作中特殊的类,经常用于表示一组固定大小的常量,但是它的功能可比常量强大多了,因为枚举是根据面向对象的思维设计的,它具备大部分面向对象的优点
范型在Java开发中使用很广泛,主要是用于参数化类型,可以让我们在定义变量或者方法时,不用限制类型,让代码更加灵活、可扩展
动态代理在运行时动态生成代理类的字节码,然后加载并使用,而且无需实现代理接口的所有方法,弥补了静态代理的不足
HashMap是用于存储键值对的数据结构,基本的get和put操作时间复杂度是O(1),效率非常高,在Java 8中又对其进行了一系列优化,比如引入红黑树解决多次哈希碰撞导致的效率降低,还有扩容机制实现的优化
LinkedHashMap是HashMap的子类,它继承了HashMap大多数的优点,它和HashMap最大的不同点是,HashMap是无序的,而LinkedHashMap是有序的
在Java开发中,我们一般使用boolean类型来存储布尔值(true/false),但是我们有没有想过一个boolean类型的值会占用1个byte的内存,但是其实我们只需要1bit的内存就可以表示true/false
ReentrantLock是一个可重入的互斥锁,也就是说该锁在某一时刻只能被同一个线程所持有一次或者多次,通过调整构造参数可以实现公平锁和非公平锁
在Thread中有一个枚举类State,定义了线程生命周期中的六种不同状态,下面先看看线程这几种状态的流转图,然后再分别介绍线程是如何进入这几种不同的状态
在Java中使用多线程非常方便,但是你有没有想过Java中的多线程是怎么管理的,线程的调度是由谁来负责,有什么样的策略呢?今天介绍一些Java中的并发模型
Java程序启动时并不是把所有的类一次性都加载到内存中,而是当需要的时候才加载,ClassLoader即类加载器,就是负责在需要的时候将类加载到JVM中
垃圾收集机制是JVM一个非常重要的部分,它可以实现在Java程序运行中自动回收不用的内存,以提高内存利用率
本文学习一下在不同的环境下,boolean类型的的值在JVM中的内存占用,首先我们借助工具查看Java运行时某些对象占用的内存大小,然后再分析其中的原理
Java对象的内存占用主要分为三部分,对象头、成员变量以及内存对齐填充。本文主要探讨一下对象头中的字段,其内容主要包括两个部分,mark word和klass pointer
JVM目前有五种的垃圾收集器,分别是Serial垃圾收集器、Parallel垃圾收集器,Mostly Concurrent垃圾收集器和Z垃圾收集器
目前Java 11有超过800项JVM参数可配置,不过对于大部分开发者来说,可能用到的也不过几十个,下面就介绍一些常用的JVM参数
JIT即Just In Time的缩写,JIT编译器它是一个能够在运行时将字节码编译转化为机器码的编译器,它的主要目的是为了在运行时提升性能