Java基础知识二次学习--第四章 异常

第四章 异常处理

时间:2017年4月26日11:16:39~2017年4月26日11:28:58

章节:04章_01节 04章_02节

视频长度:20:46+01:16

内容:异常的概念

心得:

Java异常是JAVA提供的用于处理程序中错误的一种机制

实在运行的过程中发生的一些异常事件(比如除0溢出,数组越界,要读取的文件不存在)

设计良好的程序应该在异常发生时提供处理这些错误的方法,使得程序不会因为异常的发生而阻断或产生不可预见的结果

JAVA程序的执行过程中 如果出现异常事件,可以生成异常类的对象,该异常对象封装了异常事件的信息并被提交给JAVA运行时的系统,这个过程称为抛出(throw)异常

当JAVA运行时系统受到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一个过程称为捕获(catch)异常。

时间:2017年4月26日11:29:02~2017年4月26日11:32:52

章节:04章_03

视频长度:19:47

内容:异常的分类

心得:

Throwable -->Error , Exception

Error -->难以处理的称为error

Exception-->RuntimeException 与 其他的Exception

runtimeException 经常出的异常 可以不捕获

另外的exception 必须要被捕获(一般经常throws的)

例如IOEXCEPTION 之类的

图片

时间:2017年4月26日11:33:03~2017年4月26日14:38:31

章节:04章_05

视频长度:S9:29

内容:finally语句

心得:

try{

//可能出现异常的代码

}

后面可以跟着一个或者多个catch

每个catch代码段声明能处理的一种特定类型的异常并提供处理的方法

finally 的语句始终会执行

对这句话的情况作了一个简单的测试

分别测试了当堆内存溢出,栈内存溢出与system.exit()语句 还有各种return的情况finally的执行情况

第一种堆溢出

先打印异常 再输出finally语句

第二种 栈溢出

先输出finally语句 再打印异常

以上两种情况是这样的

try{

通过不断的往堆或者栈里面加东西 使得内存溢出

}finally{

system.out.println("..........")

}

然后如果作一个小小的改变

try{

通过不断的往堆或者栈里面加东西 使得内存溢出

}finally{

再往内存里加一个语句

system.out.println("..........")

}

也不输出了

但是实际上还是进入了finally 只是强行关闭了虚拟机

第三种 System.exit(0)或者-1

不进入finally语句

第四种 关于return

try里面有return finally没有的话是这样

debug跑到return语句之后 先执行return

接着 进入finally

最后 返回return结果

也就是说

finally模块语句的位置是在 执行return之后 返回return之前

如果finally里面有return的话是 直接覆盖掉try或者catch里面的return 语句

因此得出结论:

1不终止JVM的情况下,finally中的代码一定会执行。

2.finally模块语句的位置是在 执行return之后 返回return之前

 

如果finally里面有return的话是 直接覆盖掉try或者catch里面的return 语句

时间:2017年4月26日14:38:31~2017年4月26日14:50:05

章节:04章_06

视频长度:12:57

内容:声明方法抛出的异常

心得:

throws 异常

抛出异常的方法 调用的话 可以继续抛

但是到最后一步必须要捕获(不是runtimeException)

当然可以在main方法里抛 但是非常不建议。。

最终还是要捕获的

要不然出了错都不知道怎么回事

能处理的就处理 不能处理往外抛

时间:2017年4月26日14:50:37~2017年4月26日15:07:38

章节:04章_07

视频长度:12:01 +1:28

内容:异常的其他问题

心得:

多次catch的时候

遵循先catch小异常 再catch大异常

否则编译无法通过(因为已经捕捉到了)

并列的就没有这种限制

关于自定义异常

1.通过继承Exception类声明自己的异常类

2.在方法适当的位置 生成自定义异常的实例,并用throw语句抛出

3.在方法的声明部分用throws语句声明该方法可能抛出的异常

注意: 重写方法需要抛出与所抛出异常类型一致或不抛出异常

总结5个关键字 try catch finally throw throws

时间: 2024-12-22 02:36:50

Java基础知识二次学习--第四章 异常的相关文章

Java基础知识二次学习--第五章 数组

第五章 数组 时间:2017年4月26日15:11:30~2017年4月26日15:15:54 章节:05章_01节  视频长度:09:30 内容:一维数组的内存分析 心得: Java中数组是引用类型 栈里面存的数组的引用 实际对象在堆内存里面 (C与C++是分配在栈里的) 内存图: 元素为引用数据类型的数组 引用类型的数组如上图 时间:2017年4月26日15:16:22~2017年4月26日15:19:00 章节:05章_02节  视频长度:05:25 内容:数组元素的创建与使用 心得: 首

Java基础知识二次学习-- 第一章 java基础

基础知识有时候感觉时间长似乎有点生疏,正好这几天有时间有机会,就决定重新做一轮二次学习,挑重避轻 回过头来重新整理基础知识,能收获到之前不少遗漏的,所以这一次就称作查漏补缺吧!废话不多说,开始! 第一章  JAVA简介 时间:2017年4月24日10:23:32 章节:01章_02节 内容:jdk的配置与安装 完成情况:已经完成,cmd中javac提示出相关命令 时间:2017年4月24日10:30:39 章节:01章_04节 内容:输出HelloWorld 完成情况: 已经完成 javac先将

Java基础知识二次学习-- 第二章 基础语法与递归补充

第二章 基础语法与递归补充   时间:2017年4月24日10:39:18 章节:02章_01节,02章_02节 视频长度:49:21 + 15:45 内容:标识符,关键字与数据类型 心得:由字母,下划线,$,数字组成,应该由字母,下划线$开头,同时应该避开java保留字符 变量是内存中的一小块区域,使用变量名来访问这块区域 执行过程中的内存管理(疑问:这里的内存和Jvm的一样吗?) code segment 存放代码 data segment 静态变量 字符串常量 stack 栈 局部变量 h

Java基础知识二次学习--第八章 流

第八章 流   时间:2017年4月28日11:03:07~2017年4月28日11:41:54 章节:08章_01节 视频长度:21:15 内容:IO初步 心得: 所有的流在java.io包里面 定义了多个流类型(类或抽象类)来实现输入/输出功能 可以从不同的角度对其进行分类 按数据流的方向不同可以分为输入流和输出流 按处理数据单位不同可以分为字节流和字符流 按照功能不同可以分为节点流和处理流 jdk中所提供的的所有流类型位于包Java.io内都分别继承自以下四种抽象流类型 输入流 Input

Java基础知识(二)

1,字符串 new String("abc")创建了几个对象? 一个或两个,如果常量池中原来有"abc",则只创建一个对象:如果常量池中原来没有字符串"abc",那么就会创建两个对象. String s="abc"; String s1="ab"+"c"; System.out.println(s==s1); 输出 true ,因为"ab"+"c"

Java 基础知识(二)之面向对象技术

1.    面向对象与面向过程的区别 面向对象把数据及对数据的操作方法放在一起,作为一个互相依存的整体,即对象.对同类对象抽象出其共性,即类,类中的大多数数据,只能被本类的方法进行处理.类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信.程序流程由用户在使用中决定. 面向过程是一种以事件为中心的开发方法,就是自顶向下顺序执行,逐步求精,其程序结构是按功能划分为若干个基本模块,这些模块形成一个树状结构,各模块之间的关系也比较简单,在功能上相对独立,每一模块内部一般是由顺序.选择

java基础知识回顾之java Thread类学习(四)--java多线程安全问题(锁)

上一节售票系统中我们发现,打印出了错票,0,-1,出现了多线程安全问题.我们分析为什么会发生多线程安全问题? 看下面线程的主要代码: @Override public void run() { // TODO Auto-generated method stub while(true){ if(ticket > 0){//当线程0被调起的时候,当执行到这条判断语句的时候,线程1被调起抢了CPU资源,线程0进入冻结状态. try { Thread.sleep(100);//中断当前活跃的线程,或者

java基础知识《JAVA 核心技术》学习笔记(一)

一:数据类型 (1)java整形: 类型                         存储要求 int                              4字节 short                          2字节 long                           8字节 byte                           1字节 (2)浮点类型 类型                         储存要求 float            

java基础知识回顾之java Thread类学习(八)--java多线程通信等待唤醒机制经典应用(生产者消费者)

 *java多线程--等待唤醒机制:经典的体现"生产者和消费者模型 *对于此模型,应该明确以下几点: *1.生产者仅仅在仓库未满的时候生产,仓库满了则停止生产. *2.消费者仅仅在有产品的时候才能消费,仓空则等待. *3.当消费者发现仓储没有产品可消费的时候,会唤醒等待生产者生产. *4.生产者在生产出可以消费的产品的时候,应该通知等待的消费者去消费. 下面先介绍个简单的生产者消费者例子:本例只适用于两个线程,一个线程生产,一个线程负责消费. 生产一个资源,就得消费一个资源. 代码如下: pub