当前位置: 首页 > news >正文

JavaSE高级-01

文章目录

  • 1. 异常
    • 异常的分类
    • 自定义异常
    • 异常的处理
    • 资源关闭:try-with-resource
  • 2. 泛型
    • 泛型类
    • 泛型接口
    • 泛型方法、通配符、上下限
    • 通配符
    • 泛型的上下限
    • 泛型支持的类型
  • 3. 包装类
  • 4. Collection集合和Map集合
    • 4.1 Collection集合
      • Collection集合特点
      • Collection的遍历方式一:迭代器遍历
      • Collection的遍历方式二:增强for循环
      • Collection集合的遍历方式三:Lambda表达式
      • 解决并发修改异常问题的方案
    • 4.2 List集合
      • 4.2.1 ArrayList的底层原理
      • 4.2.2 LinkedList的底层原理
    • 4.3 Set集合
      • 4.3.1 HashSet集合的底层原理
      • 4.3.2 LinkedHashSet集合的底层原理
      • 4.3.3 TreeSet集合的底层原理
    • 4.4 Collection集合总结
  • 5. Map集合
    • 5.1 HashMap集合的底层原理
    • 5.2 LinkedHashMap集合的原理
    • 5.3 TreeMap集合的原理
  • 6. File、字符集和IO流
    • 6.1 File
    • 6.2 字符集
      • 标准ASCII字符集
      • GBK(汉字内码扩展规范,国标)
      • Unicode字符集(统一码,也叫万国码)
      • UTF-8
      • 总结
      • 编码、解码
    • 6.3 IO流
      • IO流的分类
      • 缓冲流
      • 字符输入转换流
      • 打印流
      • 特殊数据流
    • 6.4 IO框架
      • Commons-io框架(commons-io-2.6.jar)

1. 异常

在这里插入图片描述

异常的分类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

自定义异常

在这里插入图片描述

异常的处理

两种处理方式:
在这里插入图片描述

资源关闭:try-with-resource

JDK 7开始提供了更简单的资源释放方案:try-with-resource。

try (定义资源1;定义资源2;…){可能出现异常的代码;
} catch (异常类名 变量名){异常的处理代码;
} 

该资源使用完毕后,会自动调用其 close() 方法,完成对资源的释放!
在这里插入图片描述

2. 泛型

定义类、接口、方法时,同时声明了一个或者多个类型变量(如:E、T、K、V)称为泛型类、泛型接口,泛型方法、它们统称为泛型。

作用:泛型提供了在编译阶段约束所能操作的数据类型,并自动进行检查的能力!这样可以避免强制类型转换,及其可能出现的异常。

泛型类

##形如:
修饰符 class 类名<类型变量,类型变量,…> { 
}##例如:
public class ArrayList<E>{. . .
}

泛型接口

##形如:
修饰符 interface 接口名<类型变量,类型变量,…> { 
}##例如:
public interface A<E>{. . .
}

泛型方法、通配符、上下限

##形如:
修饰符 <类型变量,类型变量,…>  返回值类型 方法名(形参列表) { 
}##例如:
public static <T> void test(T t){. . .
}

在这里插入图片描述

通配符

就是 “?” ,可以在“使用泛型”的时候代表一切类型; E T K V 是在定义泛型的时候使用。

泛型的上下限

  • 泛型上限(? extends Car)? 能接收的必须是Car或者其子类。
  • 泛型下限(? super Car)? 能接收的必须是Car或者其父类。

泛型支持的类型

泛型不支持基本数据类型,只能支持对象类型(引用数据类型)。

3. 包装类

在这里插入图片描述
自动装箱:基本数据类型可以自动转换为包装类型。
自动拆箱:包装类型可以自动转换为基本数据类型。

4. Collection集合和Map集合

在这里插入图片描述
Collection是单列集合的祖宗,它规定的方法(功能)是全部单列集合都会继承的。
在这里插入图片描述

4.1 Collection集合

Collection集合特点

在这里插入图片描述在这里插入图片描述

Collection的遍历方式一:迭代器遍历

迭代器是用来遍历集合的专用方式(数组没有迭代器),在Java中迭代器的代表是Iterator。
在这里插入图片描述

Iterator<String> it = lists.iterator();
while(it.hasNext()){String ele = it.next();System.out.println(ele);
}

Collection的遍历方式二:增强for循环

增强 for 可以用来遍历集合或者数组。
增强 for 遍历集合,本质就是迭代器遍历集合的简化写法。

Collection<String> c = new ArrayList<>();
for(String s : c) {System.out.println(s);
}

Collection集合的遍历方式三:Lambda表达式

得益于JDK 8开始的新技术Lambda表达式,提供了一种更简单、更直接的方式来遍历集合。
在这里插入图片描述

lists.forEach(s -> {System.out.println(s);
});
##  
lists.forEach(s -> System.out.println(s));

解决并发修改异常问题的方案

在这里插入图片描述

4.2 List集合

在这里插入图片描述在这里插入图片描述

4.2.1 ArrayList的底层原理

在这里插入图片描述

4.2.2 LinkedList的底层原理

LinkedList底层是基于链表存储数据的。
链表中的数据是一个一个独立的结点组成的,结点在内存中是不连续的,每个结点包含数据值和下一个结点的地址。

链表的特点:

  • 特点1查询慢,无论查询哪个数据都要从头开始找。
  • 特点2:链表增删相对快。
  • 特点3:基于双链表实现的。(对首尾元素进行增删改查的速度是极快的)

LinkedList的应用场景之一:可以用来设计队列

// 目标:用LinkedList做一个队列对象。
LinkedList<String> queue = new LinkedList<>();
// 入队
queue.addLast("赵敏");
queue.addLast("西门吹雪");
queue.addLast("陆小凤");
queue.addLast("石观音");
System.out.println(queue); // [赵敏, 西门吹雪, 陆小凤, 石观音]// 出队
System.out.println(queue.removeFirst());
System.out.println(queue.removeFirst());
System.out.println(queue);

LinkedList的应用场景之二:可以用来设计栈

// 做一个栈
LinkedList<String> stack = new LinkedList<>();
// 压栈
stack.push("第1颗子弹");
stack.push("第2颗子弹");
stack.push("第3颗子弹");
stack.push("第4颗子弹");
System.out.println(stack);  // [第4颗子弹, 第3颗子弹, 第2颗子弹, 第1颗子弹]// 出栈
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack);

4.3 Set集合

Set集合特点
在这里插入图片描述
在这里插入图片描述

4.3.1 HashSet集合的底层原理

HashSet基于哈希表存储数据的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.3.2 LinkedHashSet集合的底层原理

在这里插入图片描述

4.3.3 TreeSet集合的底层原理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

4.4 Collection集合总结

在这里插入图片描述

5. Map集合

Map是双列集合的祖宗,它的功能是全部双列集合都可以继承过来使用的。
在这里插入图片描述
在这里插入图片描述
常用方法
在这里插入图片描述

5.1 HashMap集合的底层原理

HashMap用的最多,HashMap跟HashSet的底层原理是一模一样的,都是基于哈希表实现的。
在这里插入图片描述

5.2 LinkedHashMap集合的原理

在这里插入图片描述

5.3 TreeMap集合的原理

在这里插入图片描述
在这里插入图片描述

6. File、字符集和IO流

在这里插入图片描述

File是java.io.包下的类, File类的对象,用于代表当前操作系统的文件(可以是文件、或文件夹),不能读写文件里面存储的数据。

IO流用于读写数据的(可以读写文件,或网络中的数据…)。

6.1 File

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
File提供的判断文件类型、获取文件信息功能
在这里插入图片描述
File提供的创建和删除文件的方法
在这里插入图片描述File提供的遍历文件夹的方法

在这里插入图片描述

6.2 字符集

标准ASCII字符集

在这里插入图片描述

GBK(汉字内码扩展规范,国标)

在这里插入图片描述

Unicode字符集(统一码,也叫万国码)

在这里插入图片描述

UTF-8

在这里插入图片描述

总结

在这里插入图片描述
注意1:字符编码时使用的字符集,和解码时使用的字符集必须一致,否则会出现乱码。
注意2:英文,数字一般不会乱码,因为很多字符集都兼容了ASCII编码。

编码、解码

在这里插入图片描述

6.3 IO流

IO流的分类

在这里插入图片描述
在这里插入图片描述

缓冲流

在这里插入图片描述
BufferedInputStream缓冲字节输入流、BufferedOutputStream缓冲字节输出流
在这里插入图片描述
在这里插入图片描述
BufferedReader缓冲字符输入流
在这里插入图片描述
在这里插入图片描述
BufferedWriter缓冲字符输出流
在这里插入图片描述
在这里插入图片描述

字符输入转换流

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

打印流

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

特殊数据流

在这里插入图片描述
DataOutputStream(数据输出流)
在这里插入图片描述
DataInputStream(数据输入流)
在这里插入图片描述

6.4 IO框架

封装了Java提供的对文件、数据进行操作的代码,对外提供了更简单的方式来对文件进行操作,对数据进行读写等。

Commons-io框架(commons-io-2.6.jar)

在这里插入图片描述

http://www.lryc.cn/news/619429.html

相关文章:

  • BGP 笔记梳理
  • 分布式事务DTP模型
  • Vue3 vs Vue2:全面对比与面试宝典
  • 递归函数与 lambda 函数:用法详解与实践
  • Pixelorama 1.1.3 像素动画编辑制作
  • 科普:Pygame 中的坐标系
  • 猫头虎AI分享:Excel MCP,让AI具备操作Excel表格|创建销售数据表、复制工作表、填充数据、写公式、绘制图表、调节颜色、添加透视表、保存为PDF
  • python与JavaScript的区别
  • Unity3d UGUI图片按钮只有非透明区域(透明阈值)可以点击功能实现(含源码)
  • 高级IO(五种IO模型介绍)
  • C# 多线程:并发编程的原理与实践
  • I2c、SPI、USB驱动架构类比
  • 2025年,Javascript后端应该用 Bun、Node.js 还是 Deno?
  • 欧姆龙E6B2-CWZ6C旋转编码器参数说明+示例代码
  • SQL详细语法教程(二)--DML(数据操作语言)和DQL(数据查询语言)
  • PostgreSQL——索引
  • 【Unity3D】Spine黑线(预乘问题)、贴图边缘裁剪问题
  • django request.data.get 的值修改
  • 基于Tensorflow2.15的图像分类系统
  • C++中的`auto`与`std::any`:功能、区别与选择建议
  • Android 在 2020-2025 都做哪些更新?
  • 从0开始跟小甲鱼C语言视频使用linux一步步学习C语言(持续更新)8.13
  • 数据治理之元数据管理
  • TensorFlow实现回归分析详解
  • PyTorch基础(使用TensorFlow架构)
  • CSS counter-reset 与 counter-increment:用 CSS 实现自动编号的黑科技
  • 【贪心算法】加油站
  • TensorFlow深度学习实战(31)——强化学习仿真库Gymnasium
  • 【IntelliJ IDEA】如何在pom.xml中去除maven中未使用的依赖
  • 七大排序算法全解析:从入门到精通