跳至主要內容
Java 中 @SuppressWarnings 注解用法详解

说明

J2SE5.0 提供了一个注解 @SuppressWarnings。该注解的作用是给编译器一条指令,告诉它对被批注的代码元素内部的某些警告保持静默。
@SuppressWarnings 批注允许您选择性地取消特定代码段(即类或方法)中的警告。
其中的想法是当您看到警告时,您将调查它,如果您确定它不是问题,您就可以添加一个 @SuppressWarnings 批注,以使您不会再看到警告。

警告

@SuppressWarnings 就像一粒 止疼片, 本质上并未解决任何问题. 只是在编译期间通过抑制不抛警告而已.


GuoCay原创...大约 3 分钟JavaJDK
Java虚拟机类加载过程
Java虚拟机类加载过程
Java虚拟机类加载过程

loadClass(): 对应加载阶段

根据类名获取锁对象, 并通过synchronized加锁.

这个加锁操作保证了只会有一个线程对当前类进行加载, 解决了多线程重复加载的问题.

findLoadedClass(): 在JVM方法区找一下是否存在当前Class对象并返回.


GuoCay原创...大约 3 分钟JavaJVM
Java虚拟机内存布局

MarkWord

状态 54位 2位 1位 分代年龄(4位) 是否偏向(1位) 锁标记(2位)
无锁 HashCode(31位,前25位无用.) 无用 分代年龄 0 01
偏向锁 线程ID epoch 无用 分代年龄 10
轻量级锁 指向持有锁线程的lockRecord的指针(62位) 00
重量级锁 指向monitor的指针(62位) 10
GC标记 CMS过程中用到的标志位(62位) 11

GuoCay原创...小于 1 分钟JavaJDK
Java位运算符
操作符 实例 等效于 备注
<< 左移 // 8int a = 1 << 3 int a = 1 * 2^3 左移操作相当于 左移数 乘以2的N次幂(正整数, 需要考虑int的最大值)左移操作的本质是将数字转换为二进制,舍弃前N位.向后补N个0;
>> 右移 int a = 1 >> 3 `` 右移操作的本质是将数字转换为二进制,舍弃后N位,向前补N个0;
>>> 无符号右移 `` 忽略符号位, 空位补0 ``
& 与 // 1int a = 1 & 1// 0int b = 1 & 0// 0int c = 0 & 0 `` 与计算是将两个数的二进制表示后进行对位比较,仅当同位都为1时输出1,否则输出0;
// 1int a = 1 1// 1int b = 1
^ 位异或 `` 二进制表达后,相同位置的数相同为0,相反为1. ``
~ 位非 `` 二进制表达后,取反 ``

GuoCay原创...小于 1 分钟JavaJDK
Spring及SpringBoot开发扩展点
Spring及SpringBoot开发扩展点
Spring及SpringBoot开发扩展点

ResourceLoader

资源加载器

BeanDefinitionReader

Bean定义信息读取者


GuoCay原创...小于 1 分钟JavaSpringSpring Boot开发笔记
Spring框架refresh()执行流程
Spring框架refresh函数执行流程
Spring框架refresh函数执行流程

prepareRefresh(): 准备刷新

  • 设置启动时间
  • 容器关闭标示符设置为false
  • 容器可用标示符设置为true
  • initPropertySources(): 钩子函数, 初始化属性资源,
  • getEnvironment().validateRequiredProperties(): 验证必要属性必须存在.
  • 清空已有的监听器(如果有的话),并重新从applicationListeners属性中加载

GuoCay原创...大约 4 分钟JavaSpring开发笔记
SpringBoot框架run()执行流程
SpringBoot框架run函数执行流程
SpringBoot框架run函数执行流程

记录启动时间

createBootstrapContext(): 创建启动上下文

  • 创建一个 DefaultBootstrapContext 对象
  • 执行所有注册的 BootstrapRegistryInitializer 对象

GuoCay原创...大约 5 分钟JavaSpring Boot开发笔记
JDK1.8的新特性及在项目中的一些应用

前言

  1. 从我们将项目的jdk版本更新至1.8后,到目前为止已经有很长时间了.但现在的编程思想还是基于jdk1.6的路子.其实,可以通过一些jdk8的新特性所折射出的思维和工具类来改变我们对编程方式的改变.

衡量一个高级编程语言的实用性有很多方面.但最基本的无外乎这几点,编程思想,集合机制,垃圾回收机制,异常机制,多线程机制等等.在CPU多核化的当下,串并行流机制也成为衡量的指标之一.如何使用并行技术在多核CPU中来降低程序的执行时间,也将成为我们优化代码效率一个事倍功半的思路.
3.
就拿我们朝夕相处的Java来说,在对jdk5使用了这么多年以来.在编程的过程中,也发现了一些jdk5的局限性.就拿java引以为傲的OOP来说.它确实是一个很高级的思维方式,在应对业务场景复杂度提高和降低开发门槛上有很大的优越性.但他对某些业务场景简单的应用或单一功能上的表现却显得有点臃肿.举个例子,在我接触的大部分公司中都不是太热衷于使用Spring
JPA或Herbinate等OOP思维的ORM框架,反倒更喜欢用Mybatis这种需要直接操作过程语言SQL这样的ORM.他们大多数的理由是Herbinate对于优化的成本偏高.而直接操作SQL的成本低.其实,这就侧面说明了一个问题,在某些方面上我们还是愿意使用POP思维进行编程.当然,造成这个结果的还有一部分原因是使用的是关系数据库.函数式编程和面向对象编程有机的结合在一起才能更好的以敏捷开发的方式来实现业务逻辑.
4. NullPointException,程序员最亲切的异常.也是最头疼的异常.没有之一.相较于C语言,几乎所有的高级编程语言都对指针的概念进行尽可能的模糊.但基于堆栈式的存储结构来说,空指针是我们永远也绕不开的一个痛点.
5. 针对以上的这些问题,jdk8相较于jdk5给了我们一些不敢说完美的解决方案,但还是能说,尚可.


GuoCay原创...大约 21 分钟JavaJDK代码片段