自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(11)
  • 收藏
  • 关注

原创 类加载、链接、初始化

类的字节码从磁盘上进入到内存里的五个大的阶段: 加载:查找并加载类的二进制数据到内存,生产类的Class对象。 连接: 验证: 确保被加载的类的正确性 准备:为类的静态变量分配内存,并将初始化默认值(类的实例变量还没有) 解析:把类中的符号引用转换为直接引用 初始化:为类的静态变量赋予正确的初始值 使用(如创建类的对象,调用类的方法) 卸载(将驻留在内存里的类的数据结构销毁掉,卸载后不能再使用该类创建对象了) 初始化时机: Java程序对类的使用方式可分为两种:

2022-05-10 07:25:57 718 1

原创 UUID是什么

UUID含义是通用唯一识别码 (Universally Unique Identifier)。 //得到32位的uuid public static String getUUID32(){ return UUID.randomUUID().toString().replace("-", "").toLowerCase(); }

2022-05-08 10:00:17 897

原创 volatile

volatile关键字是一种内存同步机制 在访问volatile变量时不会执行加锁操作,因此也就不会使执行线程阻塞,因此volatile变量是一种比sychronized关键字更轻量级的同步机制。 写: volatile关键字修饰的变量修改后会立刻写入内存 读: 当对非 volatile 变量进行读写的时候,每个线程先从内存拷贝变量到CPU缓存中。如果计算机有多个CPU,每个线程可能在不同的CPU上被处理,这意味着每个线程可以拷贝到不同的 CPU cache 中。 而声明变量是 volatile 的,JVM

2022-05-08 09:58:43 204

原创 lambda 表达式

Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。 ambda 表达式的语法格式如下: (parameters) -> expression 或 (parameters) ->{ statements; } 以下是lambda表达式的重要特征: **可选参数类型声明:**不需要声明参数类型,编译器可以统一识别参数值。 **可选的参数圆括号:**一个参数无需定义圆括号,但多个参数需要定义圆括号。 **可选的大括号:**如果主体包含了一个语句,就不需要使用大括号。 **可选

2022-05-08 09:57:02 328

原创 集合遍历 foreach()

JAVA8新特性 public interface Iterable<T> { default void forEach(Consumer<? super T> action) { //判断action非空 Objects.requireNonNull(action); for (T t : this) { action.accept(t); } } } public inter

2022-05-08 09:55:26 440

原创 可变长度参数列表

可变参数的实现是用数组 形如:int... nums public static int getMaxNumber(int... nums){} //传入数组,因为可变参数的实现就是用数组 getMaxNumber(new int[]{4, 3, 24, 6}); 如果一个方法中不止一个参数,那么可变参数列表必须放到最后 ...

2022-05-08 09:54:55 248

原创 函数式接口

接口中只能有一个需要被实现的方法,不是规定接口中只能有一个方法 **@FunctionalInterface:**修饰函数式接口的,要求接口中的抽象方法只有一个,不是函数式接口会报错。 default, 接口中被 default 修饰的方法会有默认实现,不是必须被实现的方法,所以不影响函数式接口的定义 四大函数式接口 Consumer<T> 消费型接口 传入一个参数,不返回值 @FunctionalInterface public interface Consumer<T> {

2022-05-08 09:53:44 66

原创 stream

将要处理的集合,数组,I/O channel, 产生器generator 等看作一种流 流中间操作都会返回流对象本身,内部迭代 生成流 在 Java 8 中, 集合接口有两个方法来生成流: stream() − 为集合创建串行流(普通的一个个执行) parallelStream() − 为集合创建并行流(多个线程并行操作元素,元素执行顺序可能会随机) forEach forEach() 来迭代流中的每个数据 XXX.stream().forEach(System.out::println); map

2022-05-08 09:53:00 107

原创 程序中的魔法值

程序中的数字 缺点: 不利于程序阅读 如果出错不好找出来 解决办法: 常量 static final int XXX = xx; 枚举 enum Color { RED, GREEN, BLUE }

2022-05-08 09:52:04 203

原创 Java枚举

[修饰符] enum [枚举名][:基础类型] { 枚举成员[, 枚举成员] } 注意:如果没有显式地声明基础类型的枚举,那么意味着它所对应的基础类型是 int。 枚举可用于switch 枚举默认static修饰,枚举成员public static final修饰 枚举的实质是类,枚举继承自java.lang.Enum类,但是java类只能继承一个类,所以枚举不能继承类,但是可以实现接口 枚举可以添加属性和方法,但是只能放在枚举成员之后,构造函数只能使用 private 访问修饰符

2022-05-08 09:50:17 204

原创 Java内部类

四种:成员内部类、局部内部类、匿名内部类和静态内部类 成员内部类 成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员)。 当成员内部类拥有和外部类同名的成员变量或者方法时,会发生隐藏现象,即默认情况下访问的是成员内部类的成员。如果要访问外部类的同名成员,需要以下面的形式进行访问: 外部类.this.成员变量 外部类.this.成员方法 在外部类中如果要访问成员内部类的成员,必须先创建一个成员内部类的对象 要创建成员内部类的对象,前提是必须存在一个外部类

2022-05-08 09:41:21 352

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除