12.异常机制
来源:互联网 发布:淘宝V6会员网贷 编辑:程序博客网 时间:2024/05/21 17:01
1.异常是什么?
(1)异常模拟的是现实世界中不正常事件
(2)Java中采用类去模拟异常
(3)类是可以创建对象的 异常是类
2.异常机制作用?
1.声明抛出 throws
6.捕捉
8.关于finally语句块
1.finally语句块 可以直接和try语句块联用 try...finally...
2.try...catch...finally也可以
3.在finally中的代码一定会执行
(1)异常模拟的是现实世界中不正常事件
(2)Java中采用类去模拟异常
(3)类是可以创建对象的 异常是类
2.异常机制作用?
程序发生异常事件后,为我们输出了一些信息,程序员可以根据信息处理,使程序更加健壮
3.异常继承结构
1.声明抛出 throws
2.捕捉 try...catch...
5.声明抛出:在方法声明的位置上使用throws关键字向上抛出异常
import java.io.*;public class test01{ //IOException Excetion 都可以public static void main(String[] args)throws FileNotFoundException{//创建文件输入流,读取文件FileInputStream fis = new FileInputStream("D:/java程序/text.txt");}}//以上程序不通过/* test01.java:12: 错误: 未报告的异常错误FileNotFoundException; 必须对其进行捕获或声明以便抛出 FileInputStream fis = new FileInputStream("D:/java程序/text.txt"); ^ */
深入throws
import java.io.*;public class test01{public static void main(String[] args)throws FileNotFoundException{//真正的处理try{m1();}catch(FileNotFoundException e){}System.out.println("hello world");}//使用throws处理异常并不是真正的处理异常,而是推卸责任//谁调用就会抛给谁//上面的m1方法如果出现了异常,因为采用的是上抛,给了JVM,JVM遇到这个异常就会退出JVM,下面的这个代码不会执行public static void m1()throws FileNotFoundException{m2();}public static void m2()throws FileNotFoundException{m3();}public static void m3()throws FileNotFoundException{FileInputStream fis = new FileInputStream("c:/test");}}//在程序运行过程中发生了FileNotFoundException类型异常//JVM为我们创建了一个FileNotFoundException类型的对象//JVM负责将该对象的信息打印到控制台//并且JVM停掉了程序的运行(所以没有输出hello world)/*throws后结果:D:\java程序\static>java test01Exception in thread "main" java.io.FileNotFoundException: c:\test (系统找不到指定的文件。) at java.io.FileInputStream.open0(Native Method) at java.io.FileInputStream.open(Unknown Source) at java.io.FileInputStream.<init>(Unknown Source) at java.io.FileInputStream.<init>(Unknown Source) at test01.m3(test01.java:12) at test01.m2(test01.java:11) at test01.m1(test01.java:10) at test01.main(test01.java:6)try...catch 后结果:hello world*/
6.捕捉
(1).语法:
try{
可能出现异常的代码
}catch(异常类型1 变量){
处理异常的代码;
}catch(异常类型2 变量){
处理异常的代码;
}...
(2).catch语句块可以写多个
(3).但是从上到下catch,必须从小类型异常到大类型异常进行捕捉
(4).try..catch 中最多执行一个语句块,执行后就结束了
import java.io.*;public class test01{public static void main(String[] args){try{//程序执行到此发生了FileNotFoundException错误//JVM会自动创建一个FileNotFoundException类型的对象,将该对象的内存地址赋值给catch语句块中的e变量FileInputStream fis = new FileInputStream("C:/abc"); //上面的代码出现了异常,try语句块不再继续执行,直接进入catch语句块执行System.out.println("hello world");fis.read();}catch(FileNotFoundException e){System.out.println("读取的文件不存在");//FileNotFoundException将Object中的toString方法重写System.out.println(e);//java.io.FileNotFoundException: C:\abc (系统找不到指定的文件。)}catch(IOException e){System.out.println("其它IO异常");}}}
7.e.printStackTrace() 和 e.getMessage()
import java.io.*;public class test01{public static void main(String[] args){try{FileInputStream a = new FileInputStream("c:/abc");}catch(FileNotFoundException e){ e.printStackTrace();//打印异常堆栈信息,一般情况下使用该方式调用String message = e.getMessage();System.out.println(message);//没有上一个方法详细}System.out.println("hello world");}}/*输出结果:java.io.FileNotFoundException: c:\abc (系统找不到指定的文件。)at java.io.FileInputStream.open0(Native Method)at java.io.FileInputStream.open(Unknown Source)at java.io.FileInputStream.<init>(Unknown Source)at java.io.FileInputStream.<init>(Unknown Source)at test01.main(test01.java:6)c:\abc (系统找不到指定的文件。)hello world*/
8.关于finally语句块
1.finally语句块 可以直接和try语句块联用 try...finally...
2.try...catch...finally也可以
3.在finally中的代码一定会执行
public class test01{public static void main(String[] args){ int i = m1(); System.out.println(i);//10}static int i =10;static int m1(){try{return i;}finally{i++;System.out.println("m1的i:"+i);//11}}}/*结果:m1的i:11 10以上代码执行原理:try{int temp = i;return temp;}finally{i++;System.out.println("m1的i:"+i);}*/
9.final finalize finally的区别?
final: final可以用来修饰类,修饰的类无法被继承
可以用来修饰方法,修饰的方法无法被覆盖
修饰的局部变量一旦赋值不可再改变,修饰的成员变量需手动赋值 ,与static连用称为常量
finalize: 是Object内的一个方法的名字,垃圾回收器在回收Java对象之前,会先自动调用Java对象的finalize方法
finally: 异常处理机制中的finally语句块
10.自定义"无效名字"异常:
1.编译时异常,直接继承Exception
2.运行时异常,直接继承RuntimeException
public class test01 extends Exception//编译时异常 //public class test01 extends RuntimeException运行时异常{//定义异常一般提供两个构造方法public test01(){}public test01(String msg){ super(msg);}}
//顾客相关业务public class CustomerService{public void register(String name)throws test01{//完成注册if(name.length<6){//异常//创建异常对象并手动抛出异常throw new test01("用户名长度不能少于六位");}//如果代码能执行到此处证明用户名是合法的System.out.println("");}}
//模拟注册public class test{public static void main(String[] args){//假如用户提供的用户名如下String username = "jack"//注册 CustomerService cs = new CustomerService(); try{cs.register(username);}catch(test01){ System.out.println(e.getMessage()); }}}
阅读全文
0 0
- 12.异常机制
- 异常机制
- 异常机制
- 异常机制
- 异常机制
- 异常机制
- 异常机制
- 异常机制
- 异常机制
- 异常机制
- 异常机制
- 异常机制
- 异常机制
- 异常机制
- 异常机制
- 异常机制
- java异常机制分析
- C++中的异常机制
- 操作系统概论
- 我对高阶函数的思考
- 证书
- ubuntu设置环境变量
- 一个不知名的项目--Day06
- 12.异常机制
- 操作系统安装文章收集
- 年终总结
- linux 下DNW 下载环境搭建
- 我要转行Linux驱动开发了,驱动开发的工作是什么样的情况,希望大神给点建议,也希望大家给我一点鼓励
- CodeForces 457 B.Distributed Join(贪心)
- 重装系统之后如果无线上不了
- git 查看远程分支、本地分支、创建分支、把分支推到远程repository、删除本地分支
- 使用 jQuery 为 AJAX 动态添加的 HTML 元素绑定事件