黑马程序员_【总结】_ 异常知识梳理_(end)

本文详细介绍了异常处理的概念、类型、处理方法以及自定义异常的实现与应用,包括异常的分类、处理流程、常见操作和声明捕获异常的方式。通过实例展示了如何在Java程序中正确地使用异常处理机制,特别强调了自定义异常的重要性及其应用场景。
异常知识梳理


---------- android培训 java培训、期待与您交流! ---------- 

---------------------------------------------------------------------------------------------------------------------------------------------
1、throws 声明异常------throw  捕获异常
2、声明异常时,建议声明更为具体的异常,这样处理可以更具体
3、在函数内部出现throw抛出异常对象,那么就必须给要对应的处理动作
4、自定义异常:  必须是自定义类继承Exception
继承Exception原因:
1、异常体系有一个特点,因为异常类和异常对象都需要被抛出,
他们都具备可抛性,这个可抛性是Throwable这个体系中独有特点
2、只有这个体系中的类和对象才可以被throws 和throw 操作。
5、Exception 中有一个特殊的子类异常RuntimeException 运行时异常
如果在函数内容抛出该异常,函数上可以不用声明,编译一样通过
如果在函数上声明该异常,调用者可以不用进行处理,编译一样通过
6、自定义的异常时:如果该异常的发生,无法在继承进行运算
就让自定义类异常继承RuntimeException
7、异常,分两种
1、编译时,被检测出的异常   (方法后需要抛出异常。)
2、编译时,不被检测出的异常(运行时的异常就是RuntimeException异常)
-----------------------------------------------------------
【1】
1
Throwable
Error  严重性问题
Exception非严重性,针对性进行处理。
都是以父类名作为后缀。
问题也是现实生活中的一个具体事物,也可以通过Java的类的形式进行描述
并封装成对象,其实就是Java对不正常情况进行描述后的对象体现。
2、异常的处理
Java提供了特有的语句进行处理
try{
需要被检测的代码
}
catch(异常类 变量){
处理异常的代码(也就是处理方式)
}
finally{
一定会执行的语句。
}
3、对捕获到的异常对象进行常见的操作
String getMessage(): 获取异常信息
4、声明异常\ 捕获异常
throws 声明异常
throw  捕获异常
5、对多异常的处理
1、声明异常时,建议声明更为具体的异常,这样处理可以更具体
2、对声明几个异常,对应几个 catch 块,
如果多个catch块中的异常出现了继承关系,父类异常catch块放在最下面。
建立在进行catch处理时,catch 块中一定要具体的处理方法。
而不是 e.printStackTrace() 或 简单的输出语句
【2】
        【自定义异常】
因为 在项目中会出现特有的问题
而这些问题并未被java所描述并封装
所以对这些特有的问题可以按照java的对问题封装的思想
将特有的问题,进行自定义的一场封装


自定义异常
需求:
在本程序中对于除数是负数-1,也是视为是错误的,是无法进行运算的
那么就需要对这个问题进行自定义的描述。


当在函数内部出现throw抛出异常对象,那么就必须给要对应的处理动作
要么在内部try catch 处理
要么在函数上声明让调用这处理


一般情况在 函数内出现异常,函数上需要声明.


发现打印的结果中只有异常名称,却没有异常的信息
因为自定义的异常并未定义信息


如何定义异常信息呢。
因为父类中已经把异常信息操作都完成了,
所以子类只要在构造时,将一类信息传递给父类通过super语句
那么就可以直接功过getMessage方法获取自定义的异常。


自定义异常:  必须是自定义类继承Exception
继承Exception原因:
异常体系有一个特点,因为异常类和异常对象都需要被抛出,
他们都具备可抛性,这个可抛性是Throwable这个体系中独有特点

只有这个体系中的类和对象才可以被throws 和throw 操作。
【3】
throws和throw区别
throws使用在函数上
throw 使用在函数内


throws 后面跟的是异常类,可以跟多个,用逗号隔开      就是:()这个位置{}
throw  后面跟的是异常对象。
【4】
【【异常中的特殊子类异常】】
Exception 中有一个特殊的子类异常RuntimeException 运行时异常
如果在函数内容抛出该异常,函数上可以不用声明,编译一样通过
如果在函数上声明该异常,调用者可以不用进行处理,编译一样通过


之所以在函数上声明,是因为不需要调用者处理
当该异常发生,希望程序停止,因为在运行时,出现了无法继续运算的情况,
希望停止程序后,由程序员对代码进行修正。
【m】
自定义的异常时:如果该异常的发生,无法在继承进行运算
就让自定义类异常继承RuntimeException


对于异常,分两种
1、编译时,被检测出的异常   (方法后需要抛出异常。)
2、编译时,不被检测出的异常(运行时的异常就是RuntimeException异常)
(方法中抛出了非Run异常或其子类,上面没有标识,就视为有安全隐患的。)
【【【【结论:如果自定义异常,要么继承Exception要么继承RuntimeException】】】】
class FuException extends Exception{
		private int value;
		//这个也可以,里面有默认的。
		FuException(){
			super();
		}
		FuException(String msg,int value){
			super(msg);
			this.value=value;
		}
		public int getValue(){
			return value;
		}
	/*	
	}【m】
	class FuException extends RuntimeException{
		private int value;
		//这个也可以,里面有默认的。
		FuException(){
			super();
		}
		FuException(String msg,int value){
			super(msg);
			this.value=value;
		}
		public int getValue(){
			return value;
		}
	class Demo_3{
		int div(int a,int b) //这里不在需要声明
		{
			if(b <0){
				throw new FuException("出现负数",b);//手动通过throw 关键字抛出一个自定义的异常
			}
			if(b =0){
				throw new FuException("出现0",b);//手动通过throw 关键字抛出一个自定义的异常
			}
			return a/b;
		}
	}
	*/		
	}
	class Demo_3{
		int div(int a,int b) throws FuException{
			if(b <0){
				//System.out.println("出现异常:");
				throw new FuException("出现负数",b);//手动通过throw 关键字抛出一个自定义的异常
			}
			return a/b;
		}
	}
	public class D_Exception {
		public static void main(String[] args){
			Demo_3 d=new Demo_3();
			try{
				int x=d.div(4,2);
				System.out.println("x="+x);
			}
			catch(FuException e){
				//System.out.println(e.toString());
				//System.out.println("出现负数");
				System.out.println("负数:"+e.getValue());
			}
			//catch(Exception e){	
			//}
			System.out.println("over");
		}
	}
	/*
	class Person_1{
		 public void checkName(String name){
			 //if(name.equals("lisi")){//一旦[a]处传入NULL,那么就回报NullPointerException异常
			 						   程序就停掉了。如何修正:
			 if("lisi".equalse(name)){//if(name!==null&&name.equals("lisi")){			 						   
				 System.out.println("YES");
			 }else {
				 System.out.println("NO");
			 }
		 }
	}
	main(){
		Person_1 p=new Person_1();
		p.checkName(null);//[a]
	}
	*/
【5】


 毕老师用电脑上课。
 老师、电脑、俩类,上课是行为.
 
 上课中会出现各种问题,产生异常。 
 比如电脑、蓝屏、冒烟儿    :接下来进行描述,封装成对象            (自定义异常
 蓝屏后只许重启即可
 而  当冒烟发生后,会出现进度无法继续。
  就出现了讲师的问题,课时计划无法完成。     (又多了个类
 
 【通过state来手动设置异常】


//蓝屏异常
class LPException extends Exception{
//蓝屏是可以处理的,大多时候重启即可,那么这里就需要电脑的重启功能了
	private Comeputer comp;
	LPException(String message){
		super(message);
	}
	public void goReset(){
		comp.reset();
	}
}
//冒烟异常
class MYException extends Exception{ //RuntimeException{//冒烟了无法处理了
	MYException(String message){
		super(message);
	}	
}
//人为异常
class NoPlanException extends Exception{
	NoPlanException(String message){
		super(message);
	}
}
class Comeputer {
	private int state =3;//2表示蓝屏 3冒烟
	public void run()throws LPException,MYException{//抛出可能有的异常
		if(state==2){
			throw new LPException("电脑蓝屏了。");//抛出异常
		}
		if(state==3){
			throw new MYException("电脑冒烟儿了");//抛出异常
		}
		System.out.println("comepter run");
	}
	public void reset(){
		state=1;
		System.out.println("comepter  reset");
	}
}
class Teacher{
	private String name;
	private Comeputer cmpt;	
	Teacher(String name){//初始化老师名字、电脑
		this.name=name;
		cmpt=new Comeputer();
	}	
	public void prelect()throws NoPlanException{//MYException{//讲课方法		
		try{
			cmpt.run();
		}
		catch(LPException e){
			cmpt.reset(); 
		}
		catch(MYException e){//接收到冒烟异常然后抛出冒烟后无法继续讲课的问题,这个问题就好处理			
			test(); 
			throw new NoPlanException("课时无法继续"+e.getMessage());
			//这里的逻辑是,冒烟是不可处理异常,发生该异常后,处理就是换电脑,换老师等延续课时的方案。
			//test();  throw 后面是不能更语句的。他和return一样是结束语句。
		}
		//System.out.println("开始讲课");
	}
	public void test(){
		System.out.println("大家做练习吧");
	}
}
电脑冒烟儿了,就相当于 error , 属于严重的问题,
而 出现了这种情况,却是可以有其他方式处理的,
可以借用电脑,可以替换个老师,可以自习,可以放假。
【6】
【异常练习】
 有一个圆形和长方形
 都可以获取面积,对于面积如果出现非法数值,视为是货获取面积出现的问题
 
 问题通过异常来表示
 先有对这个程序进行基本设计
 
 正常代码,和问题处理代码分隔开。
 
 写代码的过程中,遇到问题,用代码封装起来,问题也是一个对象。
 */
//面积接口
interface Shape{
	double getArea();
}
//负数或零异常
class FLException extends RuntimeException { //Exception{
	FLException(String msg){
		super(msg);
	}//
}
//长方形 
class Rec implements Shape{	
	private int len,wid;	
	Rec(int len,int wid) {//throws FLException //使用Runtaime异常这里就不用在写,main方法中也不用在写。
		if(len<=0 ||wid<=0)
			throw new FLException("数值错误!");
		
		this.len=len;
		this.wid=wid;
	}
	public double getArea(){
		System.out.println("Area:"+len*wid);
		return len*wid;
	}
}
//圆形
class Yuan implements Shape{
	private double r;
	private static final double PI=2.14;  //设为全局常量
	Yuan(double r){
		if(r<=0)
			throw new FLException("非法!");
		
		this.r=r;
	}
	public double getArea(){
		System.out.println("Area:"+r*r*PI);
		return r*r*PI;
	}
}
public class D_Exp_Test1 {
	public static void main(String[] args) {
		Rec r=new Rec(23,4);
		r.getArea();	
		Yuan yu=new Yuan(-3);
		yu.getArea();
	}
}






---------------------------------------------------------------------------------------------------------------------------------------------
---------- android培训、 java培训、期待与您交流!----------


----------------------------------------------
嗯,用户想要找从Python入门到全栈开发的免费学习网站。我先看看参考内容里的信息有没有合适的资源。 第一个参考内容提到腾讯课堂的星越教育课程,但看起来是付费的,可能不符合用户的免费需求。第二个和第五个参考内容提到了优快云博客里的资源,里面有很多免费视频,比如B站的千锋教育和黑马程序员的教程链接,这些应该都是免费的。第三个和第六个参考内容推荐了官方文档、w3school、菜鸟教程,这些网站都是经典的学习资源,完全免费。还有ProgramCreek和LearnPython这样的英文网站,可能适合有一定英语基础的学习者。 另外,第五个参考内容里提到百度网盘的资料,但链接可能需要提取密码,用户可能需要注册或关注才能获取,不过也是免费资源。Udacity的免费课程和Google的Python课程也是不错的选项,尤其是Google的课程质量应该很高。 需要确认的是这些资源是否都还在线,比如B站的视频链接是否有效。用户可能需要自行访问确认,但大部分应该是可用的。总结的时候应该分门别类,比如视频教程、文档网站、实战项目等,让用户方便选择。要确保涵盖从基础到全栈的不同阶段,包括Web开发、爬虫、数据库等内容。需要注意用户要的是全栈,所以后端和前端的内容都要包含。比如Django框架、数据库持久化部分,这些在参考内容里有提到,可以整合进去。 还要注意时效性,虽然参考内容发布时间在2024到2025年之间,但大部分资源比如官方文档和B站教程通常长期有效。可能建议用户优先选择中文资源,如果英语好可以看英文网站。同时提醒用户实践的重要性,结合项目来学习。最后整理成一个结构清晰的回答,列出每个资源类型和对应的链接,方便用户使用。 以下是针对Python从入门到全栈开发的免费学习资源推荐,结合权威性与时效性,覆盖基础语法、Web开发、数据库、爬虫等全栈方向:   一、系统化视频教程(免费) 1. B站千锋教育Python教程      ○ 特点:700集零基础课程,涵盖基础语法、Web开发、爬虫、数据分析、AI基础。      ○ 链接:B站700集教程 2. B站黑马程序员Python教程      ○ 特点:600集系统课程,基于Linux环境,包含基础语法、面向对象、游戏开发。      ○ 链接:B站600集教程 3. Udacity Python入门课(英文)           ○ 特点:免费入门课程,结合搜索引擎与网络爬虫项目,适合动手实践。      ○ 链接:Intro to Computer Science   二、官方文档与中文社区 1. Python官方中文文档      ○ 特点:最权威的语法参考,覆盖基础语法、标准库及进阶指南。      ○ 链接:Python中文文档 2. 菜鸟教程 & W3School           ○ 特点:新手友好,提供Python语法、实例及操作步骤详解。      ○ 链接:          ● 菜鸟教程Python          ● W3School Python   三、实战项目与案例 1. ProgramCreek Python代码实例      ○ 特点(英文):海量模块实例(如 datetime 、 requests ),直接搜索函数名称即可查看用法。      ○ 链接:Python Code Examples 2. Github开源项目           ○ 推荐:搜索关键词“Python全栈项目”,如Django博客系统、电商平台。      ○ 学习方式:阅读代码 → 复现功能 → 参与Issue讨论。   四、专项技能提升 1. Web开发(Django/Flask)      ○ 资源推荐:          ● B站Django教程:全栈开发教程          ● Flask官方文档:Flask中文指南 2. 数据库与数据持久化      ○ 免费课:B站搜索“MySQL+Python”或“SQLAlchemy教程”,如SQLAlchemy ORM教程。 3. 爬虫开发(Scrapy/Requests)           ○ B站爬虫框架Scrapy实战:Scrapy框架教程   五、综合学习平台 1. LearnPython(英文)      ○ 特点:交互式学习,涵盖初级到高级语法,附带在线代码编辑器。      ○ 链接:LearnPython 2. Google Python Class           ○ 特点:Google官方课程,包含文本与视频教程,适合快速上手。      ○ 链接:Google Python课程   六、国内免费资源包 1. 优快云博主共享资料      ○ 内容:Python零基础入门、爬虫开发、Web全栈资料包(需百度网盘提取)。      ○ 获取方式:访问此链接 按指引领取。   学习建议 1. 路线:先掌握基础语法(变量、循环、函数)→ 学习数据库与Web框架 → 实战项目 → 深入爬虫/数据分析。 2. 实践:每学完一个知识点,用代码实现小功能(如爬取天气、搭建个人博客)。 3. 社区:加入Python技术群或Stack Overflow,遇到问题及时提问。 希望这些资源能助你从入门到全栈!
06-17
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值