java自学之路-day14

JAVA14

异常

引入

l  Java代码在运行时期发生的问题就是异常

l  Java中把异常信息封装成了一个类

l  当出现了问题时,就会创建异常类对象并抛出异常相关的信息

l  如异常出现的位置 原因等

继承体系

l  java.lang

类 Throwable   可以被扔出去的类

l  java中所有的错误和异常

l  直接已知子类:

Error, Exception

异常和错误的区别

l  数组访问越界是异常

Exception RuntimeException

编译,运行期间出现的
可以有具体的方式进行处理

l  数组空间太大是错误

Error

运行期间发生了错误
没有具体的处理方法
系统级别的问题 都是jvm所在系统发生的,并反馈给jvm
只能修改代码

异常产生的原因和处理方式

原因

l

l  方法内部出现问题   JVM检测出了异常 创建了相应异常的对象

l  方法内部无法处理 将异常的对象抛给方法的调用者

l  方法的调用者main 也无法处理 就将对象抛给了 main方法的调用者

l  也就是JVM虚拟机 然后JVM接收到异常

l  然后JVM将异常信息以红色字体输出到控制台 将程序在调用方法代码处停止

处理

throw关键字处理

l  方式使用时考虑异常出现 需要对传递的参数进行判断 看是否合法 如果不合法就要告诉调用者,这是就要用抛出异常的方式来告诉

l  在方法的内部抛出异常

l  示例

  1. 进行判断
    执行抛出异常 throw new Exception(“信息”)
  2. 方法名后面
    加 throws 异常类型
    进行声明异常
  3. 方法调用时就要考虑到方法的异常问题
    调用时就要有如果出现异常进行处理的方法,比如把异常抛给上一级
    比如 main方法抛出给虚拟机

Try …catch…finally处理

l  格式

try { 可能出现异常的代码 } catch { 异常处理的方式 } finally { 必须要执行的代码   }

l  示例

  1. Main方法执行 数组定义
  2. 进入try代码块
  3. 调用方法
  4. 方法执行  判断为空  创建自己写好的异常类对象
  5. 把异常对象抛给方法调用者
    后面的程序不再执行
  6. 方法调用者
    的try检测到了有异常的发生
    接收到了一个异常对象
  7. 将异常对象抛给catch代码块,处理这个异常
  8. Catch 抓住  捕获
  9. Catch可以捕获相应类型的异常
  10. Catch捕获到这个异常 进行处理
  11. 异常被处理
    程序继续执行

多catch捕获

l  可以处理多个异常

l  注意事项

  1. catch写的异常有顺序概念
  2. 平级异常  : 抛出的异常类之间没有继承关系
  3. 平级异常没有顺序
  4. Ctrl t继承树
  5. 上下级关系的异常
    必须越高级的父类写在下面
  6. 否则编译会报错
  7. 低级的catch会没用

finally代码块

l  必须要执行的代码

l  无论是否有异常出现,都执行该代码块

l  用于释放资源

try…catch…和throws怎么选择

l  用了有抛出异常的方法就要用try…catch…

l  否则一直往上抛异常就会导致程序停止

编译异常和运行时期异常

l  编译异常

  1. 调用了抛出异常的方法不处理编译就会失败(try throws)

l  运行异常

  1. 凡是抛出的异常是RuntimeException类或者是他的子类
    都是运行时期异常
  2. 凡是方法内部抛出的是运行异常,不需要throws声明
  3. 调用者也不需要处理
  4. 设计原因

a)        
运行异常不能发生

b)        
但是如果发生需要程序员停止程序
修改源代码

c)        
运行异常一旦发生
后面的代码就没有意义

案例

l  计算圆形面积

l  要调用运行时异常 处理传递半径为-1的情况

方法重写时的异常处理

l  父类的方法抛出异常

  1. 子类重写后可以不抛出异常
  2. 也可以不抛出异常
  3. 如果子类抛出异常
    抛出的异常对象不能大于父类的异常
  4. 子类也不能抛出平级异常
  5. 原因

多态调用方法时 父类调用的是父类的原来的方法

  1. 父类抛出异常子类也不能抛出异常
  2. 子类方法抛出了异常
    重写父类的方法中调用了该方法
    抛出异常时只能用try catch抛出
    不能向上抛出 因为父类没有抛出异常

Throwable类方法

l  String getMessage()

对异常信息的详细描述

l  String toString()

对异常信息的简短描述

l  Void printStackTrace()虚拟机默认的调用方法

对异常信息追踪到标准的错误流

l  示例

自定义异常

引入

l  Java预先定义了很多的异常

l  有些异常没有

l  因此需要自己写

l  例如 负数 分数

l  格式  xxxException

l  自定义异常类需要继承父类Exception

示例

l  计算成绩的平均数 传入负数的异常停止运算

l

l

l

l  大多数使用运行时异常

l  需要写空参构造器 有参构造器

l  有参构造器 中用super 调用父类构造即可

时间: 2024-12-16 18:33:29

java自学之路-day14的相关文章

【转】JAVA自学之路

JAVA自学之路 一: 学会选择 为了就业,不少同学参加各种各样的培训. 决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机.嵌入式.游戏.3G.测试等. 那么究竟应该选择什么方向呢? 我的意见是,不要太过相信各种培训机构或是抢手文章的说法(包括我),当你要走向社会的时候,就不要再把自己当成学生,不要把自己的将来交给别人,学会运用自己的眼睛去观察,去了解这个世界吧. 每个培训机构都会宣传自己的好处,并不能说明大的趋势. 一些新闻文章很有可能是枪手写的,不必太过相信.国外背景的

[转载] JAVA自学之路

原文链接http://blog.csdn.net/mengxin846/article/details/2219844 虽然文章有点旧但还是有些启发的,譬如要事第一,好读书不求甚解. JAVA自学之路 一:学会选择 为了就业,不少同学参加各种各样的培训. 决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机.嵌入式.游戏.3G.测试等. 那么究竟应该选择什么方向呢? 我的意见是,不要太过相信各种培训机构或是抢手文章的说法(包括我),当你要走向社会的时候,就不要再把自己当 成学生

马士兵:JAVA自学之路

JAVA自学之路 一:学会选择 为了就业,不少同学参加各种各样的培训.决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机.嵌入式.游戏.3G.测试等. 那么究竟应该选择什么方向呢?我的意见是,不要太过相信各种培训机构或是抢手文章的说法(包括我),当你要走向社会的时候,就不要再把自己当成学生,不要把自己的将来交给别人,学会运用自己的眼睛去观察,去了解这个世界吧. 每个培训机构都会宣传自己的好处,并不能说明大的趋势.一些新闻文章很有可能是枪手写的,不必太过相信.国外背景的教师和课

Java 自学之路

Java 自学之路 前言 从运行第一个程序开始算起,我接触编程也有三年的时间了.最初是从51单片机入门学习的C语言,班里面的大佬带着我一起做小项目,但是因为没人教,基本靠自学,学得慢,写的代码也烂,很没有章法.后来大三下半学期开始准备考研(从电子跨考计算机),从零开始学习数据结构,这才算是真正地入了编程的门.至于考研,后来就放弃了(别问我为什么放弃,当时脑子抽了),去了一家小公司实习.这家公司主要做机器视觉的项目,当时去面试的时候觉得挺高大上,技术 leader 也挺和蔼,感觉是很务实的一个团队

java自学之路-day17

JAVA17 多线程 进程和线程的概念 进程 l  正在运行中的程序 l  程序存储在硬盘中 当进入内存运行时 l  内存中的每一个程序就叫进程 l  并且每一个进程都有一个独立的功能 线程 l  迅雷中的多线程下载 l  main方法中有很多方法一次排列 如果其中一个方法执行了很多次循环 那么下一个方法就不会执行 从入口main到结束,一条路走到底 必须一个一个的执行 这种程序是单线程程序 效率慢 l  例如 多台电脑网吧上网 多条路通行 线程 概念 l  CPU 中央处理器 inter AW

Java自学之路---DotCom

引言 我从接触编程以来,一直是一个C/C++程序猿,因为我喜欢编程时,那种接地气的感觉,认为只有自己管理内存的使用,心理才踏实.但随着工作中不断增加的见闻,不断的从博客和源码中获得新的见解,我发现这个时代已经发生了变化,我们有强劲的硬件资源.我们有久经考验的框架和源码,我们最宝贵的是花在编码上的时间.所以我决定带着之前C/C++的经验,来认识JAVA是门怎样的语言,以及它的编程理念可以给我带来怎样的好处. 如何学习 和我学习其他语言一样,我主要还是依靠书本,电子书或者是纸质书,这样学习起来才是最

java自学之路-day16

JAVA16 IO流 转换流 引入 l  中文系统默认编码表GBK l  FileWriter的构造方法假定默认编码GBK l  但是一些文本文件有可能是其他编码方式 l  所以引入转换流 可以对编码表进行设定 l  对之后开发互联网程序很重要 概述 l  字符流的一种 l  字符与字节的桥梁 l  继承Writer类 OutputStreamWriter l  Java.io. OutputStreamWriter l  继承Writer类 l  字符输出流 向文本文件写入数据 l  字符流转

java自学之路-day18

数据库 数据库 概念 l  对于一串数据修改其中的一条数据 l  如果用io流就需要全盘读写 然后找到其中的一行 进行修改 l  或者使用数组进行修改 l  这样太复杂 效率慢 所以需要引用数据库 l  数据库本质是一个文件系统 可以看做是一个具有很好的处理数据能力的容器 和集合 数组 都一样 l  里面有严格的数据存储格式 l  数据库管理系统是用一个软件管理数据库 l  常见的数据库管理系统 MYSQL  开源免费 瑞典的公司开发 sun公司收购  Oracle收购了sun MYSQL6.x

java自学之路-day10

JAVA10 Eclipse快捷键补充 l  选中类Ctrl T 继承树 l  Ctrl 或者f3 查看源码 多态会跳转到调用父类中 l  Java中lang包中的所有类 不需要导包 直接用  例如 System String l  Ecplise 中的Jre System Library是默认的eclipse依赖jre的类库 在该位置可以查找到平常使用的String 类 Random类 Math类 l  Jdk 包括 jre和开发工具,jre包括jvm 和运行时所需要的核心类库 l  运行 h