java捕获枚举类型异常_Javaday12(Lambda,枚举,异常,断言)

一、lambda表达式

lambda表达式主要是替换了原有匿名内部类的写法,也就是简化了匿名内部类的写法。

(parameters)->expression 或者 (parameters)->{ statements; }

Lambda表达式语法示例:

不需要参数,返回值为 5  :() -> 5

接收一个参数(数字类型),返回其2倍的值:  x -> 2 * x

接受2个参数(数字),并返回他们的差值: (x, y) -> x – y

接收2个int型整数,返回他们的和: (int x, int y) -> x + y

接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void):  (String s) -> System.out.print(s)

lambda是方法的实现;

lambda是延迟执行的;

lambda表达式编译后只是定义了一个方法调用点,具体调用那个方法要到运行时才能决定。

lambda表达式对返回的实例类型有严格的要求:

必须是接口

接口中只有一个需要实现的抽象方法,因为如果接口中有超过1个抽象方法需要实现的情况并不适用于lambda表达式

每一个lambda表达式都对应一个接口类型。而“函数式接口”是指仅仅只包含一个抽象方法的接口,每一个该类型的lambda表达式都会匹配到这个抽象方法。因为默认方法不算抽象方法,所以也可以给函数式接口添加默认方法。

c33061cb19a2f15217ea95dd1eb09e6a.png

lambda表达式中是无法访问到默认方法的。

可以直接访问标记了final的外层局部变量,或者实例的成员变量以及静态变量

二、:: 操作符

JDK8中引入了一个新的操作符(::)

:: 操作符主要用作静态方法、成员方法、构造方法的绑定

9d59ea9e68abd8394311b21f5829c435.png

三、枚举

ed1077fba84231292425245c9ebbc171.png

e268f6345920bef9eb5aeb286ca0c295.png

a385c8d0a86e9c134574469b5edecf0e.png

50b6e4c8353372bd0fbf35c5917ed573.png

所有的枚举都继承自java.lang.Enum类。由于Java不支持多继承机制,所以枚举对象不能再继承其他类。

枚举可以实现接口。

不能有public构造方法,可以有其他修饰符修饰的构造方法,这样保证客户代码没有办法新建一个enum实例。

所有的枚举都是public static final 的

Enum默认实现了java.lang.Comparable接口。

Enum覆载了了toString方法

Enum提供了一个valueOf方法,这个方法和toString方法是相对应的

Enum还提供了values方法,这个方法使你能够方便的遍历所有的枚举值

Enum还有一个oridinal的方法,这个方法返回枚举值在枚举类种的顺序,这个顺序根据枚举值声明的顺序而定

四、异常

Throwable:包含有异常(Exception)和错误(Error)。

Throwable类有两个子类:Exception和Error;所有异常都是Exception类的直接或间接子类;所有错误都是Error的直接或间接子类;

异常:指的是程序运行时发生的不正常事件;异常能够被程序处理,保证程序继续运行下去;例如,除数为0,文件没有找到,输入的数字格式不对......

错误:错误程序没法处理,例如内存泄漏,发生错误后,一般虚拟机会选择终止程序运行,程序员需要修改代码才能解决相关错误:

9666c6c1a719ae5fd1d69e57457ec2ff.png

9390d80b2f016c713524c34bd54827bd.png

Exception分为:非运行时异常(检查异常)和运行时异常(非检查异常)

运行时异常:也称为非检测异常(unchecked Exception), 这些异常在编译期不检测,程序中可以选择处理,也可以不处理。如果不处理运行时会中断,但是编译没问题;

非运行时异常:也称为检测异常(checked Exception), 是必须进行处理的异常,如果不处理,将发生编译期错误;

RuntimeException的子类都是运行时异常。

9cb760b93f1687fa9c510c0ad61d6475.png

五、异常说明

1.NullPointerException  空指针异常

当对一个空对象,即没有初始化,依然为null的对象调用属性或者方法。

public static voidmain(String[] args){

String str= null; //值为null

System.out.println(str.length()); //这里调用了一个空的字符串 那么就会报空指针异常 // 注意 这里String内的length是方法 而在数组中的length是属性

}

2.AirthmeticException  数学异常

整除0时会发生数学异常

public static voidmain(String[] args){//浮点数除以0时不会发生数学异常

System.out.print(10.0/0);//整数除以0时会发生数学异常

System.out.print(10/0);

}

3.IndexOutOfBoundsException 数组越界异常

ea7899cefb0ba2a4bdda8d6ec5f210a8.png

4.NumberFormatException 数组格式异常

543d7eec346d2e0ab657c83a9449f3df.png

5.ClassCastException 类型转换异常

07bd9bc5eb33e378bd0bf0b0feb170c6.png

当发生非运行时异常时,编译器会自动报错,必须修改才能执行程序。

当发生运行时异常时,必须是执行后才会报错,并且执行到异常时会中断程序,不会再向下执行。

六、try-catch-finally

5813a5ca177f126ddcad2062343dcbe8.png

把所有可能抛出异常的,或者

af016865f1b4eb024dfdaa346731a134.png肯定抛出异常的代码都写入try代码块中。

catch语句紧跟其后,用来捕获异常并进行处理:

1// 语法格式:

2 try{3 //可能出现异常或者肯定出现异常的代码

4 }catch(可能出现的异常类型 e){

e.printStackTrace; // 可以查看异常发生的轨迹5 //捕获到该异常该怎么处理

6 }finally{7 // 除非try中使用了System.exit(0)语句 否则该语句块里的代码都会执行 就算try块中return,那也会执行finally块内的代码

8 }

说明:

当try块中代码抛出了异常后,异常处理机制就将这个对象的类型与try后的catch语句中的异常类型进行匹配,如果类型相同,那么就会执行该catch块中的代码,否则,异常没有被捕获,程序将中断。

使用try-catch-finally会发生三种情况:

1.发生异常被捕获处理

2.发生异常没有捕获处理

3.没有发生异常

35f6e20a08a31a8029b5da8c7cf01d62.png

一个try-catch-finally语句中:必须有一个try,catch可以有一个或多个,finally最多只能有一个。

还有另一种组合:try-finally,没有catch

七、异常抛出

抛出异常的意思是:创建了一个异常对象,然后使用关键字throw交给异常处理机制去处理。

//throw使用格式:

throw newException();//或者

cartch(Exception e){throwe;

}

01f4057899e85730687e26270e40659b.png

throw用在方法声明处,声明该方法可能发生的异常类型。

public void eat() throwsException{

System.out.print(10/0);

}

一个方法如果使用了throws,那么调用该方法时,编译器会提醒必须处理这些异常,否则会编译错误。

throws后可以声明多种异常类型,用逗号隔开就可以。

抽象方法也可以使用throws来抛出异常。

d57827d574e1eef42557ffad29d6af4e.png

f49f47a6c0cfa3b0e975785ca22ac069.png

9ff392583c4b651f16c43dff97ac2ff2.png

b90b8660b776640a817736f920902f53.png

八、自定义异常

自定义异常类必须继承Exception类,按照需要来重写所需的构造方法。

class MyException extendsException{ // 继承Exception类 并且重写打印错误信息方法publicMyException(String message){super(message);

}

}

九、断言

JDK1.4之后,增加了断言机制。

断言用来调试,不在生产环境中使用。 语法格式:

assert :

//当布尔表达式为true时,忽略assert,继续向下执行代码//当布尔表达式为false时,程序中断,打印错误信息

注意:在使用时需要进行配置。

20956f1656212697f69df35efa4278ef.png

-enableassertions

-ea

Window->referecnes->搜索jre->

d293d7c75f27629037959047da401a71.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值