泛型、异常

泛型 

广泛的数据类型

            确保类型安全的一种途径

            定义:类和方法上都可以定义泛型

            public class EasyGenericity<J,M,N,Y,Easy>

            J,M,N,Y,Easy代表一种类型

            类和方法定义同一种类型

            不冲突,选择就近原则

public<E>Etest(Ee){

//返回的类型和传入的类型是同一种

returne;

}

//上限

public<J extends List>JtestA(Jj){

returnj;

}

//public static <Asuper

private M m;

public void testB(M m,J j){

}

public static void main(String[ ] args){

//类型安全

List list = new ArrayList();

list.add("123");

list.add(new Object());

for(Object obj : list){

System.out.println(obj);

//在类型转换的时候没有明确对象的数据类型进行强制类型转换

//这时候就会抛出ClassCastException(类型转换异常)

//这就是类型不安全

//Stringstr=(String)obj;

//System.out.println(str);

}

//定义泛型的类型在声明上定义类型

List<String>lista=new ArrayList<>();

lista.add(String.valueOf(123));

lista.add("123");

for(String str : lista){

System.out.println(str);

}

Map<String,Object>map = new HashMap<>();

map.put("123",123);

}

异常

异常

程序中一些程序处理不了的特殊情况

异常类Exception

见过的异常NullPointerException、ArrayIndexoutOfBoundsException

异常的分类:

  • 检查型异常(编译异常):在编译时就会抛出的异常(代码会报错),需要在代码中编写处理方式

最具代表的检查性异常是用户错误或问题引起的异常,这些异常在编译时强制要求程序员处理。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。

这类异常通常使用 try-catch 块来捕获并处理异常,或者在方法声明中使用 throws 子句声明方法可能抛出的异常。

  • 运行时异常:在代码运行阶段可能会出现的异常,可以不用明文处理

这些异常在编译时不强制要求处理,通常是由程序中的错误引起的,例如 NullPointerException、ArrayIndexOutOfBoundsException 等,这类异常可以选择处理,但并非强制要求。可以通过代码避免异常的发生继承RunTimeException

  • 错误: 错误不是异常,而是脱离程序员控制的问题,错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。

当程序中出现异常,就会中断程序,代码不会继续运行

  • try:用于包裹可能会抛出异常的代码块。
  • catch:用于捕获异常并处理异常的代码块。
  • finally:用于包含无论是否发生异常都需要执行的代码块。
  • throw:用于手动抛出异常。
  • throws:用于在方法声明中指定方法可能抛出的异常。
  • Exception类:是所有异常类的父类,它提供了一些方法来获取异常信息,如 getMessage()、printStackTrace() 等。

异常处理通常使用 try-catch-finally 块来处理,也可以使用 throws 关键字将异常抛出给调用者处理。

try-catch-finally

finally 块常用来关闭一些连接资源

catch合并处理方案一个catch块捕捉多种异常

try处理多种异常

catch合并处理方案一个cathch块捕捉多种异常

catch通过声明父类异常捕捉所有子类异常

 

catch 异常捕捉的顺序 子类异常优先处理,父类异常后置处理

 

如果catch块抛出了异常,没有finally就会中断程序

如果有finally,会运行finally会运行,并且正常返回,此方法结束

 

try不能单独编写,必须有其他语句块

try块中没有异常,不能随便检查异常

 

  1. 使用 try-catch 块捕获并处理异常,可以避免程序因异常而崩溃。
  2. 可以使用多个 catch 块来捕获不同类型的异常,并进行不同的处理。
  3. 可以使用 finally 块来执行一些必要的清理工作,无论是否发生异常都会执行。
  4. 可以使用 throw 关键字手动抛出异常,用于在程序中明确指定某些异常情况。
  5. 可以使用 throws 关键字将异常抛出给调用者处理,用于在方法签名中声明可能会出现的异常。
  6. Checked Exception 通常是由于外部因素导致的问题,需要在代码中显式地处理或声明抛出。
  7. Unchecked Exception 通常是由于程序内部逻辑或数据异常导致的,可以不处理或者在需要时进行处理。
  8. 在处理异常时,应该根据具体的异常类型进行处理,例如可以尝试重新打开文件、重新建立网络连接等操作。
  9. 异常处理应该根据具体的业务需求和设计原则进行,避免过度捕获和处理异常,从而降低程序的性能和可维护性。

throw、throws关键字

在Java中, throw 和 throws 关键字是用于处理异常的。

throw 关键字用于在代码中抛出异常,而 throws 关键字用于在方法声明中指定可能会抛出的异常类型。

throw 关键字用于在当前方法中抛出一个异常。

通常情况下,当代码执行到某个条件下无法继续正常执行时,可以使用 throw 关键字抛出异常,以告知调用者当前代码的执行状态。

throws 关键字用于在方法声明中指定该方法可能抛出的异常。当方法内部抛出指定类型的异常时,该异常会被传递给调用该方法的代码,并在该代码中处理异常。

一个方法可以声明抛出多个异常,多个异常之间用逗号隔开。

throw 和 throws 的区别

throws   ArithmeticException;

throw   new   ArithmeticException("算术异常");

  • 1)throws 关键字用于声明异常,它的作用和 try-catch 相似;而 throw 关键字用于显式的抛出异常。
  • 2)throws 关键字后面跟的是异常的名字;而 throw 关键字后面跟的是异常的对象。
  • 3)throws 关键字出现在方法名上,而 throw 关键字出现在方法体里。
  • 4)throws 关键字在声明异常的时候可以跟多个,用逗号隔开;而 throw 关键字每次只能抛出一个异常。
  • finally关键字

    finally 关键字用来创建在 try 代码块后面执行的代码块。

    无论是否发生异常,finally 代码块中的代码总会被执行

    在 finally 代码块中,可以运行清理类型等收尾善后性质的语句。

    注意:

    catch 不能独立于 try 存在。

    在 try/catch 后面添加 finally 块并非强制性要求的。

    try 代码后不能既没 catch 块也没 finally 块。

    try, catch, finally 块之间不能添加任何代码。

    自定义异常

    抛出的异常只能更精确

    方法重写:子类对父类中继承过来的方法进行重新定义

    约束:返回值类型、方法名、参数列表不能变

    访问权限只能更开放

    抛出的异常只能更精确

  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值