黑马程序员--异常

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

1. 异常概述
 
 异常:程序中,在运行的时候出现的不正常现象。Java是面向对象的语言,异常也是一种对象,因此每次出现异常的时候,看到XXX.XXX.XXXException异常类,告诉你发生了什么情况 ArithmeticException 算术异常。异常类描述对象的
 
 
 
2. 异常继承体系
 
  java.lang.Throwable类,所有异常和错误的父类
 
     Error类
 
        所有错误的父类
 
     Exception类
 
        所有异常的父类
 
        RuntimeException
 
             NullPointerException
 
             ClassCastException
 
             IndexOutOfBoundsException
 
 错误,比较严重的问题,一旦出现了错误,程序根本不能运行,必须修改源代码。
 
 错误,相当于,非典,艾滋
 
 异常,比较轻微的问题,一旦出现了异常,程序可以处理掉异常,继续运行
 
 异常,相等于,感冒发烧流鼻涕
 
 
 
 Throwable类中的方法
 

 

 构造方法 空参数
 
 构造方法 Throwable(String message)异常信息
 
 
 
 String getMessage()返回异常信息的详细字符串
 
 String toString()返回异常信息的简短描述
 
 void printStackTrace()将异常信息直接输出在控制台
 

 
 
3. 异常的第一种处理方式
 
  try  catch 代码块处理
 
 标准格式:
 
     try{
 
      被检测的代码,可能出现异常的代码
 
     }catch(异常类 变量){
 
         异常的处理方式
 
         变量.调用Throwable类的三个方法
 
     }
 
 
 
4. 异常的第二种处理方式抛出异常
 
 如果程序运行的时候,由于用户或者调用非法传递参数,导致程序出现问题,假如调用者真的传递了非法的数据,需要手动抛出异常。在方法中,使用关键字throw 写异常对象,new 出来的.
 
 错误: 未报告的异常错误Exception;程序中,有异常没有处理
 
方法内部抛出异常,不处理这个异常,交给调用者处理,谁调用我这个函数,谁处理这个异常。必须在方法的声明上,声明出来,我这个方法有异常,谁调用谁处理。
 
在方法的定义上,使用throws关键字,把异常声明出来,告诉调用者,如果你调用处理我的异常  throws 异常类
 
 throw : 只能写在方法内部,后面必须写 new 异常()
 
 throws: 只能写在方法声明上,后面必须写 异常类
 
 
 
 
 
5. 编译时期异常和运行时期异常
 
  编译时期异常:调用了一个抛出异常的方法,不处理,编译失败
 
  运行时期异常:RuntimeException类,和他所有的子类都属于运行时期异常
 
  特点:如果方法内部用throw 抛出的是一个运行时期异常,此时方法声明上,不需要使用throws声明异常,调用者不需要处理这个异常,Java工程师们设计运行时异常的初衷,运行时期异常一旦发生,程序必须停下来修改源代码,运行时期异常,是不能发生的
 
   Person p = new Person();
 
   p.show();
 
   p =null;
 
   p.show();空指针异常
 
   int[] arr = {1,2,3};
 
   arr[10] = 100;
 
   if(arr[50] < arr[90])
 
 今后如果我们写一个程序让别人去用,如果别人乱传递参数导致程序后面的计算,无法运行,抛出运行时期异常,结束程序,要求用户传递参数必须合法!
 
   数组越界,字符串越界,空指针异常,类型转换异常
 
 
 
6. 自定义的异常
 
 Java原有异常体系中,很多的现象进行异常的封装,越界,类型转换,JDK中也有想不到的异常,所以自定义异常
 
  第一步,入伙  继承 Exception 或者继承RuntimeException
 
  第二步,传递异常信息,将异常信息传递给Exception的构造方法
 
  注意:异常必须是Exception或者RuntimeException的子类,具备可抛性
 
 
 
 
 
7. finally代码块
 
try{} catch(Exception e){} finally{}
 
try{} finally{}
 
finally代码块中的程序,必须要执行,不管程序有没有异常方法,finally中的程序必须执行
 
finally代码块,一般用于释放资源使用

public class Demo19 {
	public static void main(String[] args) {
		try{
			System.out.println(17/0);
		}catch(Exception e){
			//e.printStackTrace();
			System.out.println("程序错误,请修正!");
		}finally{
			System.out.println("这是finally代码块!");
		}
	}
}


运行结果是:

程序错误,请修正!
这是finally代码块!


 

 

8. final finally 和finalize的区别
 
final 修饰符,类,方法,变量
 
finally 代码块跟随异常处理,必须执行
 
finalize方法,收垃圾
 
 
 
 
 
9. 子类继承父类后的异常细节
 
子类继承后,重写父类的方法:
 
 父类的方法不抛出异常,子类的方法不能抛出异常。如果子类的重写方法,调用了一个抛出异常的方法,子类只能try catch处理异常
 
 如果父类的方法,抛出异常,子类的方法可抛可不抛,但是如果子类抛异常,抛出的异常不能大于父类方法抛出的异常
 
 方法中可以不可以,抛出多个异常,每个异常需要在方法声明上throws声明出来,调用者写多个catch处理
 
 多catch处理异常过程中,注意,最高的异常父类,写在最后

 

 


 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
黑程序员的Git课件包括以下内容: 1. 开发中的实际场景,如备份代码、还原协同开发、追溯代码的编写人员和时间等[1.1]。 2. 版本控制器的方式,包括集中式版本控制工具和分布式版本控制工具[1.2]。集中式版本控制工具的例子有SVN和CVS,而分布式版本控制工具的例子是Git。 3. Git的工作流程图[1.3]。 4. Git的常用操作,例如拉取(pull),将远程库的内容拉到本地并进行合并。 5. Git课件中还可能包括其他内容,如Object类、常用API、Collection、泛型、List、Set、数据结构、Map、异常处理、线程、同步、等待与唤醒案例、线程池、Lambda表达式等。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Git学习笔记1(黑马程序员)—— Git概述](https://blog.csdn.net/kuaixiao0217/article/details/124575818)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [黑马程序员-Java语言进阶-源码、教程笔记.zip](https://download.csdn.net/download/YangYF1997/13704805)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值