Java 异常,IO流,多线程,网络编程,反射机制

文章内容输出来源:拉勾教育Java就业急训营


前言

基于Java异常,IO流,多线程,网络编程,反射机制


一、异常

异常 :指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止
在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常的方式是中断处理。
异常指的并不是语法错误,语法错了,编译不通过,不会产生字节码文件,根本不能运行.

编译时出现错误,可以及时处理。运行后,出现的非正常中断是异常。所以需要封装异常。异常处理机制会将代码执行交给异常处理器。

1.异常分类

Throwable是 Java 语言中所有错误或异常的超类。下一层分为Error和Exception
Exception(RuntimeException、CheckedException)

Exception有两个分支,一个是运行时异常RuntimeException,一个是CheckedException。

检查异常CheckedException,如I/O错误导致的IOException、SQLException。

RuntimeException是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。 如:NullPointerException、ClassCastException;出现RuntimeException,一定是程序员的错误.

检查异常CheckedException:一般是外部错误,这种异常都发生在编译阶段,Java编译器会强制程序去捕获此类异常,即会出现要求你把这段可能出现异常的程序进行try catch,该类异常一般包括几个方面:

  1. 试图在文件尾部读取数据
  2. 试图打开一个错误格式的URL
  3. 试图根据给定的字符串查找class对象,而这个字符串表示的类并不存在

2.异常的处理

Java异常处理的五个关键字:try、catch、finally、throw、throws

2.1 抛出异常throw

throw用在方法内,用来抛出一个异常对象,将这个异常对象传递到调用者处,并结束当前方法的执行。
使用格式:throw new 异常类名(参数);

public static int getElement(int[] arr,int index){
   
//判断 索引是否越界
	if(index<0 || index>arr.length‐1){
   
/*
判断条件如果满足,当执行完throw抛出异常对象后,方法已经无法继续运算。
这时就会结束当前方法的执行,并将异常告知给调用者。这时就需要通过异常来解决。
*/
		throw new ArrayIndexOutOfBoundsException("哥们,角标越界了~~~");
	}
	int element = arr[index];
	return element;
}

2.2 Objects非空判断

public static <T> T requireNonNull(T obj) {
   
	if (obj == null)
	throw new NullPointerException()  ;
	return obj;
}

2.3 声明异常throws

关键字throws运用于方法声明之上,用于表示当前方法不处理异常,而是提醒该方法的调用者来处理异常(抛出异常).

throws用于进行异常类的声明,若该方法可能有多种异常情况产生,那么在throws后面可以写多个异常类,用逗号隔开。

public class ThrowsDemo {
   
	public static void main(String[] args) throws IOException {
   
		read("a.txt");
	}
	public static void read(String path)throws FileNotFoundException, IOException {
   
		if (!path.equals("a.txt")) {
   //如果不是 a.txt这个文件
		// 我假设 如果不是 a.txt 认为 该文件不存在 是一个错误 也就是异常 throw
		throw new FileNotFoundException("文件不存在");
		}
		if (!path.equals("b.txt")) {
   
			throw new IOException();
		}
	}
}

2.4 捕获异常try…catch

try{
   
编写可能会出现异常的代码
}catch(异常类型 e){
   
处理异常的代码
//记录日志/打印异常信息/继续抛出异常
}

2.5 finally 代码块

finally:有一些特定的代码无论异常是否发生,都需要执行,所以在finally代码块中存放的代码都是一定会被执行的。finally不可单独使用

public class TryCatchDemo {
   
public static void main(String[] args) {
   
	try {
   
		 read("a.txt");
	} catch (FileNotFoundException e) {
   
	//抓取到的是编译期异常 抛出去的是运行期
		throw new RuntimeException(e);
	} finally {
   
		System.out.println("不管程序怎样,这里都将会被执行。");
	}
	System.out.println("over");
}
/*
*
* 当前的这个方法中 有异常 有编译期异常
*/
public static void read(String path) throws FileNotFoundException {
   
	if (!path.equals("a.txt")) {
   //如果不是 a.txt这个文件
// 假设 如果不是 a.txt 认为 该文件不存在 是一个错误 也就是异常 throw
	throw new FileNotFoundException("文件不存在");
	}
}
}

如果finally有return语句,永远返回finally中的结果,避免该情况.

2.6 注意:

  1. 如果父类抛出了多个异常,子类重写父类方法时,抛出和父类相同的异常或者是父类异常的子类或者不抛出异常。
  2. 父类方法没有抛出异常,子类重写父类该方法时也不可抛出异常。此时子类产生该异常,只能捕获处理,不能声明抛出

3 自定义异常类

异常类如何定义:

  1. 自定义一个编译期异常: 自定义类 并继承于java.lang.Exception 。
  2. 自定义一个运行时期的异常类:自定义类 并继承于java.lang.RuntimeException 。

例如: 定义一个登陆异常类RegisterException:

// 业务逻辑异常
public class RegisterException extends Exception {
   
/**
* 空参构造
*/
	public RegisterException() {
   
	}
/**
*
* @param message 表示异常提示
*/
	public RegisterException(String message) {
   
		super(message);
	}
}
public class Demo {
   
// 模拟数据库中已存在账号
	private static String[] names = {
   "bill","hill","jill"};
	public static void main(String[] args) {
   
	//调用方法
		try{
   
			
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值