JavaSE入门——异常Exception

文章目录

  • Throwable
    • 直接子类
      • Exception
      • Error
    • Exception
      • 异常分类
      • 处理形式
      • try{}catch{}
      • Throws
      • Throw

Throwable

Throwable是Java中专门模拟所有异常和错误的类,所有异常类都继承这个祖类

直接子类

Exception

它的直接子类除RunTime Exception(运行时异常)其他都是编译时异常

Error

是系统内部错误,比如栈内存溢出,虚拟机错误,这种情况jvm会终止程序,不需要我们操作

Exception

异常分类

编译时与运行时

  • 在执行Javac命令出错,是编译时。
  • 执行Java命令出错,是运行时。

当异常不处理时,会终止程序运行,下面代码不执行
这里引入一个鲁棒性的概念,就是系统健壮性

处理形式

  • try{}catch{}:用于客户端
  • throws:用于类库端
  • throw:异常原点

try{}catch{}

相当于if(){}else{},只不过这里用在了异常,判断条件是是否发生异常,如果发生异常那么就执行catch里面的语句。

作用:这样做就不会碰到异常就结束程序声明周期了。

catch也可以写多个,那么此时就相当于if(){}else if(){}else if(){}…,格式如下:


/*
 * try{
 * 		可能出现异常的代码;
 * }catch(异常类型1 变量){
 * 		处理措施;
 * }catch(异常类型2 变量){
 * 		处理措施;
 * }catch(异常类型3 变量){
 * 		处理措施;
 * } 
 * catch 语句可以根据代码的异常写多个
 */

注意

  • 从上往下,必须子类到父类,或者没有继承关系,要不然会因为多态把子类捕捉了
  • 虽然多个catch但是只有一个执行

1.7版本
自1.7版本之后,try{}catch{}又增加里两个新特性。

一个就是多个catch语句,输出语句相同,那么可以用一个catch同时捕捉,之间用|隔开。

一个就是自动关闭资源。格式:try(开启资源语句位置){}catch{}。

传统关闭资源写法:

//		 传统关闭资源写法
				FileInputStream fis = null;
				try {
					fis = new FileInputStream("地址如:D:/123.txt");
//					 TODO 数据操作
					System.out.println(fis.read());
				} catch (IOException e) {
					e.printStackTrace();
				} finally {
					try {
						if (fis != null) {
//							关闭资源    名.class
							fis.close();
						}
					} catch (IOException e) {
						e.printStackTrace();
					}
				}

新特性写法:

				try (FileInputStream fis1 = new FileInputStream("地址如:D:/123.txt");) {
//					 TODO 操作
//					fis1.read()读取
					System.out.println(fis1.read() + "---");
				} catch (Exception e) {
				e.printStackTrace();
	}
				

Throws

又叫做抛异常。

用于不想处理或者没办法处理(通常在类库中)的时候,把错误信息交给调用人员。

并不会不会处理异常,只是一种提醒机制,告诉调用人员这里可能有问题

如果上家提醒了你,要么你就使用try…catch…解决,要么你就提醒下家。

public class Exception_04 {

	public static void main(String[] args) {
//		还能抛,但是没实际用处
		try {
			m1();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("--------");
	}
	public static void m1() throws FileNotFoundException {
		m2();
	}
	public static void m2() throws FileNotFoundException {
		m3();
	}
	@SuppressWarnings("resource")
	public static void m3() throws FileNotFoundException {
			new FileInputStream("23");
	}

}

Throw

又叫做异常原点。
常用于自定义一个异常,就是自己定义一个异常,常在写项目中用。

规定:

  • 必须继承一个已有的异常类,一般是Exception/RunTime Exception
  • 有一个公共是无参构造
  • 有一个有参构造(字符串类型)
public class UserService {
	public void  m1(String name) throws NameLengthException {
		if (name.length() < 6) {
		//定义一个密码不能少于6位的异常
			throw new NameLengthException("密码不能少于六位");
		}
		System.out.println("登陆成功");
	}
}

public class NameLengthException extends Exception {
	public NameLengthException() {
		
	}
	public NameLengthException(String s) {
		super(s);
	}
	
}

你可能感兴趣的:(笔记,JavaSE,java)