异常.docx
- 文档编号:4071053
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:19
- 大小:18KB
异常.docx
《异常.docx》由会员分享,可在线阅读,更多相关《异常.docx(19页珍藏版)》请在冰点文库上搜索。
异常
importjava.io.BufferedReader;
importjava.io.File;
importjava.io.FileReader;
/**
*异常
*/
publicclassStudyException{
publicstaticvoidmain(String[]args){//throwsException{//将异常抛到JVM中
//newStudyException().div();
//newStudyException().div3();
//newStudyException().div4();
//newStudyException().div5();
//newStudyException().div6();
//newStudyException().div7();
//newStudyException().div8();
//newStudyException().div9();
/**
try{
newStudyException().div10();
}catch(Exceptione){
System.err.println("MainMessage:
"+e.getMessage());
System.out.println("##############################");
e.printStackTrace();
}
*/
/**
intsum=newStudyException().div11();
System.out.println("mainsum:
"+sum);
*/
/**
//获得结果信息
ResultInforesultInfo=newStudyException().div12();
if(resultInfo.getResultCode()==ResultInfo.RESULT_SUCCESS){
System.out.println("成功了...");
}else{
System.out.println("失败了...");
}
*/
//newStudyException().div13();
//newStudyException().div15();
try{
//newStudyException().div16(-1,8);
newStudyException().div16(1,9);
}catch(Exceptionex){
ex.printStackTrace();
}
}
/**
*程序中的异常
*程序本身有运行异常时,程序是可以编译通过的
*/
publicvoiddiv(){
intsum=0;
for(inti=10;i>=-10;i--){
sum=sum+5/i;//当i=0出现异常java.lang.ArithmeticException:
/byzero程序终止运行
System.out.println("sum:
"+sum+"i:
"+i);
}
System.out.println("sum:
"+sum);
}
/**
*程序中有非运行异常抛出的时候,必须要去处理或推卸,否则无法通过编译
*/
publicvoiddiv1(){//throwsException{
//定义字符输入流
//BufferedReaderin=newBufferedReader(newFileReader(newFile("StudyException.java")));//未报告的异常java.io.FileNotFoundException
}
/**
*从程序中直接抛出运行异常
*/
publicvoiddiv2(){
thrownewRuntimeException("直接抛出运行异常");//此处跟sum=sum+5/i;一样,都抛出运行异常
//System.out.println("这里执行不了,也无法通过编译");//无法访问的语句
}
/////////////////////因为还没有学到相关的非运行异常,所以以下的例子都是用运行异常去模拟非运行异常////////////////////////
/**
*方法对异常的处理(完全抛出)[throws加s表示忽略一类异常]
*div3去做一些事情,出现的一切问题都由调用者来承担
*/
//publicvoiddiv3()throwsArithmeticException{//因为抛出了ArithmeticException[运行异常],所以调用不处理可以通过编译
publicvoiddiv3()throwsException{//忽略掉所有的非运行异常[调用者必须要进行捕捉或忽略,否则无法通过编译]
//程序中可能出现问题
intsum=0;
for(inti=10;i>=-10;i--){
sum=sum+5/i;//当i=0出现异常java.lang.ArithmeticException:
/byzero程序终止运行
System.out.println("sum:
"+sum+"i:
"+i);
}
}
/**
*方法对异常的处理(完全承担)trycatch
*/
publicvoiddiv4(){
//程序中可能出现问题
intsum=0;
try{
for(inti=10;i>=-10;i--){
sum=sum+5/i;
System.out.println("sum:
"+sum+"i:
"+i);
}
}catch(Exceptionex){//只要catch就表示捕捉了
System.err.println("都是我的问题,所以我来承担,跟调用者没有关系");
}
System.out.println("问题被解决了,这里依然可以正常执行");
System.out.println("sum:
"+sum);
}
/**
*方法对异常的处理(完全承担)[缩小处理范围]trycatch
*/
publicvoiddiv5(){
//程序中可能出现问题
intsum=0;
for(inti=10;i>=-10;i--){//每个数值去try一次
try{
sum=sum+5/i;
System.out.println("sum:
"+sum+"i:
"+i);
}catch(Exceptionex){//只要catch就表示捕捉了
System.err.println("都是我的问题,所以我来承担,跟调用者没有关系");
}
}
System.out.println("问题被解决了,这里依然可以正常执行");
System.out.println("sum:
"+sum);
}
/**
*多种异常的抛出
*/
publicvoiddiv6(){
try{
int[]intArray=newint[10];
intArray[10]=100;//java.lang.ArrayIndexOutOfBoundsException:
10
System.out.println("上边出问题了,这里不会被执行了");
intsum=0;
for(inti=10;i>=-10;i--){
sum=sum+5/i;
System.out.println("sum:
"+sum+"i:
"+i);
}
}catch(ArithmeticExceptionae){
System.err.println("数学运算错了");
}catch(ArrayIndexOutOfBoundsExceptionaiobe){
System.err.println("索引超界了");
}
System.out.println("问题被解决了,这里可以继续运行了");
}
/**
*异常的部分承担
*/
publicvoiddiv7()throwsException{//因为从方法中抛出了非运行异常,所以这里必须要声明抛出[忽略]
try{
int[]intArray=newint[10];
intArray[10]=100;//java.lang.ArrayIndexOutOfBoundsException:
10
System.out.println("上边出问题了,这里不会被执行了");
intsum=0;
for(inti=10;i>=-10;i--){
sum=sum+5/i;
System.out.println("sum:
"+sum+"i:
"+i);
}
}catch(ArithmeticExceptionae){//这个异常是我的问题
System.err.println("数学运算错了");
}catch(ArrayIndexOutOfBoundsExceptionaiobe){//这个异常跟我无关,所以我要抛出去
System.err.println("索引超界了");
//throwaiobe;//类型是ArrayIndexOutOfBoundsException[运行异常]//方法体上不需要声明抛出(忽略异常throws)
thrownewException("这个问题和我无关,我推卸掉",aiobe);
}
System.out.println("一旦throw[问题抛出],这里就不会运行了,如果异常都被处理了,这里会被运行");
}
/**
*用超类来捕捉异常
*/
publicvoiddiv8(){
try{
int[]intArray=newint[10];
intArray[10]=100;
intsum=0;
for(inti=10;i>=-10;i--){
sum=sum+5/i;
System.out.println("sum:
"+sum+"i:
"+i);
}
}catch(ArithmeticExceptionae){//已捕捉到异常java.lang.ArithmeticException
System.err.println("数学运算错了");
}catch(Exceptionex){//超类异常必须放在后边,如果放在前边拦截了子异常,则无法通过编译
System.err.println("这里捕捉到没有考虑到的因素");
}
}
/**
*finally程序中必须要处理的事情,通常用来关闭资源
*/
publicvoiddiv9()throwsException{
try{
int[]intArray=newint[10];
intArray[10]=100;
intsum=0;
for(inti=10;i>=-10;i--){
sum=sum+5/i;
System.out.println("sum:
"+sum+"i:
"+i);
}
/**
int[]intArray=newint[10];
intArray[10]=100;
*/
}catch(ArithmeticExceptionae){
System.err.println("数学运算错了");
}catch(Exceptionex){
System.err.println("索引超界了");
//抛出异常
thrownewException("索引超界了",ex);//有return效果跟throw一样
//这里无法被访问
}finally{
System.out.println("无论如何都会执行这里的代码");
}
System.out.println("如果程序中问题被解决了,这里会被执行");
}
/**
*在实际开发当中,运行异常是我们应该避免的,避免了所以就不需要用catch去捕捉
*而对于非运行异常,是我们必须要用catch处理的,要么声明抛出
*/
/**
*获得和传递异常的信息
*/
publicvoiddiv10()throwsException{
try{
intsum=0;
for(inti=10;i>=-10;i--){
sum=sum+5/i;
System.out.println("sum:
"+sum+"i:
"+i);
}
int[]intArray=newint[10];
intArray[10]=100;
}catch(Exceptionex){
//获得异常的信息
Stringmessage=ex.getMessage();
System.err.println("Message:
"+message);
System.out.println("---------------------");
//获得异常栈
ex.printStackTrace();
System.out.println("---------------------");
//抛出异常
//throwex;//将异常传递到外层
//thrownewException(ex);
//thrownewException("出问题了!
");//转化为新的异常对象抛出,原来的异常信息不被外层知道
thrownewException("出问题了!
",ex);
}
}
/**
*异常对返回值的影响
*1、有问题直接抛出异常
*/
publicintdiv11()throwsException{
intsum=0;
try{
for(inti=10;i>=-10;i--){
sum=sum+5/i;
}
returnsum;//正常返回结果值
}catch(Exceptionex){
//有问题的时候抛出问题
System.err.println("出问题了");
throwex;
//returnsum;//这里的代码永远不会被访问
}
//returnsum;//正常返回结果值
}
/**
*异常对返回值的影响
*2、有问题转化为自定义对象返回
*/
publicResultInfodiv12()throwsException{
intsum=0;
try{
for(inti=10;i>=-10;i--){
sum=sum+5/i;
}
returnnewResultInfo(ResultInfo.RESULT_SUCCESS,"成功了");
}catch(Exceptionex){
returnnewResultInfo(ResultInfo.RESULT_FAILURE,"失败了");
}
}
/**
*trycatch多层嵌套
*/
publicvoiddiv13(){
intsum=0;
try{
try{
for(inti=10;i>=-10;i--){
sum=sum+5/i;
}
}catch(ArrayIndexOutOfBoundsExceptionex){
System.err.println("索引超界了");
}
}catch(Exceptionex){
System.err.println("其他问题");
}
}
/**
*方法的多层嵌套(div14和div15)
*/
publicvoiddiv14(){
intsum=0;
try{
for(inti=10;i>=-10;i--){
sum=sum+5/i;
}
}catch(ArrayIndexOutOfBoundsExceptionex){
System.err.println("索引超界了..");
//throw***Exception;
}
}
publicvoiddiv15(){
try{
this.div14();
}catch(Exceptionex){
System.err.println("其他问题..");
//throw***Exception;
}
}
/**
*使用自定义异常
*/
publicvoiddiv16(intmin,intmax)throwsParameterValidException,DataParseException{
if(min<=0&&max>=0){
//参数非法
System.err.println("参数非法");
thrownewParameterValidException("参数非法");
}
intsum=0;
try{
for(inti=min;i<=max;i++){
sum=sum+5/i;
}
int[]myArray=newint[max];//max>=11
myArray[10]=20;
}catch(Exceptionex){
//数据错误了
System.err.println("数据错误了");
thrownewDataParseException("数据错误了",ex);
}
}
/**
*使用自定义异常场景
*/
publicvoiddiv17(intmin,intmax)throwsDataParseException{
//后来发现方法里有很多异常不属于我自己的
//转化自定义异常DataParseException
}
}
/**
*参数非法异常[自定义异常]
*/
classParameterValidExceptionextendsException{
/**
*默认构造器
*/
publicParameterValidException(){
super();
}
/**
*@message异常信息
*/
publicParameterValidException(Stringmessage){
super(message);
}
/**
*@message异常信息
*@ex异常对象
*/
publicParameterValidException(Stringmessage,Exceptionex){
super(message,ex);
}
}
/**
*数据解析异常[自定义异常]
*/
classDataParseExceptionextendsException{
/**
*默认构造器
*/
publicDataParseException(){
super();
}
/**
*@message异常信息
*/
publicDataParseException(Stringmessage){
super(message);
}
/**
*@message异常信息
*@ex异常对象
*/
publicDataParseException(Stringmessage,Exceptionex){
super(message,ex);
}
}
/**
*结果信息封装类
*/
classResultInfo{
/**
*成功
*/
publicstaticfinalintRESULT_SUCCESS=1;
/**
*失败
*/
publicstaticfinalintRESULT_FAILURE=0;
privateintresultCode;
privateStringresultMessage;
publicResultInfo(intresultCode,StringresultMessage){
this.resultCode=resultCode;
t
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 异常