JAVASE23天从入门到精通_Day16

异常体系

在这里插入图片描述

JVM如何处理异常
    JVM如何处理异常:
        1. 程序立刻终止 -> 重要
        2. 打印异常信息:
            a. 异常的类型 :java.lang.ArithmeticException
            b. 异常产生的原因:  / by zero
            c. 异常产生的代码位置:at com.atguigu.a_exception.Demo1.main(Demo1.java:9)
            d. 红色字体打印异常信息
            e. 异常产生的线程 : Exception in thread "main"
        3. 开启了新的线程打印异常信息
        4. 异常产生后,JVM会在内存中创建一个此异常类型的对象
自己处理异常的方式一 : 抛出去
自己处理异常的方式一 : 抛出去 -> 是你以前一直使用的方式,也是现阶段最为推荐处理方式

抛出去 : 抛给调用者处理(如果调用者一直不处理,最终才抛给了JVM)
    
格式:
    方法的声明(形参列表) throws 异常的类名{

    }

运行时期异常抛出去处理: 无意义 -> 不管就够了

编译时期异常抛出去处理: 有意义
    编译时期异常出现了,在写代码的时候必须去处理,而抛出去是一种处理手段!

        如果方法内有编译时期异常,调用方法时调用方法的方法也要处理这个编译时期异常.
        如果所有的方法都选择抛出处理,那么最终一定交付给JVM处理异常;

注意事项:
	1. 当方法声明上抛出了父类异常,那么他的所有子类异常都不需要抛出了
	2. 一个方法上可以同时抛出多个异常,多个异常之间使用 , 分隔
自己处理异常的方式二 : 包起来
自己处理异常的方式二 : 包起来 -> 未来阶段最为推荐的处理方式 -> 不会影响程序往后执行!!

包起来 : 程序员自己处理异常

格式:
    try{
		可能会出现异常的代码;
    }catch(异常类型 对象名){
        自己处理异常的手段;
    }

运行时期异常 被包裹 -> 有意义,程序不会中断,还会继续执行其他代码
编译时期异常: 包起来 -> 有意义,程序不会中断,还会继续执行其他代码,不需要再方法上抛出异常!
try…catch
try..catch : 是异常处理方式包起来的格式框架

格式:
    try{
		可能会出现异常的代码;
    }catch(异常类型 对象名){
        自己处理异常的手段;
    }

执行流程:
	1. try中无异常 : 按照程序的自然流程执行代码,不执行catch中的代码
    2. try 中有异常,catch 捕获到了:
        遇到try中异常代码,立刻终止了try中代码执行
        进入到catch中的代码执行
        执行完catch,执行try..catch结构后的代码 -> 也不会提前终止整个程序
    3. try 中有异常,catch 没有捕获到
        遇到try中异常代码,立刻终止了try中代码执行
        因为catch没有捕获到异常,JVM介入处理异常
try…catch捕获到异常的执行流程图

在这里插入图片描述

try…catch的注意事项
        1. 一个catch只能捕获一个类型的异常
        2. 一个try可以对应多个catch,多个catch中不可以捕获相同的异常类型
        3. 下方的catch捕获的异常类型必须是上方catch捕获异常的父类型或者是不同类型
        4. 上方catch捕获的异常类型不可以是下方catch捕获异常类型的父类型
        5. 如果catch捕获的是父类型异常,那么所有的子类异常都被一并捕获
异常对象的功能
 	 String getMessage(): 异常产生的原因
     String toString(): 异常的类型 + 异常产生的原因
    * void printStackTrace() : 开启了新的线程用红色字体打印了异常的类型+异常产生原因+异常产生的位置
        //JVM介入处理异常时,调用的就是异常对象.printStackTrace();
finally代码块
finally代码块 :try..catch格式中叫 一定会执行的代码

格式:
    try{
		可能会出现异常的代码;
    }catch(异常类型 对象名){
        自己处理异常的手段;
    }finally{
        一定会执行的代码;
    }

JVM退出,finally代码块不执行(其他情况finally是一定执行的!!)
自定义异常类
定义步骤:
	1. 定义类 类名-> XxxxxException
	2. 思考你定义的异常类型是编译时期还是运行时期
		编译时期 : extends Exception
		运行时期 : extends RuntimeException
	3. 自动生成2个构造 : 无参构造 和 带有String形参的构造方法	
	
使用步骤:
	1. 定义方法,在方法内暴露异常对象
	2. 在暴露异常对象之前要写 判断!
        
暴露异常对象的格式:
	throw new 异常对象();

throw : 暴露异常对象 -> 方法内
throws : 抛出异常类型 -> 方法的声明上

如果方法内暴露的是一个编译时期异常,那么需要立刻处理--> 一定要选择抛出去!!   
递归算法
递归算法 : 递进回归 ->在方法内部调用方法自己(这种写代码的手法叫递归)
    
    从前有座山,山里有座庙,庙里有个老和尚,老和尚给小和尚讲故事:
		 从前有座山,山里有座庙,庙里有个老和尚,老和尚给小和尚讲故事:
			 从前有座山,山里有座庙,庙里有个老和尚,老和尚给小和尚讲故事:
				 从前有座山,山里有座庙,庙里有个老和尚,老和尚给小和尚讲故事:
					.....
                        
    学编程 -> 赚钱 -> 娶媳妇 -> 生娃娃
    	学编程 -> 赚钱 -> 娶媳妇 -> 生娃娃
    		学编程 -> 赚钱 -> 娶媳妇 -> 生娃娃
    			学编程 -> 赚钱 -> 娶媳妇 -> 生娃娃
    				.....
     俄罗斯套娃,OBS...
递归的前提
// 动笔写递归之前 要先找好规律
1. 必须定义方法,且方法必须有形参
2. 必须在方法内部调用方法自己
3. 必须有出口 -> 回归点
4. 在方法内部调用方法本身的时候,需要有实际参数的变化(变化的方向要往出口方向前进)
5. 递归的次数不能太多 -> StackOverflowError

在这里插入图片描述

快速排序的思路

在这里插入图片描述

File的概述
File : 代表的是计算机中所有的文件和文件夹! -> 计算机中除了文件就是文件夹! -> true
File的构造方法
File(String pathname) : 传入文件/文件夹的路径封装一个file对象
    
File(String parent, String child) : 传入字符串类型的子父路径封装一个file对象
File(File parent, String child) : 传入File类型的父路径和String类型的子路径封装一个file对象
    
//file对象指向路径结尾的文件/文件夹  不代表整个路径    

 创建File对象干了啥:
        1. 创建了File对象
        2. 在堆内存中开辟了空间
        3. 让file对象指向路径结尾的文件/文件夹
相对路径和绝对路径*
绝对路径 : 完整的文件/文件夹路径 就是绝对路径
	C:\Users\Administrator\Desktop\aaa.txt -> 绝对路径
	绝对路径 : 一定以盘符开头!
    绝对路径 : 任何路径都可以表示
        
相对路径 : 以一个参照物作为起点,往内找的路径叫相对路径   
	相对路径: 只能找到参照物内的路径
	IDEA / Eclipse : project的路径 (IO流体系中的相对路径起点)
    相对路径 : 一定不是以盘符开头!


举例 :
	绝对路径 : 地球:\\亚洲\\中国\\湖北省\\武汉市\\东湖高新区\\茅店山中路\\东湖网谷\\6号楼\\4楼\\尚硅谷\\404教室\\谈斌;
	相对路径 : 起点->东湖网谷  注意 : 一定是往相对路径的内部去找
		6号楼\\4楼\\尚硅谷\\404教室\\谈斌;
File类中的自定义常量
    // ;
    static String pathSeparator
    static char pathSeparatorChar

    //\
    static String separator
    static char separatorChar
File的创建功能
*boolean createNewFile()  :  根据file对象指向的文件,创建一个文件,返回创建是否成功 //定义创建文件!!
    //如果文件存在,不会覆盖源文件,返回false
    //如果前置路径写错就直接报错!!
    
boolean mkdir() : 根据file对象指向的文件夹,创建一个文件夹,返回创建是否成功 //一定创建的是文件夹,单级文件夹!!  
*boolean mkdirs() : 可以创建多级文件夹也可以创建单级文件夹 //一定创建的是文件夹
File的删除功能(了解)
boolean delete()  :删除此抽象路径名表示的文件或目录。 // 不走回收站的
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值