【思维导图】java并发(含volatile,单例,线程池,消息队列,事务)
Java程序设计(基础)思维导图-简单高清脑图_知犀思维导图思维导图-简单高清脑图_知犀
Java程序设计(基础)概述特点面向对象平台可移植性分布式多线程安全性工作方式开发工具JDKjavacjava javadocIDElntelliJEclipse NetBeans术语JDK JREJVM API源程序结构package管理类解决命名冲突import class 注释行注释//块注释/*…*/文档注释/**…*/@author @param@return @throws基本语法关键字有特殊含义的单词(50)能用的(48)不能用的(2)gotoconst 标识符给类、接囗、方法、变量等起的名字命名规则字母、数字、下划线和$,数字不能开头大小写敏感不能跟关键字和保留字(null、true、false)冲突见名知意驼峰标识类名每个单词首字母大写变量和方法名从第二个单词开始每个单词首字母大写命名常量全大写,多个单词用下划线隔开运算符分类算术运算符赋值运算符关系运算符短路运算符条件运算符(三目运算符)自增/自减运算符正负号运算符移位运算符布尔运算符位运算符new 创建对象instanceof运行时类型识别()强制类型转换改变运算优先级[]下标运算符.取成员运算符优先级搞不清楚优先级直接加()结合性从左向右从右向左赋值运算自加自减条件运算正负号字面量整型字面量:100、100L浮点型字面量:3.5、3.5F、3.123e2字符字面量:'a'、'\t'、'\123'布尔型字面量:true、false引用字面量:null类型字面量:String.class、int.class分隔符数据类型基本类型整叙byteshortintlong小数floatdoublecharboolean 枚举类型enum引用类型String数组自定义的类或接囗面向对象基本概念类对象的蓝图和模板类与类之间的关系IS-A:继承泛化实现HAS-A:关联关联聚合合成USE-A:依赖定义类[访问修饰符] [修饰符] class类名 [extends 父类] [implements 接囗1,接口2,...] {}属性:数据抽象方法:行为抽象构造器创建对象:new构造器()对象一切皆为对象对象都有属性和行为对象都是唯一的对象都属于某个类消息调用对象的方法就是给对象发送了一个消息一个对象能够接受某种消息,就意味着该对象向外界提供了某种服务三大支柱封装隐藏一切可隐藏的实现细节,只暴露最简单的编程接囗继承从已有类创建新类的过程提供继承信息的类叫父类(基类、超类)得到继承信息的类叫子类(派生类)子类可以继承到父类中public、protected的属性和方法Java中的继承是单继承Object类是所有类的父类多态定义解释1:同样的引用调用同样的方法却做了不同的事情解释2:当A系统访问B系统提供的服务时,B系统有多种提供服务的方式,但对A系统来说是透明的实现方法重写:不同的子类对父类的同一方法给出不同的实现版本对象造型:用父类型的引用引用子类型的对象相关内容访问修饰符类public默认方法、属性、内部类public protected默认private抽象类如果一个类有抽象方法,这个类必须被声明为抽象类抽象类中可以没有抽象方法,抽象类也可以有自己的构造器抽象类不能实例化(不能创建对象)强烈建议:将被继承的类设计成抽象类接囗接囗是约定:实现接囗的类必须重写接口中所有方法,否则就要声明为抽象类接囗代表能力:实现了接囗的类就具备了接囗所描述的能力接囗是一种角色:一个类可以实现多个接囗,一个接囗也可以被多个类实现Java中的接囗单方法接囗:这个唯一的方法通常都是回调方法ActionListener Runnable Comparable标识接囗:没有方法,但是表示了某种能力CloneableSerializable常量接囗:这是接囗最不正确的用法内部类相当于外部类中的一个属性内部类可以访问外部类的私有成员设计原则单一职责原则专业化模块化开闭原则抽象是关键封装可变性依赖倒转原则里氏替换原则接囗隔离原则合成聚合复用原则迪米特法则字符串String创建字符串对象String s="Hello";s引用静态区的字符串字面量String s=new String(Hello")s引用堆上的字符串对象字符串的方法长度:length()取字符:charAt(int)变大/小写:toUpperCase()/toLowerCase()连接:concat(String)比较:equals(String)/compareTo(String)判断开头/结尾:startsWith(String)/endsWith(String)模式匹配:indexOf(String,[int])/lastlndexOf(String,[int]取子串:substring(int,[int])修剪左右两边空白:trim()替换:replace(String,String)/replaceAII(String,String拆分:split(String)String代表的是不变字符串可以被修改的字符串StringBuilder 适用于单线程环境StringBuffer适用于多个线程操作同一个字符串的场景方法在指定位置插入字符串:insert(int,String)删除指定位置的字符:delete(int,int)倒转:reverse()追加:append(String)方法[访问修饰符] [修饰符]返回类型方法名([参数列表])[异常声明]访问修饰符public protected默认private修饰符static abstractfinal修饰变量,变量变成常量修饰类,类不能被继承修饰方法,方法不能被重写synchronizednative方法调用静态方法:类名.方法名(实参列表)非静态方法:对象.方法名(实参列表)递归数组基本用法数组的定义数组的初始化new静态初始化length属性下标运算Arrays工具类sort:排序toString:将数组变成字符串copyOf:数组拷贝equals:比较数组元素是否相同二维数组一个普通数组,每个元素又是一个数组应用表格矩阵2D游戏中的地图棋盘流程控制循环结构分类while循环do…while循环for循环for-each循环相关关键字breakcontinue分支结构if...elseswitch...case...default顺序结构。
《Java高并发核心编程(卷2):多线程、锁、JMM、JUC、》读书笔记PPT模板思维导图下载
1.2.3 进程与线 程的区别
1.3.1 Thread类 详解
1.3.2 创建一个 空线程
1.3.3 线程创建 方法一:继承 Thre...
1.3.4 线程创建 方法二:实现 Runn...
1.3.5 优雅创建 Runnable线程...
1.3.6 通过实现 Runnable接口...
1.3.7 线程创建 方法三:使用 Call...
05
2
06
2.9.6 需要在 synchro nize...
第3章 CAS原理与JUC原子类
01
3.1 什 么是CAS
02
3.2 JUC 原子类
03
3.3 对 象操作的 原子性
04
3.4 ABA 问题
05
3.5 提 升高并发 场景下 CAS操作 的性能
02
2.2 synchro nized关 键字
03
2.3 生 产者-消 费者问题
04
2.4 Java对 象结构与 内置锁
05
2.5 偏 向锁的原 理与实战
06
2.6 轻 量级锁的 原理与实 战
2.8 偏向锁、轻 量级锁与重量级
锁的对比
2.7 重量级锁的 原理与实战
2.9 线程间通信
2.1.1 自增 运算不是线
06
5.2.6 CLH自旋 锁
05
5.2.5 CAS可能 导致“总 线风暴”
5.3.1 非公 平锁实战
5.3.2 公平 锁实战
5.4.1 锁的 可中断抢占
5.4.2 死锁 的监测与中 断
5.5.2 共享锁 Semaphore
5.5.1 独占锁
5.5.3 共享锁 CountDownLa...
java思维导图笔记
Java思维导图笔记1. 什么是思维导图思维导图是一种用于展示思维和概念之间关系的图形工具。
它能够帮助我们整理、组织和表达思维。
在学习和思考过程中,使用思维导图可以更清晰地将复杂的信息归类和记录,提高信息的理解和记忆。
2. Java基本语法2.1 数据类型Java提供了一系列的数据类型,包括基本数据类型(如整数、浮点数、字符、布尔值)和引用数据类型(如类、接口、数组等)。
常见的基本数据类型有: - 整数类型:byte、short、int、long- 浮点数类型:float、double - 字符类型:char - 布尔类型:boolean引用数据类型: - 类(class):是面向对象编程中的基本概念,用来封装数据和方法。
- 接口(interface):是一种抽象的数据类型,用来定义类的行为规范。
- 数组(array):用来存储一组相同类型的元素。
2.2 控制流程语句控制流程语句用于控制程序的执行流程。
Java提供了三种主要的控制流程语句:顺序结构、选择结构和循环结构。
顺序结构是最简单的控制流程,指按照代码的先后顺序执行。
选择结构用于根据条件选择不同的执行路径。
常见的选择语句有:- if语句:用于根据一个条件判断选择是否执行某个代码块。
- switch语句:用于根据一个表达式的值选择执行不同的代码块。
循环结构用于重复执行某个代码块直到满足退出条件。
常见的循环语句有: - while语句:在循环开始之前,先判断条件是否满足,如果满足则执行循环体,然后再次判断条件。
- do-while语句:先执行一次循环体,然后再判断条件是否满足,如果满足则继续执行循环体。
- for语句:在循环开始之前,先执行初始化表达式,然后判断条件是否满足,如果满足则执行循环体,并在每次循环结束后执行更新表达式。
2.3 方法方法是一种可重复使用的代码块,用于执行特定的任务。
在Java 中,每个方法都有名称和参数列表,有时也有返回值。
java的封装,继承和多态(思维导图)
java的封装,继承和多态类和对象类类声明 { 成员变量的声明; 成员方法的声明及实现; }声明类:[修饰符] class 类<泛型> [extends 父类] [implements 接口列表]声明成员变量:[修饰符]数据类型 变量[=表达式]{,变量[=表达式]}成员方法声明:[修饰符]返回值类型 方法([形式参数列表])[throws 异常类列表]{语句序列;[return[返回值]]; }重载:一个类中可以有多个同名的成员方法,前提是参数列表不同,称为类的成员方法重载,重载的多个方法为一种功能提供多种实现。
重载方法之间必须以不同的参数列表(数据类型、参数个数、参数次序)来区别。
例如,MyDate 类可声明多个重载的set()方法如下: void set(int y,int m, int d)void set(int m, int d) //重载方法,参数个数不同void set(int d) void set(MyDate date)//重载方法,参数的数据类型不同对象对象声明:类 对象构造实例:对象 = new 类的构造方法([实际参数列表])引用对象的成员变量和调用成员方法:对象.成员变量 对象.成员方法([实际参数列表])类的封装性构造与析构类的构造方法用于创建类的一个实例并对实例的成员变量进行初始化一个类可声明多个构造方法对成员变量进行不同需求的初始化,构造方法不需要写返回值类型,因为它返回的就是该类的一个实例。
例:MyDate类声明以下构造方法:public MyDate(int year, int month, int day)// 声明构造方法,方法名同类名,初始化成员变量 {set(year, month day);// 调用 set()方法,为成员变量赋值}使用new运算符调用指定类的构造方法,实际参数列表必须符合构造方法声明。
例如:MyDate d1 = new MyDate(2017,10,1);//创建实例并初始化成员变量当一个类没有声明构造方法时,Java 自动为该类提供一个无参数的默认构造方法对象的引用与运算this引用访问本类的成员变量和成员方法:this.成员变量,this.成员方法([实际参数列表])调用本类重载的构造方法:this([实际参数列表])访问控制类的访问控制权限公有和(public)和缺省类中成员4级访问控制权限及范围声明set()和get()方法存取对象的属性例:public void set(int year, int month, int day) //设置日期值 public void set(MyDate date)//设置日期值,重载 public int getYear()//获得年份 public int getMonth()// 获得月份 public int getDay()//获得当月日期静态成员定义及访问格式使用关键字static声明的成员称为静态成员在类内部,可直接访问静态成员,省略类名。
Java 技术栈(思维导图)
Spark:Core、SQL、Streaming、MLib、GraphX……
大数据
Flink、ELK、Ansible……
Jenkins、JIRA、GitlabCI、TravisCI……
DevOps
JWT、SSO、ELK、秒杀……
解决方案
进阶
Java 技术栈
初级
Java 平台
发行版;面向对象;类加载、运行机制;编译、解释、JIT……
微服务
MySQL:B树、B+树、Hash表、隔离性、一致性、原子性、分布式事务、锁、 binlog、redolog、主从同步……
Redis:线程模型、缓存穿透/雪崩、集群和哨兵、分布式锁……
消息队列:RabbitMQ、Kafka、RocketMQ……
Nginx:反向代理、负载均衡…… Elasticsearch、MongoDB、图数据库……
TCP、UDP、HTTP(s)、RPC、WebSocket……
常用协议
内存分配、线程模型…… GC日志、诊断工具、问题定位、调优策略……
JVM
锁:自旋锁、偏向锁、锁粗化/锁消除、分段锁、读写锁、公平锁、非公平锁、乐 观锁、悲观锁……
同步器:CAS、AQS、自旋…… 并发模型:并行、响应式、函数式、Actor、Channel……
Redis
缓存、持久化……
算法 & 数据结构
树、堆、链表、数组…… 查找、排序、递归……
设计模式
单例、工厂、构建器、装饰器、迭代器、观察者……
开发框架
Spring MyBatis
基础:Context、IOC、AOP、Bean、MVC…… SpringBoot:自动装配、嵌入式容器……
SqlSession、Executor……
操作系统的基本概念思维导图分享
操作系统的基本概念操作系统的概念操作系统:操作系统(OS)是指控制和管理整个计算机系统的硬件与软件资源,并合理地组织、调度计算机的工作与资源的分配,进而为用户和其他软件提供方便接口与环境的程序集合。
操作系统是计算机系统中最基本的系统软件。
操作系统是系统资源的管理者操作系统向上层提供方便易用的服务操作系统是最接近硬件的一层软件操作系统的特征并发并发:指两个或多个事件在同一时间间隔内发生。
这些事件宏观上是同时发生的,但微观上是交替发生的。
并行:指两个或多个事件在同一时刻同时发生。
操作系统的并发性指计算机系统中“同时”运行着多个程序,这些程序宏观上看是同时运行着的,而微观上看是交替运行的。
操作系统就是伴随着“多道程序技术”而出现的。
因此,操作系统和程序并发是一起诞生的。
重要考点单核CPU同一时刻只能执行一个程序,各个程序只能并发地执行。
多核CPU同一时刻可以同时执行多个程序,多个程序可以并行地执行。
并发和共享是操作系统两个最基本的特征,二者主机互为存在的条件资源共享是以程序的并发为条件的,若系统不允许程序并发执行,则自然不存在资源共享问题。
若系统不能对资源共享实施有效的管理,则必将影响到程序的并发执行,甚至根本无法并发执行。
共享共享:共享即资源共享,是指系统中的资源可供内存中多个并发执行的进程共同使用。
两种资源共享方式互斥共享方式系统中的某些资源,虽然可以提供给多个进程使用;但一个时间段内只允许一个进程访问该资源。
同时共享方式系统中的某些资源,允许一个时间段内由多个进程“同时”对它们进行访问。
所谓的“同时”往往是宏观上的,而在微观上,这些进程可能是交替地对该资源进行访问的(即分时共享)。
虚拟虚拟:虚拟是指把一个物理上的实体变为若干逻辑上的对应物。
物理实体(前者〉是实的,即实际存在的;而后者是虚的,是用户感觉上的事物。
用于实现虚拟的技术,称为虚拟技术。
操作系统中利用了多种虚拟技术来实现虚拟处理器、虚拟内存和虚拟外部设备等。
Java并发编程:JMM(Java内存模型)和volatile
Java并发编程:JMM(Java内存模型)和volatile1. 并发编程的3个概念并发编程时,要想并发程序正确地执行,必须要保证原子性、可见性和有序性。
只要有一个没有被保证,就有可能会导致程序运行不正确。
1.1. 原子性原子性:即一个或多个操作要么全部执行并且执行过程中不会被打断,要么都不执行。
一个经典的例子就是银行转账:从账户A向账户B转账1000元,此时包含两个操作:账户A减去1000元,账户B加上1000元。
这两个操作必须具备原子性才能保证转账安全。
假如账户A减去1000元之后,操作被打断了,账户B却没有收到转过来的1000元,此时就出问题了。
1.2. 可见性可见性:即多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的最新值。
例如下段代码,线程1修改i的值,线程2却没有立即看到线程1修改的i的最新值:假如执行线程1的是CPU1,执行线程2的是CPU2。
当线程1执行i=10 时,会将CPU1的高速缓存中i的值赋值为10,却没有立即写入主内存中。
此时线程2执行j=i,会先从主内存中读取i的值并加载到CPU2的高速缓存中,此时主内存中的i=0,那么就会使得j最终赋值为0,而不是10。
1.3. 有序性有序性:即程序执行的顺序按代码的先后顺序执行。
例如下面这段代码:在代码顺序上i=1 在flag=true 前面,而JVM 在真正执行代码的时候不一定能保证i=1 在flag=true 前面执行,这里就发生了指令重排序。
指令重排序一般是为了提升程序运行效率,编译器或处理器通常会做指令重排序:∙编译器重排序:编译器在不改变单线程程序语义的前提下,可以重新安排语句的执行顺序∙处理器重排序:如果不存在数据依赖性,处理器可以改变语句对应机器指令的执行顺序。
CPU 在指令重排序时会考虑指令之间的数据依赖性,如果指令2必须依赖用到指令1的结果,那么CPU会保证指令1在指令2之前执行。
Java工程师学习之路思维导图
Java⼯程师学习之路思维导图前⾯看Hollis的微信公众号更新了Java⼯程师成神之路的⽂档,感觉⾥⾯的内容清晰、齐全,可以⽤来审视⾃⼰,也能够知道⾃⼰在那些⽅⾯可以继续前⾏,想着有时间分享出来。
⼀、基础篇JVMJVM内存结构堆、栈、⽅法区、直接内存、堆和栈区别Ja va内存模型内存可见性、重排序、顺序⼀致性、volatile、锁、final垃圾回收内存分配策略、垃圾收集器(G1)、GC算法、GC参数、对象存活的判定JVM参数及调优Ja va对象模型oop-klass、对象头H o tSpo t即时编译器、编译优化类加载机制classLoader、类加载过程、双亲委派(破坏双亲委派)、模块化(jboss modules、osgi、jigsaw)虚拟机性能监控与故障处理⼯具jps, jstack, jmap、jstat, jconsole, jinfo, jhat, javap, btrace、TProfiler编译与反编译javac 、javap 、jad 、CRFJava基础知识阅读源代码String、Integer、Long、Enum、BigDecimal、ThreadLocal、ClassLoader & URLClassLoader、ArrayList & LinkedList、 HashMap & LinkedHashMap & TreeMap & CouncurrentHashMap、HashSet & LinkedHashSet & TreeSetJa va中各种变量类型熟悉Ja va Str ing的使⽤,熟悉String的各种函数JDK 6和JDK 7中substring的原理及区别、replaceFirst、replaceAll、replace区别、String对“+”的重载、String.valueOf和Integer.toString的区别、字符串的不可变性⾃动拆装箱Integer的缓存机制熟悉Ja va中各种关键字transient、instanceof、volatile、synchronized、final、static、const 原理及⽤法。
JVM原理速记复习Java虚拟机总结思维导图面试必备
JVM原理速记复习Java虚拟机总结思维导图⾯试必备良⼼制作,右键另存为保存JVM喜欢可以点个赞哦Java虚拟机⼀、运⾏时数据区域线程私有程序计数器记录正在执⾏的虚拟机字节码指令的地址(如果正在执⾏的是Native⽅法则为空),是唯⼀⼀个没有规定OOM(OutOfMemoryError)的区域。
Java虚拟机栈每个Java⽅法在执⾏的同时会创建⼀个栈桢⽤于存储局部变量表、操作数栈、动态链接、⽅法出⼝等信息。
从⽅法调⽤直到执⾏完成的过程,对应着⼀个栈桢在Java虚拟机栈中⼊栈和出栈的过程。
(局部变量包含基本数据类型、对象引⽤reference和returnAddress类型)本地⽅法栈本地⽅法栈与Java虚拟机栈类似,它们之间的区别只不过是本地⽅法栈为Native⽅法服务。
线程公有Java堆(GC区)(Java Head)⼏乎所有的对象实例都在这⾥分配内存,是垃圾收集器管理的主要区域。
分为新⽣代和⽼年代。
对于新⽣代⼜分为Eden空间、FromSurvivor空间、To Survivor空间。
JDK1.7 ⽅法区(永久代)⽤于存放已被加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
对这块区域进⾏垃圾回收的主要⽬的是对常量池的回收和对类的卸载,但是⼀般难以实现。
HotSpot虚拟机把它当做永久代来进⾏垃圾回收。
但很难确定永久代的⼤⼩,因为它受到很多因素的影响,并且每次Full GC之后永久代的⼤⼩都会改变,所以经常抛出OOM异常。
从JDK1.8开始,移除永久代,并把⽅法区移⾄元空间。
运⾏时常量池是⽅法区的⼀部分Class⽂件中的常量池(编译器⽣成的字⾯量和符号引⽤)会在类加载后被放⼊这个区域。
允许动态⽣成,例如String类的intern()JDK1.8 元空间原本存在⽅法区(永久代)的数据,⼀部分移到了Java堆⾥⾯,⼀部分移到了本地内存⾥⾯(即元空间)。
元空间存储类的元信息,静态变量和常量池等放⼊堆中。
思维导图整理Java并发基础知识
思维导图整理Java并发基础知识话不多说,先上图。
1、基本概念欲说线程,必先说进程。
•进程:进程是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。
•线程:线程是进程的一个执行路径,一个进程中至少有一个线程,进程中的多个线程共享进程的资源。
操作系统在分配资源时是把资源分配给进程的,但是 CPU 资源比较特殊,它是被分配到线程的,因为真正要占用CPU运行的是线程,所以也说线程是CPU分配的基本单位。
在Java中,当我们启动 main 函数其实就启动了一个JVM进程,而 main 函数在的线程就是这个进程中的一个线程,也称主线程。
示意图如下:一个进程中有多个线程,多个线程共用进程的堆和方法区资源,但是每个线程有自己的程序计数器和栈。
2、线程创建和运行Java中创建线程有三种方式,分别为继承Thread类、实现Runnable接口、实现Callable接口。
•继承Thread类,重写run()方法,调用start()方法启动线程public class ThreadTest { /** * 继承Thread类 */ public static class MyThread extends Thread { @Override public void run() { System.out.println('This is child thread'); } } public static void main(String[] args) { MyThread thread = new MyThread(); thread.start(); } }•实现 Runnable 接口run()方法public class RunnableTask implements Runnable {public void run() {System.out.println('Runnable!');}public static void main(String[] args) {RunnableTask task = new RunnableTask();new Thread(task).start();}}上面两种都没有返回值。
JavaScript流程语句思维导图-简单高清脑图_知犀思维导图思维导图-简单高清脑图_知犀
JavaScript流程语句循环语句while语法while(条件表达式){循环执行代码段}流程判断条件表达式的值当值为true时循环执行代码段当值为false时退出循环体特性先检查条件,再执行循环条件不满足则循环一次也不执行时机一个动作被重复执行到满足某个条件时do-while语法do{循环执行的代码段}while(条件表达式);流程先执行循环体内代码段再进行判断如果表达式的值为true,则重复执行代码段如果表达式的值为false,则退出循环体特性先执行循环体,再进行条件判断循环体内代码至少执行一次时机希望一个动作至少被执行一次时for语法for(循环变量=初值;循环条件;递增/递减计数器){循环代码段}流程用循环变量初始值与循环条件相比较,确定返回值如果返回值为true则执行循环体执行完一次后进行递增/递减运算将运算结果与循环条件相比较如果返回值为true则继续执行循环体,如果返回值为false则退出循环体时机重复一个动作到一定次数时for-in语法for(生命变量in对象){代码段}作用枚举对象属性注意事项循环输出的属性顺序不可预知对象的值不能是null或undefined跳转语句return终止函数体的运行,并返回一个值break终止整个循环,不再进行判断continue结束本次循环,接着去判断是否执行下次循环选择语句句法if(条件表达式1){代码段1}else if(条件表达式2){代码段2}else{代码段3}流程判断条件1,如果返回值为true则执行代码段1如果条件1的返回值为false,则跳过语句块1并检测条件2如果所有表达式的值均为false,则执行else后面的语句特性结构复杂,可嵌套可测试多个条件表达式表达式的值具有线性特征表达式的值是动态的适用于任意类型的数据可处理复杂的逻辑关系switch句法switch(条件表达式){case 标签1:代码段1;break;...... ......default:代码段n;}流程计算表达式的值,并与各标签相比较若找到与之匹配的标签,则执行其后的代码段若没有找到与之匹配的标签,则直接执行default之后的代码段格式case标签为常量,可以是字符串或数字每个标签均以冒号:结束虽然break与default为可选项,但为了逻辑清晰最好不要省略case标签的值必须和条件表达式的值完全匹配特性结构简洁,专为多重选择设计仅可测试一条条件表达式表达式的值具有离散性表达式的值是固定的,不会动态变化的仅能应用整数,枚举,字符串等类型数据仅能处理多个枚举型逻辑关系异常处理语句throw主动抛出异常try指明需要处理的代码段catch捕获异常finally后期处理。