java 注解错误_java高级语法3:异常和注解

异常

异常的概念

e4f6199aa7517d0ea1705c39d9779a23.png

429b6dd261c8a81399b6ccc62a709372.png

stackOverFlow:栈溢出

Exception分为检查型异常和非检查型异常。检查型异常必须在源码中进行捕获处理,这是编译检查的一部分。除了RuntimeExceion及其子类之外的异常都是检查型异常。非检查型异常就是所谓的RuntimeExceion,类似NullPointerException,ArrayIndexOfBoundException就是非检查型异常,通常是可以通过编码避免的逻辑错误,具体根据需要判断是否需要捕获,编译期不检查(注意同样的,运行时异常也是可以捕获的),如果抛出了非检查型异常,那就是编码逻辑有问题,要解决。

常见异常:

b84854bec172f80c9dc63663625a199f.png

常见Error:

StackOverFlowError(栈溢出,在无限递归时常见)

OutOfMemoryError(内存溢出)

捕获异常

d82f22c7046f92c0b316a046fafb000d.png

02c480853b52d878b766945eb87b9d63.png

注意,我们是不应该捕获Error,而不是不能捕获Error:Error是正常情况下不大可能出现的情况,绝大部分的Error都会导致程序状态不正常,不可恢复,既然是非正常情况,所以不便也不需要处理。但是既然Error也是继承于Throwable的,说明它也是可以被捕获的,只是我们通常不会这样做而已:

/**

* @program: OJ

* @description:尝试捕获Error

* @author: JiaDing

* @create: 2020-03-29 17:30

**/

public class CatchError {

public static void main(String[] args) {

final String errorMessage="I'm an error,please catch me";

try{

throw new Error(errorMessage);

}catch (Throwable e){

e.printStackTrace();

}

System.out.println("捕捉完成");

}

}

在try中的代码,报错后就结束,不会执行try中剩下的部分

841911daa4e4c356f57fd059be604f6a.png

抛出异常

throw exception

c427f198c2f2a406fa1ef3ec5e0768fa.png

抛出异常后在调用位置去捕获处理

main方法也可以抛出异常,但是抛出就直接甩到虚拟机了,程序中对其将无法处理,此时就直接结束程序的运行,所以一般不这样做

重写方法不能抛出比被重写方法范围更大的异常类型,也就是说,子类不能抛出比父类更大范围的异常

人工抛出异常:

cb556f196c1fdfb397fb1e2b1fa46d0c.png

8fec4fec4f9c22017f04c023a4c8b493.png

用户自定义异常类必须继承现有异常类

JAVA提供的异常类一般是够用的,只有特殊情况才需要自定义,情况少见

注解

da9fe1047e48121697d03dd203ce2691.png

62d8e7820211e579ac8611f647d17756.png

ce0655be378ff53d35c00c9c3598bf5d.png

18b456d36e5e82dd25dd6462e7d8a7f3.png

03d3575a7c109da0a677377f499f1a7d.png

@Deprecated过时方法不是不能调用,只是显示出来,便于选择和之后的迭代

示例:

23d83fbbd60717e290c87b4d9106e3d9.png

这些内容可以被抽取到dlc文件中

javadoc test1.java//抽取注解到文档中

生成的文件们:

811be6fa63e70010b944edf2ac0551da.png

生成的文档页面(HTML):

67142316-19993d00-f296-11e9-831a-83c773ddf38d.png

a82ec7fa72c88b5c6f148ca52b5ac886.png

02c1b6d1244221932825a0c1325f4d50.png

@Target(ElementType.FIELD)//声明这个注解类是给其他类的属性做注解

@Rectention(RetentionPolicy.RUNTIME)//定义注解的生命周期

@Documneted//表示将注解写到文档中

@interface TestAnn{

?public int id() default 0;//default是默认值

public String desc() default "";

}

使用:

ee32ac590370ad1198bc4cf86ea8c9a2.png

对一个属性进行注解

67142180-ff5f5f00-f295-11e9-891e-fedc77096d50.png

注解可以用来替换配置文件的作用以简化操作

示例,依然以之前使用配置文件来调用任意类的任意方法的例子为例:

67142324-1b630080-f296-11e9-8bd5-6adc63328fbf.png

a6e3fbab61acb32816b01bad8c9d61c2.png

67142328-1bfb9700-f296-11e9-8361-619e627b1044.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值