A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

第2章 Throwable常用方法&自定义异常

                           
1.1 Throwable常用方法
String getMessage()  返回此 throwable 的详细消息字符串
String toString()  返回此 throwable 的简短描述
void printStackTrace()  打印异常的堆栈跟踪信息
1.1.1 案例代码六:
[AppleScript] 纯文本查看 复制代码
package com.itheima_01;
/*
 * Throwable的常用方法:
String getMessage()  
String toString()  
void printStackTrace()  
 *
 */
public class ExceptionDemo4 {
public static void main(String[] args) {
try {
System.out.println(2 / 0);
} catch (ArithmeticException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
 
private static void method() {
try {
System.out.println(2 / 0);
} catch(ArithmeticException e) {
//String getMessage() : 原因
//System.out.println(e.getMessage());
//String toString()  类型和原因
//System.out.println(e.toString());
 
//void printStackTrace():类型原因和位置
e.printStackTrace();
}
//System.out.println("hello");
}
}
1.2 finally概述和应用场景
[AppleScript] 纯文本查看 复制代码
finally使用格式:
try{
}catch(异常类型 异常变量){
}finally{
   //释放资源的代码
}
1.2.1 案例代码七:
[AppleScript] 纯文本查看 复制代码
   package com.itheima_01;
import java.io.FileWriter;
import java.io.IOException;
 
/*
 *  finally:组合try...catch使用,用于释放资源等收尾工作,无论try...catch语句如何执行,finally的代码一定会执行
 *  
 *  try {
 *          有可能出现问题的代码;
 *  
 *  } catch(异常对象) {
 *          处理异常;
 *  } finally {
 *          释放资源;
 *          清理垃圾;
 *  }
 *  
 */
public class ExceptionDemo5 {
public static void main(String[] args) {
//method();
FileWriter fw = null;
try {
System.out.println(2 / 0);
fw = new FileWriter("a.txt");
fw.write("hello");
fw.write("world");
//System.out.println(2 / 0);
fw.write("java");
//fw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
//释放资源
try {
if(fw != null) {
fw.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
 
private static void method() {
try {
System.out.println(2 / 1);
} catch(ArithmeticException e) {
System.out.println("除数不能为0");
} finally {
System.out.println("清理垃圾");
}
}
 
 
}
 
1.3 编译时异常&运行时异常
A: 编译时期异常:是Exception的子类,非RuntimeExcpetion的子类,在编译时期必须处理
B:RuntimeException和他的所有子类异常,都属于运行时期异常。NullPointerException,ArrayIndexOutOfBoundsException等都属于运行时期异常.
运行时期异常的特点:
方法中抛出运行时期异常,方法定义中无需throws声明,调用者也无需处理此异常
运行时期异常一旦发生,需要程序人员修改源代码.
1.3.1 案例代码八:
[AppleScript] 纯文本查看 复制代码
package com.itheima_01;
 
import java.io.FileWriter;
import java.io.IOException;
 
/*
 * 异常的分类:
运行时期异常:RuntimeException的子类就是运行时期异常,在编译时期可以自由选择处理或者不处理
编译时期异常:是Exception的子类,非RuntimeExcpetion的子类,在编译时期必须处理
 
 */
public class ExceptionDemo6 {
public static void main(String[] args) {
//System.out.println(2 / 0);
//String s = null;
//System.out.println(s.length());
try {
FileWriter fw = new FileWriter("a.txt");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
1.4 自定义异常
需求:写一个方法,接受考试成绩,如果考试成绩的范围在0-100之间则属于正常,否则属于异常
1.4.1 案例代码九:
     当成绩在0~100范围,抛出一个运行时异常或编译时异常,阻止程序继续向下执行
[AppleScript] 纯文本查看 复制代码
     package com.itheima_01;
/*
 * 需求:写一个方法,接受考试成绩,如果考试成绩的范围在0-100之间则属于正常,否则属于异常
 *
 * throws:处理异常的一种方式,把异常抛出,由调用者来处理
 * throw:制造异常的方式,并且结束方法
 *
 * 注意:如果抛出(throw)的是编译时期异常,必须在方法声明处抛出(throws)
 *
 * 如何自定义一个异常类呢?
 * 非常简单,写一个类去继承Exception或者RuntimeException,然后实现多个构造即可
 *
 *  */
public class ExceptionDemo7 {
public static void main(String[] args) {
/*boolean flag = checkScore(-10);
System.out.println(flag);*/
try {
checkScore(110);
} catch (Exception e) {
//System.out.println(e.getMessage());
e.printStackTrace();
}
//checkScore(110);
}
/*        public static boolean checkScore(int score) {
//判断考试成绩是否符合范围,如果不符合则返回false
if(score < 0 || score > 100) {
return false;
}
//符合
return true;
}*/
public static void checkScore(int score) throws Exception {
if(score < 0 || score > 100) {
throw new RuntimeException("考试成绩不符合要求");
//throw new Exception("考试成绩不符合要求");
}
System.out.println("考试成绩符合要求");
}
}
  
1.4.2 案例代码:
      我们也可以自定义一个编译时异常或者运行时异常抛出:
[AppleScript] 纯文本查看 复制代码
   package com.itheima_01;
 
public class MyException extends /*RuntimeException*/ Exception{
 
public MyException() {
super();
// TODO Auto-generated constructor stub
}
 
public MyException(String message) {
super(message);
// TODO Auto-generated constructor stub
}
/*public MyException() {
super();
}
public MyException(String s) {
super(s);
}*/
}
 
[AppleScript] 纯文本查看 复制代码
package com.itheima_01;
/*
 * 需求:写一个方法,接受考试成绩,如果考试成绩的范围在0-100之间则属于正常,否则属于异常
 *
 * throws:处理异常的一种方式,把异常抛出,由调用者来处理
 * throw:制造异常的方式,并且结束方法
 *
 * 注意:如果抛出(throw)的是编译时期异常,必须在方法声明处抛出(throws)
 *
 * 如何自定义一个异常类呢?
 * 非常简单,写一个类去继承Exception或者RuntimeException,然后实现多个构造即可
 *
 *  */
public class ExceptionDemo7 {
public static void main(String[] args) {
/*boolean flag = checkScore(-10);
System.out.println(flag);*/
try {
checkScore(110);
} catch (Exception e) {
//System.out.println(e.getMessage());
e.printStackTrace();
}
//checkScore(110);
}
 
public static void checkScore(int score) throws Exception {
if(score < 0 || score > 100) {
 
throw new MyException("考试成绩不符合要求");
}
System.out.println("考试成绩符合要求");
}
}
更多
第一天
传智播客·黑马程序员郑州校区地址
河南省郑州市 高新区长椿路11号大学科技园(西区)东门8号楼三层
联系电话 0371-56061160/61/62
来校路线  地铁一号线梧桐街站A口出

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马