最新初始Java JavaSE 异常 认识异常,【深夜思考】

面试准备+复习分享:

为了应付面试也刷了很多的面试题与资料,现在就分享给有需要的读者朋友,资料我只截取出来一部分哦

秋招|美团java一面二面HR面面经,分享攒攒人品

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

}

运行结果:

结论: 无论是否存在异常, finally 中的代码一定都会执行到.

代码示例5: finall 保证会执行到 Scanner 的 close 方法


public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

try{

int n = sc.nextInt();

System.out.println(10 / n);

}catch (InputMismatchException e){

e.printStackTrace();

System.out.println(“输入错误”);

}catch (ArithmeticException e){

e.printStackTrace();

System.out.println(“算术异常,可能0作为了除数”);

}finally {

sc.close();

System.out.println(“finally执行了”);

}

运行结果:

代码示例6:使用 try 负责回收资源


public static void main(String[] args) {

try(Scanner sc = new Scanner(System.in)){

int n = sc.nextInt();

System.out.println(10 / n);

}catch (InputMismatchException e){

e.printStackTrace();

System.out.println(“输入错误”);

}catch (ArithmeticException e){

e.printStackTrace();

System.out.println(“算术异常,可能0作为了除数”);

}finally {

System.out.println(“finally执行了”);

}

}

运行结果:

代码示例7:如果本方法中没有合适的处理异常的方式, 就会沿着调用栈向上传递


public static void func(int n) {

System.out.println(10 / n);

}

public static void main(String[] args) {

try {

func(0);

} catch (ArithmeticException e) {

e.printStackTrace();

}

System.out.println(“1234455”);

}

运行结果:

代码示例8: 如果向上一直传递都没有合适的方法处理异常, 最终就会交给 JVM 处理, 程序就会异常终止(和我们最开始 未使用 try catch 时是一样的).


public static void func(int n) {

System.out.println(10 / n);

System.out.println(“!23ggggg”);

}

public static void main(String[] args) {

func(0);

System.out.println(“!234”);

}

运行结果:

代码示例9:尽量避免在finally当中写return


public static int func1() {

int a = 10;

try {

return a;

}catch (ArithmeticException e){

e.printStackTrace();

}finally {

return 20;

}

}

public static void main(String[] args) {

int a = func1();

System.out.println(a);

}

运行结果:

异常处理流程


  • 程序先执行 try 中的代码
  • 如果 try 中的代码出现异常, 就会结束 try 中的代码, 看和 catch 中的异常类型是否匹配.
  • 如果找到匹配的异常类型, 就会执行 catch 中的代码
  • 如果没有找到匹配的异常类型, 就会将异常向上传递到上层调用者.
  • 无论是否找到匹配的异常类型, finally 中的代码都会被执行到(在该方法结束之前执行).
  • 如果上层调用者也没有处理的了异常, 就继续向上传递.
  • 一直到 main 方法也没有合适的代码处理异常, 就会交给 JVM 来进行处理, 此时程序就会异常终止.

抛出异常


除了 Java 内置的类会抛出一些异常之外, 程序猿也可以手动抛出某个异常. 使用 throw 关键字完成这个操作.

public static int func2(int x) throws RuntimeException{

if(x==0){

throw new ArithmeticException(“/ by 0”);

}

return x/10;

}

public static void main(String[] args) {

int x = func2(0);

System.out.println(x);

}

3.Java 异常体系

===========

  • 顶层类Throwable派生出两个重要的子类,Error和Exception
  • 其中Error指的是Java运行时内部错误和资源耗尽错误.应用程序不抛出此类异常.这种内部错误一旦出现,除了告知用户并使程序终止之外,再无能为力.这种情况很少出现.
  • Exception是我们程序猿所使用的异常类的父类.
  • 其中Exception有一个子类称为RuntimeException,这里面又派生出很多我们常见的异常类NullPointerException,IndexOutOfBoundsException等.

Java语言规范将派生于 Error 类或 RuntimeException 类的所有异常称为 非受查异常, 所有的其他异常称为 受查异常.

如果一段代码可能抛出受查异常.那么必须显示进行处理.

如代码:

import java.io.File;

import java.util.Scanner;

public class Test2 {

public static String readFile(){

File file = new File(“d:/test.txt”);

Scanner sc = new Scanner(file);

return sc.nextLine();

}

public static void main(String[] args) {

System.out.println(readFile());

}

}

显示处理的方法有两种:


① 使用 try catch 包裹起来

import java.io.File;

import java.io.FileNotFoundException;

import java.util.Scanner;

public class Test2 {

public static String readFile(){

File file = new File(“d:/test.txt”);

Scanner sc = null;

try {

sc = new Scanner(file);

} catch (FileNotFoundException e) {

e.printStackTrace();

}

return sc.nextLine();

}

public static void main(String[] args) {

System.out.println(readFile());

}

}

② 在方法上加上异常说明, 相当于将处理动作交给上级调用者

import java.io.File;

import java.io.FileNotFoundException;

import java.util.Scanner;

public class Test2 {

public static String readFile() throws FileNotFoundException {

File file = new File(“d:/test.txt”);

Scanner sc = new Scanner(file);

return sc.nextLine();

}

public static void main(String[] args) throws FileNotFoundException {

System.out.println(readFile());

}

}

注 : 可以使用IDEA的alt + enter 快速修正代码.

4.自定义异常类

========

例如: 实现一个简单的用户登录功能


class NameError extends Exception{

public NameError(String message) {

super(message);

}

}

class PasswordError extends Exception{

public PasswordError(String message) {

super(message);

}

}

public class Test {

private static String name = “wangzhi”;

private static String password = “123456”;

public static void login(String name , String password) throws NameError, PasswordError {

if (!Test.name.equals(name)){

throw new NameError(“用户名输入错误”);

}

if (!Test.password.equals(password) ){

throw new PasswordError(“密码输入错误”);

}

System.out.println(“登录成功!”);

}

public static void main(String[] args) {

try {

login(“wangzhi”,“12345”);

} catch (NameError | PasswordError e) {

e.printStackTrace();

}

}

}

运行结果:

最后

光给面试题不给答案不是我的风格。这里面的面试题也只是凤毛麟角,还有答案的话会极大的增加文章的篇幅,减少文章的可读性

Java面试宝典2021版

最常见Java面试题解析(2021最新版)

2021企业Java面试题精选

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

的风格。这里面的面试题也只是凤毛麟角,还有答案的话会极大的增加文章的篇幅,减少文章的可读性

Java面试宝典2021版

[外链图片转存中…(img-WBswvhZx-1715663493387)]

[外链图片转存中…(img-25Pf6MeW-1715663493387)]

最常见Java面试题解析(2021最新版)

[外链图片转存中…(img-h7wHKJxs-1715663493388)]

[外链图片转存中…(img-hAey6204-1715663493388)]

2021企业Java面试题精选

[外链图片转存中…(img-QSgT1BRP-1715663493388)]

[外链图片转存中…(img-jJOVcNX2-1715663493388)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值