
Java SE
magic_time
这个作者很懒,什么都没留下…
展开
-
类加载、链接、初始化
类的字节码从磁盘上进入到内存里的五个大的阶段:加载:查找并加载类的二进制数据到内存,生产类的Class对象。连接:验证: 确保被加载的类的正确性准备:为类的静态变量分配内存,并将初始化默认值(类的实例变量还没有)解析:把类中的符号引用转换为直接引用初始化:为类的静态变量赋予正确的初始值使用(如创建类的对象,调用类的方法)卸载(将驻留在内存里的类的数据结构销毁掉,卸载后不能再使用该类创建对象了)初始化时机:Java程序对类的使用方式可分为两种:原创 2022-05-10 07:25:57 · 728 阅读 · 0 评论 -
UUID是什么
UUID含义是通用唯一识别码 (Universally Unique Identifier)。//得到32位的uuidpublic static String getUUID32(){ return UUID.randomUUID().toString().replace("-", "").toLowerCase(); }原创 2022-05-08 10:00:17 · 899 阅读 · 0 评论 -
volatile
volatile关键字是一种内存同步机制在访问volatile变量时不会执行加锁操作,因此也就不会使执行线程阻塞,因此volatile变量是一种比sychronized关键字更轻量级的同步机制。写:volatile关键字修饰的变量修改后会立刻写入内存读:当对非 volatile 变量进行读写的时候,每个线程先从内存拷贝变量到CPU缓存中。如果计算机有多个CPU,每个线程可能在不同的CPU上被处理,这意味着每个线程可以拷贝到不同的 CPU cache 中。而声明变量是 volatile 的,JVM原创 2022-05-08 09:58:43 · 211 阅读 · 0 评论 -
lambda 表达式
Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。ambda 表达式的语法格式如下:(parameters) -> expression或(parameters) ->{ statements; }以下是lambda表达式的重要特征:**可选参数类型声明:**不需要声明参数类型,编译器可以统一识别参数值。**可选的参数圆括号:**一个参数无需定义圆括号,但多个参数需要定义圆括号。**可选的大括号:**如果主体包含了一个语句,就不需要使用大括号。**可选原创 2022-05-08 09:57:02 · 332 阅读 · 0 评论 -
集合遍历 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 · 442 阅读 · 0 评论 -
可变长度参数列表
可变参数的实现是用数组形如:int... numspublic static int getMaxNumber(int... nums){}//传入数组,因为可变参数的实现就是用数组getMaxNumber(new int[]{4, 3, 24, 6});如果一个方法中不止一个参数,那么可变参数列表必须放到最后...原创 2022-05-08 09:54:55 · 251 阅读 · 0 评论 -
函数式接口
接口中只能有一个需要被实现的方法,不是规定接口中只能有一个方法**@FunctionalInterface:**修饰函数式接口的,要求接口中的抽象方法只有一个,不是函数式接口会报错。default, 接口中被 default 修饰的方法会有默认实现,不是必须被实现的方法,所以不影响函数式接口的定义四大函数式接口Consumer<T>消费型接口传入一个参数,不返回值@FunctionalInterfacepublic interface Consumer<T> {原创 2022-05-08 09:53:44 · 68 阅读 · 0 评论 -
stream
将要处理的集合,数组,I/O channel, 产生器generator 等看作一种流流中间操作都会返回流对象本身,内部迭代生成流在 Java 8 中, 集合接口有两个方法来生成流:stream() − 为集合创建串行流(普通的一个个执行)parallelStream() − 为集合创建并行流(多个线程并行操作元素,元素执行顺序可能会随机)forEachforEach() 来迭代流中的每个数据XXX.stream().forEach(System.out::println);map原创 2022-05-08 09:53:00 · 109 阅读 · 0 评论 -
程序中的魔法值
程序中的数字缺点:不利于程序阅读如果出错不好找出来解决办法:常量static final int XXX = xx;枚举enum Color { RED, GREEN, BLUE }原创 2022-05-08 09:52:04 · 204 阅读 · 0 评论 -
Java枚举
[修饰符] enum [枚举名][:基础类型]{ 枚举成员[, 枚举成员]}注意:如果没有显式地声明基础类型的枚举,那么意味着它所对应的基础类型是 int。枚举可用于switch枚举默认static修饰,枚举成员public static final修饰枚举的实质是类,枚举继承自java.lang.Enum类,但是java类只能继承一个类,所以枚举不能继承类,但是可以实现接口枚举可以添加属性和方法,但是只能放在枚举成员之后,构造函数只能使用 private 访问修饰符原创 2022-05-08 09:50:17 · 205 阅读 · 0 评论 -
Java内部类
四种:成员内部类、局部内部类、匿名内部类和静态内部类成员内部类成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员)。当成员内部类拥有和外部类同名的成员变量或者方法时,会发生隐藏现象,即默认情况下访问的是成员内部类的成员。如果要访问外部类的同名成员,需要以下面的形式进行访问:外部类.this.成员变量外部类.this.成员方法在外部类中如果要访问成员内部类的成员,必须先创建一个成员内部类的对象要创建成员内部类的对象,前提是必须存在一个外部类原创 2022-05-08 09:41:21 · 356 阅读 · 0 评论