黑马程序员技术交流社区
标题: 【成都校区】2018/11/16 9:05 JAVAEE就业day05 [打印本页]
作者: blovedr 时间: 2018-11-22 13:21
标题: 【成都校区】2018/11/16 9:05 JAVAEE就业day05
2018/11/16 9:05 就业day05
推荐: 并发编程网 书堂老师
1 异常体系(书堂老师)
Throwable类
Error类: 不应该被程序员处理的问题(虚拟机的错误,内存不足)
Exception类:可以被处理的(感冒发烧等)
RuntimeException 运行时异常
其他类型:编译期异常
异常分类:
编译期异常:
1. 继承关系中, Exception和除了RuntimeException体系中的异常类,都是编译期异常
2. 编译期在写代码的时候会有编译错误,只有当处理完才能编译通过
ParseException IOException
运行时异常:
1. 继承关系中,只要是RuntimeException及其子类都是运行时异常。
2. 编写代码的时候不会出现,只要运行的时候才会出现
注意事项:
异常的本质其实就是异常类创建对象并抛出。
编译期异常在编译期会有编译错误, 但是不是意外这你的代码已经错了,也不会在编译期产生异常对象。
只是需要我们对可能发生的异常做一个预处理
两种异常区别:
编译期异常要求我们在编译时期必须(预)处理。(对可能出现的问题,必须先来一个预处理方案)
运行时异常不需要预处理
除了以上两点区别,其他的使用编译期异常和运行时异常相同的
// 需求:编写代码,产生5个异常 异常产生会中断处理
// 解析异常,空指针异常, 算数异常, 数组索引越界异常, 类型转换//异常, 编译期异常(编写异常), 解析异常,并发修改异常等等。
异常产生过程解析(分析异常是怎么产生的, 如何处理异常)【自】
方法异常-à抛给主函数(main)处理-à抛给JVM,JVM处理做两件事:
1. 把异常对象(内容,原因,位置)以红色字体打印在控制台
2. 终止当前正在执行的Java程序-à中断处理
异常的产生: (throw关键字)
throw关键字自己手动抛出异常
我们自定义功能,如果功能的使用者, 使用有误, 这个时候我们应当通过产生异常的方式,告知方法的调用者使用有误。
异常的处理:
1. 让别人处理(方法的调用者), 默认方式
将异常对象声明抛出, 抛给方法的调用者
格式:
在方法参数后抛出:throws 异常类型
注意:
1)对于运行时异常, 默认就会把异常抛给方法的调用者
对于编译期异常, 异常抛出是一种异常的处理方案, 可以使程序编译通过,不再产生编译错误。
2)如果方法中有可能产生的异常类型不止一种, 可以抛出多个异常类型用逗号隔开,还可以抛出多个异常的父类型
throws: 是异常的处理方式的一种, 就是把产生的对应异常抛给方法的调用者
throw: 手动产生异常对象
2.try…catch自己处理
格式:
Try {
// 可能出现异常的代码
} catch(异常类型 变量名) {
// 处理异常的逻辑
}
流程:
1)当try中代码出现异常, 产生异常对象, 将异常对象和catch括号中的异常变量进行匹配, 如果可以匹配上, 则把对象赋值给异常的变量,catch中代码会执行, 异常则已经处理完毕, try catch后续代码也能正常执行
2)如果异常类型不能匹配上,则try…catch捕获异常失败, 此时异常和没处理, 则会抛给方法的调用者
编译期异常,只是比运行时异常多一个强制性要求,必须先给出预处理方案, 只要代码正常,异常对象就不好产生。 类型得匹配
多个异常处理方式有三种:
//1每一个异常一个try catch处理
//2多个异常的处理: 一个try, 多个catch
/*
执行流程:
如果try中的代码产生异常了,会讲异常信息封装Wie一个异常对象,跟catch中的异常类型进行匹配,如果匹配上则会将异常对象赋值给对应的异常变量, 并执行对应的catch大括号中的逻辑, 执行完后则整个try catch就结束了 没有第一个没有匹配上会有上往下去匹配
只会和其中一个catch匹配上
*/
// 3 还可以:直接将多个可能出现异常的代码放入一个try中, catch多个异常 父类型
// 实际开发中: 将异常信息写入错误日志
注意:
如果多个catch有子父类关系, 子类的异常类型的catch必须放在父类的前面, 父类型会包含子类型
在子父类中,子类重写了父类的方法
1. 子类可以抛出任意的运行时异常
2. (编译期异常)如果子类中需要抛出的异常类为编译期异常
如果父类没有抛出,则子类也不能抛
并且, 子类中抛出异常的类型,必须是父类抛出异常的子类型(或与父类抛出的异常类型相同)
子类(抛出)的异常不能大于父类的异常
父类不能抛异常, 则子类也不能抛异常
有时候我们需要某些代码在任意情况下都需要被执行,这个时候, 我们需要用到一个结构
格式:
Try {
// 可能出现异常的代码
} catch(异常类型 变量名) {
// 处理异常的逻辑
return; // 在方法结束之前, 可以留下遗言 return 可以跳出本方法。 一// 般不这样写
} finally {
// 任意情况下, 此处代码都会执行
}
System.exit(0); // 终止JVM运行, 则后续任何代码都不会执行
// 匹配上一个catch就运行结束
Throwable类中的功能:
Public StringgetMessage(): 获取异常的描述信息
Public String toString(): 获取异常的描类型和异常描述信息
Public StringprintStackTrace(): 打印异常的跟踪信息并输出到控制台。
自定义异常
什么时候使用自定义异常
1. 自己写代码,别人用, 但是别人用错了(如参数错误),则可以抛出一个异常告知方法的调用者
2. 有的时候, java提供的异常类不够用, 我们定义的异常会更见名知意
3. 定义一个类,继承异常父类
4. 定义两个构造方法,一个空参,一个带字符串参数, 分别调用父类的对应构造
产生异常:
在需要产生异常的位置: throw new 异常类型(异常的原因)
应用场景:
定义一个方法,检测分数是否合法, 如不合法, 抛出异常
需求:
1. 定义一个类,继承异常父类
// 如果想定义的异常是编译时期异常, 应继承Exception
// 如果想定义的异常是运行时期异常, 应继承RuntimeException
2. 定义两个构造方法, 一个空参,一个带字符串参数, 分别调用父类的对应构造
// 产生异常对象的时候,传递的字符串, 本质就是给异常对象一些异常信////息,产生异常的原因
注意事项:
如果产生的异常是编译期异常,则需要在产生异常所在方法上, 手动声明抛出异常
04 多线程
推荐: 并发编程网 书堂老师
并发:交替执行,CPU会在多个线程间进行高速的切换,在某一个时刻其实只有一个线程执行。在同一时间内发生的事(或其他的事物) 例如:睁眼, 穿衣服, 玩手机
并行: 同时执行, 需要多核CPU才能实现。在同一时刻发生: 听课,看屏幕
进程:一个正在运行的应用程序
线程:进程中一个执行单元(执行路径)
Java程序的运行,当我们点击运行按钮的时候, 则JVM会帮我们开启一个main线程,再调用main方法去执行代码
thread 线程的意思, Java提供了一个类Thread,可以让我们手动开启线程
多线程的实现(****)
开启线程的方式1:
1. 定义类, 继承Thread
2. 重写run方法
3. 创建Thread的子类
4. 调用start方法开启线程
Thread类常用功能:
void SetName(String name)
String getName()
// 在run方法中应该定义后期开启线程后需要执行的任务
JVM开启了一个main线程然后调用main方法
Start()开启新线程
当新线程被开启后, 会主动调用run方法
子类重写了run方法,具体执行的就是子类的代码
CPU单核:在两个线程间高速的切换任务,交替执行(有随机性 高速运行)
在火车上多个人排队上一个卫生间: 并发
并发:交替执行
并行:同时执行
电影院中,大家一起看电影: 并行
进程:公司
线程:公司中的员工
一个进程中至少要有一个线程
Thread常用功能:
1. publicString getName() 获取当前线程的名称
2. publicvoid setName(String name) 设置当前线程的名称
3. publicstatic void sleep(long mls) 让当前正在执行此代码的线程睡指定毫秒值
4. publicstatic Thread currentThread() 获取正在执行此代码的线程
Java.lang.Throwable:类是java语言中所有错误或异常的超类(或父类)。【参视】
Exception:编译期异常, 进行编译(写代码)java程序出现的问题
异常产生过程解析(分析异常是怎么产生的, 如何处理异常)
方法异常-à抛给主函数(main)处理-à抛给JVM,JVM处理做两件事:
1.把异常对象(内容,原因,位置)以红色字体打印在控制台
2.终止当前正在执行的Java程序-à中断处理
1.5 05_throw关键字
作用:
可以使用throw关键字在指定的方法中抛出指定的异常
使用格式:
Throw new xxxException(“异常产生的原因”);
注意:
1. throw关键字写在方法内部
2. throw关键字后边new对象必须是Exception或Exception的子类对象
3. throw关键字抛出的指定的异常对象, 我们就必须处理这个异常对象
1) 后边创建的是RuntimeException或RuntimeException子类对象, 可以不处理, 交给JVM处理
2) 编译异常(写代码时候报错),必须处理这个异常, 要么throws,要么try…catch
1. 说出异常的分类
2. 虚拟机处理异常的方式
3. 三个运行期异常
4. trycatch
选中需要处理异常代码, Ctrl + Alt +T
5. throws
6. 进程
一个正在运行的应用程序
7. 线程
进程的执行单元
8. 能够开启新线程
Start API
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |