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
|