异常:Exception(方法声明抛出异常、try,catch, fianlly)

回顾:文件流

File(String path)
流:
RandomAccessFile(file, rw)
read()
write()
文件复制:
BufferedInputStream(FileInputStream)
BufferedOutputStream(FileOutputStream)
int read() -> 读单个字节
int read(byte[] bs) -> 读bs.length个字节
int read(byte[], off, len)

write(int) -> 写单个字节
write(byte[]) -> 写入数组字节
write(byte[], off, len) 

文件内容读写:
BufferedReader(InputStreamReader(字节流))
String readLine() -> 读取一整行,返回null末尾
PrintWriter(OutputStreamWriter(字节流))
指定文件是否追加写入、指定字符集、指定是否自动刷新
print()
println()

对象读写:
ObjectInputStream(字节流)
readObject()
ObjectOutputStream(字节流)
writeObject(obj)
对象 -> 字节:序列化
对象必须是可序列化的Serializable


Error:严重错误
StackOverError

异常:Exception - 可以解决的

运行时异常/未检查异常:RuntimeException -> Exception
ClassCastException -> 类型转换异常
NullPointerException -> 空指针异常
ArrayIndexOutOfBoundsException -> 数组越界异常
xxxIndexOutOfBoundsException
ConcurrentModificationException -> 集合迭代删除
NumberFormatException -> 数值转换异常
Integer.valueOf(“aa”);
ArithmeticException: / by zero
造成原因:程序员自身马虎,必须要解决的

已检查异常:Exception
FileNotFoundException
IOException
ParseException
SQLException
UnsupportedEncodingException
ClassNotFoundException
造成原因:不是程序员自身问题,没办法完全避免的异常
可能是外部客观原因,不能彻底解决,只能避免

处理异常:只有已检查异常必须使用代码处理
未检查异常必须修改代码、纠正程序

1.方法上声明抛出 throws 已检查异常
2.自己处理 try/catch 代码块
	注意:
	  try只能有一个,catch可以有多个,至少有一个
	  一个catch中可以捕获多个异常,用 | 连接
	  同一个异常,不能多次捕获
	  捕获异常,可以使用父类异常捕获
	  如果同时捕获子类和父类,必须先捕获子类异常,再捕获父类异常
	  try不能独立使用
	  try-catch可以嵌套,但是不推荐
	  
	  e.printStackTrace(); 打印代码执行栈路径
	  	通常开发调试时会保留,上线时删除
	  finally —> 无论如何都会执行的
	  	通常用来释放资源

前期代码,很少使用异常处理,JavaEE框架阶段,自定义异常处理

throw 手动抛出异常对象

异常处理原则:能自己解决的尽量自己解决,不能解决了再向外抛

异常属性:message - 异常提示信息, 很重要
所有异常都有一个使用message初始化的构造器
所有异常都有getMessage()

自定义异常:
目的:为了区分不同的异常类型
定义方法:只需要添加构造器即可
其它全部靠继承

------——————————————————————————————————————————————————————

package java_10;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.UnsupportedEncodingException;

import org.junit.Test;

public class ExceptionDemo {-------------------------------------------------------文件捕获异常
@Test
public void test01() {
try {
String str = null;
str.charAt(0);
System.out.println(“异常之前”);
new FileInputStream(“b.txt”);//读文件
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
System.out.println(“捕获到文件未找到异常”);
e.printStackTrace();
} catch(NullPointerException e) {
System.out.println(“捕获到空指针异常”);
}
// catch (FileNotFoundException|NullPointerException e){ 放在一起
// System.out.println(“捕获到 文件未找到/空指针异常”);
// }
}
@Test
public void test02() {------------------------------------------------------------------------------捕获编码方式异常
try {
new String (“黑”.getBytes(),“uft-8”);//将utf-8写成 uft-8
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Test
public void test03() throws IOException {// ---------------------------------------------------------手动制造异常
//手动制造异常,并抛出,等同于给方法调用者一个结果,结果是异常
throw new IOException();// – 等同于下面两句
/*
* new FileInputStream(“a.txt”);
* return “报表”;
*/

}

——————————————————————————————————————————————————————————————
@Test
public void test04() {-------------- 新建 CEO 对象 来获取报表
CEO ceo = new CEO();
String str = ceo.get财务报表();
System.out.println(str);
}

package java_10;

public class CEO {-————————————————————————————CEO
CFO cfo = new CFO();
public String get财务报表() {
String str = cfo.get财务报表();
return str;
}
}

package java_10;

public class CFO {————————————————————————————CFO
财务经理 cwjl = new 财务经理();
public String get财务报表() {
String str = cwjl.get报表();
return str;
}
}

package java_10;

import java.io.IOException;

public class 财务经理 {-——————————————————————————财务经理
private 会计 kj = new 会计();
public String get报表() {
String str = null;
try {
str = kj.get表();
} catch (IOException e) {
e.printStackTrace();
String message = e.getMessage();-----用来输出异常信息(下面exp行)
System.out.println(message);
str = “财务经理的报表”;
}
return str;
}
}

package java_10;

import java.io.IOException;

public class 会计 {-——————————————————————————————会计
public String get表() throws IOException {-------将异常抛给上级
throw new IOException(“经理,财务报表给过你了”);-------(exp)
}

}

——————————————————————————————————————————————————————————————
@Test
public void test05() { -----------测试finally的顺序 finally在return 之前执行
int i = Login.login();
System.out.println(i);
}
}

package java_10;

public class Login {
public static int login() {----------------------------打印结果为。 finally:11
10(这个10 为return)

	int a =10;
	try {
		
		return a;
		
	}catch(Exception e) {
		return 1;
	}finally {
		a++;
		System.out.println("finally:" + a);
	}
}

}

————————————————————————————————————————————————————————

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值