黑马程序员_Java基础[19]_异常、自定义异常
来源:互联网 发布:网络基础设施建设方案 编辑:程序博客网 时间:2024/06/07 04:03
/*
因为 在项目中会出现特有的问题
而这些问题并未被java所描述并封装
所以对这些特有的问题可以按照java的对问题封装的思想
将特有的问题,进行自定义的异常封装
自定义异常
需求:
在本程序中对于除数是负数-1,也是视为是错误的,是无法进行运算的
那么就需要对这个问题进行自定义的描述。
当在函数内部出现throw抛出异常对象,那么就必须给要对应的处理动作
要么在内部try catch 处理
要么在函数上声明让调用这处理
一般情况在 函数内出现异常,函数上需要声明.
发现打印的结果中只有异常名称,却没有异常的信息
因为自定义的异常并未定义信息
如何定义异常信息呢。
因为父类中已经把异常信息操作都完成了,
所以子类只要在构造时,将一类信息传递给父类通过super语句
那么就可以直接功过getMessage方法获取自定义的异常。
自定义异常: 必须是自定义类继承Exception
继承Exception原因:
异常体系有一个特点,因为异常类和异常对象都需要被抛出,
他们都具备可抛性,这个可抛性是Throwable这个体系中独有特点
只有这个体系中的类和对象才可以被throws 和throw 操作。
throws和throw区别
throws使用在函数上
throw 使用在函数内
throws 后面跟的是异常类,可以跟多个,用逗号隔开 就是:()这个位置{}
throw 后面跟的是异常对象。
【【异常中的特殊子类异常】】
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]
}
*/
------------------------------------------------------------------------------------------------------------------------------
【【异常应用】】
package _9Day;
/*
* 异常应用
*
* 毕老师用电脑上课。
* 老师、电脑、俩类,上课是行为.
*
* 上课中会出现各种问题,产生异常。
* 比如电脑、蓝屏、冒烟儿 :接下来进行描述,封装成对象 (自定义异常
* 蓝屏后只许重启即可
* 而 当冒烟发生后,会出现进度无法继续。
* 就出现了讲师的问题,课时计划无法完成。 (又多了个类
*
* 【通过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("大家做练习吧");
}
}
public class D_Exp_Test1 {
public static void main(String[] args) {
Teacher t=new Teacher("毕老师");
try{
t.prelect();
}
catch(NoPlanException e){
System.out.println(e.toString());
System.out.println("换老师,换电脑,放假");
}
}
}
---------------
黑马官网: http://edu.csdn.net/heima
- 黑马程序员_Java基础[19]_异常、自定义异常
- 黑马程序员_Java基础_异常
- 黑马程序员_Java基础_异常处理
- 黑马程序员_JAVA基础_异常,包
- 黑马程序员_Java基础_异常处理
- 黑马程序员_Java基础Day09(下)_异常(未完)
- 黑马程序员_Java基础[20]_异常、finally
- 黑马程序员_Java基础[22]_异常总结
- 黑马程序员_JAVA基础2_内部类,异常1
- 黑马程序员_JAVA基础3_异常2
- 黑马程序员_java基础_java异常笔记
- 黑马程序员_java入门_异常
- 黑马程序员_自定义异常
- 黑马程序员_java基础之异常
- 黑马程序员_java基础之异常处理
- 黑马程序员_Java异常
- 黑马程序员_Java异常
- 黑马程序员_JAVA异常
- MOOC程序设计期中考试1.1
- Oracle学习笔记(三)多表查询(一)
- python即时标记
- NYOJ【搜索】三个水杯
- java实现简单web服务器(分析+源代码)
- 黑马程序员_Java基础[19]_异常、自定义异常
- 有向图最短路径问题---Dijkstra算法(过程)
- 进入公司一个月
- Linux下Gcc生成和使用静态库和动态库详解(转)
- uva11300-中位数
- web笔试题小练(1)
- DOM与JQuery选择器、过滤器的介绍
- 常用的Android指令和模拟器参数
- 通过实例体会 fork()同时创建多个子进程