复习java基础第二天(异常处理)

一、常见的异常类型:


public class TestException {

public static void main(String[] args) {

int i = 10;
//数学异常: java.lang.ArithmeticException
int j = i / 0;
System.out.println(j);

int [] scores = new int[]{1, 2, 4, 5};
//数组下标越界异常: java.lang.ArrayIndexOutOfBoundsException
System.out.println(scores[4]);

Person p1 = new Man();
//类型转换异常: java.lang.ClassCastException
Woman p2 = (Woman) p1;

p1 = null;
//空指针异常: java.lang.NullPointerException
System.out.println(p1.toString());

System.out.println("end...");
}
}

class Person{

}

class Man extends Person{

}

class Woman extends Person{

}

二、不论在try、catch代码块中是否发生了异常事件,finally块中的语句都会被执行。


import java.io.FileNotFoundException;
import java.io.InputStream;

public class TestTryCatchFinally {

public static void main(String[] args) {

try {
int i = 10;
int j = i / 0;
} finally{
System.out.println("finally...");
}

//不论在try、catch代码块中是否发生了异常事件,finally块中的语句都会被执行。
System.out.println("end...");

//示例编译时异常, IO 异常属于编译时异常.
try {
InputStream is = new FileInputStream("abc.txt");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}

三、throws:

1. 在
Java 中使用 throws 关键字声明抛出异常.
 2. throws 方法抛出的异常可以是方法中出现的异常的类型或其父类类型.

 3. throws 可以声明抛出多个异常,
多个异常使用 , 分割.
 4. 运行时异常不需要使用
throws 关键字进行显式的抛出.
 5.
重写方法不能抛出比被重写方法范围更大的异常类型.


import java.io.FileNotFoundException;
import java.io.IOException;

public class TestThrows {

public static void main(String[] args) {
try {
test();
} catch (Exception e) {
e.printStackTrace();
}
}

public static void test(){

int i = 10 / 0;
System.out.println(i);

// InputStream fs = new FileInputStream("abc.txt");

// Connection connection = null;
// String sql = null;
// PreparedStatement ps = connection.prepareStatement(sql);

// byte [] buffer = new byte[fs.available()];
// fs.read(buffer);

A a = new B();
try {
a.method();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}

class A{
void method () throws FileNotFoundException{
}
}

class B extends A{
// @Override
// void method() throws IOException {
// }
}

四:throw:

人工手动抛出异常:
 1.
创建一个异常类对象
 2. 在方法内部使用 throw
关键字把该异常类对象抛出去!

 自定义的异常类:
 1.
通常继承自 RuntimeException(可以继承 Exception)
 2.
自定义的异常类就是用来被人工抛出的!


import java.util.Scanner;

public class TestThrow {

public static void main(String[] args) {
try {
inputAge();
} catch (Exception e) {
System.out.println(e.getMessage());
}
System.out.println("end...");
}

/**
* 输入年纪: 要求年纪必须在 15-30 之间, 超出 30 则年纪偏大
*/
public static void inputAge(){
Scanner sc = new Scanner(System.in);
System.out.print("age=");
int age = sc.nextInt();

if(age > 30){
// System.out.println("年纪偏大.");
throw new AgeTooLargeException("年纪偏大.");
}
}

public static void test(){

//1. 创建一个异常类对象
RuntimeException ex = new RuntimeException();

//2. 把异常类对象抛出去
throw ex;
}
}

五、自定义异常举例:

  1、先定义一个异常类:


public class EcDef extends RuntimeException{

public EcDef() {
// TODO Auto-generated constructor stub
}

public EcDef(String msg) {
super(msg);
}

}

  2、再创建一个处理异常的类:


public class EcmDef {

public static void main(String[] args) {

try {
int i = Integer.parseInt(args[0]); // "a"
int j = Integer.parseInt(args[1]);

System.out.println(ecm(i, j));
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("输入的参数个数不足.");
} catch (ArithmeticException e) {
System.out.println("除数不能为 0");
} catch (EcDef e) {
System.out.println(e.getMessage());
} catch (NumberFormatException e) {
System.out.println("输入的参数不能转为整型.");
}
}

public static int ecm(int i, int j){

if(i < 0 || j < 0){
throw new EcDef("不能处理负数. ");
}

int result = i / j;
return result;
}
}

复习java基础第二天(异常处理),布布扣,bubuko.com

时间: 2024-08-04 14:39:02

复习java基础第二天(异常处理)的相关文章

复习java基础第三天(集合)

一.Collection常用的方法: Java 集合可分为 Set.List 和 Map 三种体系: Set:无序.不可重复的集合. List:有序,可重复的集合. Map:具有映射关系的集合. Collection 接口是 List.Set 和 Queue 接口的父接口, 该接口里定义的方法既可用于操作 Set 集合,也可用于操作 List 和 Queue 集合: import java.util.ArrayList; import java.util.Collection; import j

复习java基础第一天

一:static static: 静态的.   1. 若需要一个类的多个对象共享一个变量,则该变量需要使用 static 修饰.   2. 因为 static 修饰的变量为类的所有的实例所共享,所以 static 成员不属于某个类的实例, 而属于整个类.     所以在访问权限允许的情况下,可以使用 "类名." 直接访问静态成员(成员包括属性和方法).  3. 注意: 在静态方法里只能直接调用同类中其它的静态成员(包括变量和方法),而不能直接访问类中的非静态成员.     这是因为,对

复习java基础第七天(反射)

一:目标 Ø理解 Class 类 Ø理解 Java 的类加载机制 Ø学会使用 ClassLoader 进行类加载 Ø理解反射的机制 Ø掌握 Constructor.Method.Field 类的用法 Ø理解并掌握动态代理 1.Class类 –对象照镜子后可以得到的信息:某个类的数据成员名.方法和构造器.某个类到底实现了哪些接口. 对于每个类而言,JRE 都为其保留一个不变的 Class 类型的对象. 一个 Class 对象包含了特定某个类的有关信息. –  Class 对象只能由系统建立对象.

复习java基础第六天(IO)

一:File 类 • 输入:读取外部数据(磁盘.光盘等存储设备的数据)到程序(内存)中. • 输出:将程序(内存)数据输出到磁盘.光盘等存储设备中 • Java 的 IO 流主要包括输入.输出两种 IO 流,每种输入.输出流有可分为字节流和字符流两大类: – 字节流以字节为单位来处理输入.输出操作 – 字符流以字符为单位来处理输入.输出操作 注意:输入.输出是以程序为参照. • File 类代表与平台无关的文件和目录. • File  能新建.删除.重命名文件和目录,但 File 不能访问文件内

复习java基础第四天(集合)

List 代表一个元素有序.且可重复的集合,集合中的每个元素都有其对应的顺序索引 List 允许使用重复元素,可以通过索引来访问指定位置的集合元素. List 默认按元素的添加顺序设置元素的索引. List 集合里添加了一些根据索引来操作集合元素的方法: 另外: List 额外提供了一个 listIterator() 方法,该方法返回一个 ListIterator 对象, ListIterator 接口继承了 Iterator 接口,提供了专门操作 List 的方法: boolean hasPr

Java基础--第二十五天

TCP协议: Socket类 构造方法: TCP程序,必须先开服务器端 成员方法 服务器端程序: 创建服务器端Socket对象: 监听连接: 获取输入流,并显示: 释放资源 ServerSocket类 网络编程 网络编程+反馈 大融合[所有的Java基础融合为一个实例] 正则表达式: 符合某种规则的字符串,常用于校验 规则: Pattern类 A:字符 x:任意字符表示任意字符本身 \\:反斜线字符[转义字符] \r:回车 \n:换行 B:字符类 [abc]:表示a,b,c任意字符一次 [^ab

Java基础--第二十六天

正则表达式的规则字符: A:字符 x 字符 x,任意字符代表自己本身. \\ 反斜线字符 \r      回车 \n     换行 B:字符类 [abc] a.b 或 c,任意字符一次. [^abc] 任何字符,除了 a.b 或 c [a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内 [0-9] 任意的数字字符一次 C:预定义字符类 . 任意的字符 \d 数字:[0-9] \w 单词字符:[a-zA-Z_0-9] 单词字符:英文,数字,及_ D:边界匹配器 ^ 行的开头 $ 行的结

java基础学习总结——异常处理

一.异常的概念 异常指的是运行期出现的错误,也就是当程序开始执行以后执行期出现的错误.出现错误时观察错误的名字和行号最为重要. 1 package cn.javastudy.summary; 2 3 public class TestEx{ 4 5 public static void main(String args[]){ 6 int arr[]={1,2,3}; 7 System.out.println(arr[2]); 8 /** 9 * 这里使用try……catch来捕获除以0产生的异

Java基础 - 第二天 Eclipse、运算符、Scanner类

第1章    Eclipse 1.1     Eclipse概述 l 概述 Eclipse是一个专门针对Java的集成开发工具(IDE),是IBM公司的产品.是免费.开源.由Java语言编写.所以,需要有JRE运行环境并配置好环境变量.它可以极大地提升我们的开发效率.可以自动编译,检查错误.在公司中,使用的就是Eclipse进行开发. l 特点描述 n 免费 n 纯Java语言编写 n 免安装 n 扩展性强 l 下载和安装 n 下载 http://eclipse.org/ n 安装 绿色版 解压