异常+反射+线程

异常API+线程API

1、常见异常
①算数异常:java.lang.ArithmeticException
System.out.println(2 / 0);
②数组下标越界异常:java.lang.ArrayIndexOutOfBoundsException
 int[] arr = {1,2,3};
 System.out.println(arr[3]);
③数字转换异常:java.lang.NumberFormatException
 int i = Integer.parseInt("你");
 System.out.println(i);
④日期解析异常:java.text.ParseException
SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");
Date d = f.parse("2021年04-14");
System.out.println(d);
⑤文件找不到异常:java.io.FileNotFoundException
FileReader f = new FileReader("d:/x.txt");
2、异常
(1)异常类型:

①非检查型异常:不是强制处理的异常(处不处理都可以)

②检查型异常:【必须处理】的异常

(2)异常体系:

java.lang.Throwable(异常顶级父类)
java.lang.Error(错误、非检查)
java.lang.Exception(异常)
java.lang.RuntimeException(运行时异常、非检查)
其它(检查型)

(3)处理异常两种方式

①捕获异常:通过【try、catch】关键字实现。【实现方法】出问题捕获。【语法/代码】异常。

②抛出异常:通过【throws】关键字实现。【调用方法】出问题抛出。【业务】异常。

	// 张三调用方法
	try {
		m1("d:/a123123.txt");
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	}

	// 李四实现方法
private static void m1(String file) throws FileNotFoundException {
	FileReader f = new FileReader(file);
}
(4)处理异常的5个关键字

①捕获:try、catch、finally

try包含可能出问题的代码块

catch捕获异常并输出异常信息

finally不论是否有异常发生都一定会执行的语句块(一定要执行的代码放在 finally 里)

	try {
		FileReader f = new FileReader("c:/a.txt");
		System.out.println(1);
		System.out.println(2);
		System.out.println(3);
		f.close();
	} catch(Exception e) {
		e.printStackTrace();
	} finally {
		System.out.println("一定执行的代码");
	}
	
	// 多个异常捕获的方式:全选异常代码->右键->surround with->try/catch
	try {
		FileReader f1 = new FileReader("c:/a.txt");
		FileReader f2 = new FileReader("c:/a.txt");
		FileReader f3 = new FileReader("c:/a.txt");
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	}

抛出throw、throws(方法调用者执行)

throw和throws的区别:

(1)异常类型

①throw表示抛出的异常的实例,throw (异常对象)。

②throws表示抛出的异常的类型,异常类可以声明多个,用逗号分割。

(2)使用的位置

①throw出现在方法体

②throws出现在方法参数列表的后面

(3)使用方式

①throw要么和try-catch-finally语句配套使用捕获异常,要么与throws配套使用抛出异常。

②throws由处理异常的方法捕获。

(4)作用不同

①throw用于程序员自行产出并抛出异常

②throws用于声明该方法内抛出异常

3、反射API(了解)

理解:一种**看透Java的一组功能。反射所有功能都是通过class API**来实现的。

反射API举例:生成getter、setter方法弹出对话框,里面有类中的所有变量供我们选择

说明:反射API、线程API属于高级API。开发技术的技术。

举例:例如**SpringBoot、Spring、Mybatis**等框架底层都是反射实现的。

4个反射核心API:

java.lang.Class
java.lang.reflect.Field成员变量类型
java.lang.reflect.Method成员方法类型
java.lang.reflect.Constructor构造方法类型
	// 获取类对象(参数:包名.类名,找到这个包下的这个类)
	Class c = Class.forName("com.cuiyudong.Person");
	// 获取成员变量(返回的是一个数组)
	Field[] arr = c.getDeclaredFields();
	for (Field f:arr) {
		System.out.println(f.getName());
	}
	// 获取构造方法
	Constructor[] brr = c.getConstructors();
	for (Constructor t:brr) {
		System.out.println(t.getName());
	}
	// 获取成员方法
	Method[] crr = c.getDeclaredMethods();
	for (Method m:crr) {
		System.out.println(m.getName());
	}
	// 获取父类
	Class f = c.getSuperclass();
	System.out.println(f.getName());
	// 获取接口
	Class[] drr = c.getInterfaces();
	for (Class d:drr) {
		System.out.println(d.getName());
	}
4、线程API(了解)
(1)目前为止开发程序都是单线程的:
	while (true) {
			System.out.println(Thread.currentThread().getName());
		}
(2)多线程

①Java后台运行机制是多线程机制。多线程程序。

Servlet、Struts2、SpringMVC等。

③举例: 100个人同时登陆淘宝
100个人 登陆控制器(100个登陆对象)
100个人 登陆控制器(创建一个登陆对象、开启100个线程)

(3)多线程的两种实现方式

方式一:继承java.lang.Thread(类)

//多线程实现
public class A extends Thread {
	public void run() {
		while (true) {
			// 输出当前线程的名字
			System.out.println(Thread.currentThread().getName());
		}
	}
	public static void main(String[] args) {
		A a1 = new A();
		a1.start();// 启动线程
		A a2 = new A();
		a2.start();// 启动线程
		A a3 = new A();
		a3.start();// 启动线程
		while (true) {
			// 输出当前线程的名字(主线程)
			System.out.println(Thread.currentThread().getName());
		}

方式二:实现java.lang.Runnable(接口):Thread implements Runnable

public class B implements Runnable {

	public void run() {
		while (true) {
		System.out.println(Thread.currentThread().getName());
		}
	}
	
	public static void main(String[] args) {
		B b1 = new B();
		Thread t1 = new Thread(b1);
		t1.start();
		B b2 = new B();
		Thread t2 = new Thread(b2);
		t2.start();
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YD_1989

你的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值