异常与线程

第一章 异常

1、异常的概念
1. 问题描述: 异常是什么意思?为什么要存在异常?
	回答: 异常是程序出现的问题。存在的原因:可以很好的去解决对应的问题。
	//生活实例: 汽车的轮胎,可能会出现异常"漏气"胎上面有个小孔,怎么解决?把
	//胎放在水里面,挤压一下,看看有没有气泡
	
2. 常见的分类问题
	A. 异常: 
		a. 概念:一个程序可能出现的问题。有可能出现问题,有可能不出现问题。 //想想 数组索引越界异常
     	b. 运行时异常: 在运行的过程当中,出现的异常。代码写完不会出错,运行过程当中出错
     	c. 编译时异常: 代码一写完就会出错。
    B. 错误: 
		a. 概念: 出现了非程序原因导致的问题。//例如: 内存溢出的错误
2、异常处理的两种方式
1. 抛出异常(自己不处理,交给别人处理)
    A. 格式:
		在方法的小括号后面.加上 throws XXXEception
	B. 例如:
		public static void calc(int[] arr) throws ArrayIndexOutOfBoundsExcption{ ... } 

2. 捕获异常(自己处理异常)
	A. 格式:
        try{
            ....可能出现异常的代码....
        }catch(XXXEception e){
            ....出现异常之后的处理代码...
        }finally{
            ...无论是否出现异常都会执行的代码....
        }
3、异常处理的入门案例
public static void main(String[] args) {
    //定义状态码
    int stateCode = 200;
    try {
        // 调用方法(谁调用方法,谁处理异常)
        // 快捷键  Ctrl + Alt + T
        method();
    } catch (ArithmeticException e) {
        e.printStackTrace(); //直接打印显示处理
        stateCode = 404;
        System.out.println("在长江职业学院,被蚂蚁踩伤了"+stateCode);
    } catch (NullPointerException e) {
        e.printStackTrace();//直接打印显示处理
        stateCode = 500;
        System.out.println("在中南民族大学,被妹子迷了"+stateCode);
    } catch (ClassCastException e) {
        e.printStackTrace();//直接打印显示处理
        stateCode = 10086;
        System.out.println("在中南财经政法大学,被老太太鹅了"+stateCode);
    } finally {
        System.out.println("不管有没有异常,都显示.回家戳麻将"+stateCode);
    }
}

//throws 抛出异常.[自己不处理,交给别人处理]  throw 制造异常
public static void method()  throws ArithmeticException,NullPointerException,ClassCastException  {
    int number = 3/1;//零不能作为除数
    System.out.println("number = " + number);
    String str = "";
    int len = str.length(); //出现空指针异常
    System.out.println("len = " + len);
    //现场制造一个异常(格式: throw new 异常的名称)
    throw new ClassCastException("嘿嘿!被蚂蚁踩伤");
}
4、异常处理的三个方法
1. String getMessage();  	//异常的原因
2. String toString();    	//异常的类型
3. void printStackTrace();  //异常的原因+异常的类型+异常的位置  ---> 红色信息
5、异常的注意事项
1. 子父类异常处理
	子类在上,父类在下。 //原因: 程序从上往下执行,如果上面的父类,已经处理了,就不关儿子什么事情了。
	
2. 方法重写异常的问题
	父类方法异常是什么样子,子类方法异常就是什么样子。
	A.如果父类的方法是 抛出异常,那么子类的方法也是 抛出异常
	B.如果父类的方法是 捕获异常,那么子类的方法也是 捕获异常
6、自定义异常类
操作步骤
	A.写一个类 继承 Exception 或者 RuntimeException
		//继承 Exception 编译时异常,代码写完就会报错
		//继承 RuntimeException 运行时异常,代码写完不会报错,运行的过程当中,可能会出错
	B.实现两个构造方法
		a. 无参空构造
		b. 带有字符串参数的构造.(字符串:就是异常的原因)
    C.在需要的地方,制造一个异常即可
    	throw new XXException(异常原因);

第二章 线程

1、概念问题
1. 并发和并行
	A. 并发: "交替执行" 
	B. 并行: "同时执行"
        
2. 进程和线程
	A. 进程: 进入到内存当中的应用程序。(例如:我们下载了一个QQ.exe 只有开启了QQ.exe进入内存,才算是进程)
	B. 线程: 线程是进程当中的一个执行单元。
//例如: 腾讯电脑管家,开启之后,进入内存当中。他就是‘进程’
//在电脑管家当中,可以同时执行多个任务。如: "病毒查杀"、"清理垃圾"、"电脑加速" 都是线程
//例如: 迅雷软件,启动之后,进入到内存当中。他就是‘进程’
//在迅雷软件当中,下载电视剧《还珠格格》,开启多条路径下载。 每一条路径就是一个线程

3. 线程的调度
	 "抢占式调度" 多个线程,抢夺CPU的执行权。谁抢到就执行谁!
	 //例如: 下课期间,多个同学,抢夺坑位,谁先抢到,谁就有优先执行权!
	
4. 主线程
	 A. 主线程: main方法通向CPU的路径桥梁
	 B. 理解: "main方法所在的线程,就是主线程"
     //例如: 主线程,看做是主线任务。(主线任务:必须要走的,不走不让你升级)(支线任务:可以做可以不做)
2、多线程的实现方式
1. 方式一: 继承Thread类
	A.步骤:
		a.写一个类,继承 Thread 类
		b.覆盖重写 run 方法
		c.创建线程类的对象
		d.调用 start 方法开启线程
		
2. 方式二: 实现Runnable接口  //源码: class Thread implements Runnable  《推荐使用》
	A.步骤:
		a.写一个类,实现 Runnable 接口
		b.覆盖重写 run 方法
		c.创建线程对象,传入的参数是实现类的对象
		d.调用 start 方法开启线程
3、几个API
1. 设置线程的名称
	 mt1.setName("子唯");  //其中mt1是线程子类的对象
	 
2. 获取当前执行线程的名称
	 String name = Thread.currentThread().getName();

3. 线程休眠一下
	 //--------让线程休息一下------
     try {
         Thread.sleep(100); //100毫秒
     } catch (InterruptedException e) {
         e.printStackTrace();
     }
     //--------------------------

答疑: 开启线程的时候。为什么不是调用 run 方法 而是调用 start 方法?

回答: 如果开启线程使用的是 run 方法,那么是主线程执行。单纯的对象调用方法。和多线程没有关系了

如果开启线程使用的是 start 方法,那么是子线程执行。不再受到主线程影响。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值