java之java相关异常知识点java面试题(代码片段)

北芳科技 北芳科技     2022-12-01     773

关键词:

1、final、finally、finalize 的区别?

● final:用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,被其修饰的类不可继承。

● finally:异常处理语句结构的一部分,表示总是执行。

● finalize:Object 类的一个方法,所以Java对象都有这个方法,当某Java对象没有更多的引用指向的时候,会被垃圾回收器回收,该对象被回收之前,由垃圾回收器来负责调用此方法,通常在该方法中进行回收前的准备工作。
该方法更像是一个对象生命周期的临终方法,当该方法被系统调用则代表该对象即将“死亡”,但是需要注意的是,我们主动行为上去调用该方法并不会导致该对象“死亡”,这是一个被动的方法(其实就是回调方法),不需要我们调用。

2、Java中异常分为哪些种类?

按照异常需要处理的时机分为编译时异常(也叫受控异常)也叫 CheckedException 和运行时异常(也叫非受控异常)也叫 UnCheckedException。Java认为Checked异常都是可以被处理的异常,所以Java程序必须显式处理Checked异常。如果程序没有处理Checked 异常,该程序在编译时就会发生错误无法编译。这体现了Java 的设计哲学:没有完善错误处理的代码根本没有机会被执行。对Checked异常处理方法有两种:

(1) 编译时异常

● 第一种:当前方法知道如何处理该异常,则用try…catch块来处理该异常。(编译时异常)

public class Test 
    public void  test () 
        try 
            Class.forName("");
        catch (Exception e )
        
    

● 第二种:当前方法不知道如何处理,则在定义该方法时声明抛出该异常。(编译时异常)

public class Test 
    public void  test () throws ClassNotFoundException 
        Class.forName("");
    

(2) 运行时异常

运行时异常只有当代码在运行时才发行的异常,编译的时候不需要try…catch。
Runtime如除数是0和数组下标越界等,其产生频繁,处理麻烦,
若显示申明或者捕获将会对程序的可读性和运行效率影响很大。

所以由系统自动检测并将它们交给缺省的异常处理程序。
当然如果你有处理要求也可以显示捕获它们。

public class Test 
    public static void main(String[] args) 
        int a[] = 1,2,6,8,5;
        System.out.println(a[10]);
    

3、error和exception的区别?

Error类和Exception类的父类都是Throwable类,他们的区别如下:

● Error类一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢出等。
对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和预防,遇到这样的错误,建议让程序终止。

● Exception类表示程序可以处理的异常,可以捕获且可能恢复。
遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常。

●Exception类又分为未检查异常(UnCheckedException)和受检查的异常(CheckedException)。运行时异常ArithmeticException,IllegalArgumentException编译能通过,但是一运行就终止了,程序不会处理运行时异常,出现这类异常,程序会终止。
而受检查的异常,要么用 try…catch 捕获,要么用throws字句声明抛出,交给它的父类处理,否则编译不会通过。

4、调用下面的方法,得到的返回值是什么?

1. public int getNum() 
2.     try 
3.         int a = 1 / 0;
4.         return 1;
5.      catch (Exception e) 
6.         return 2;
7.      finally 
8.         return 3;
9.     
10.


代码走到第3行的时候遇到了一个MathException,这时第4行的代码就不会执行了,
代码直接跳转到catch语句中,
走到第 6 行的时候,异常机制有一个原则:
如果在catch中遇到了return或者异常等能使该函数终止的话那么有finally就必须先执行完finally代码块里面的代码然后再返回值。

因此代码又跳到第8行,可惜第8行是一个return语句,那么这个时候方法就结束了,
因此第6行的返回结果就无法被真正返回。

如果finally仅仅是处理了一个释放资源的操作,那么该道题最终返回的结果就是2。
因此上面返回值是3。

5、Java 异常处理机制的理解?

Java对异常进行了分类,不同类型的异常分别用不同的Java类表示,所有异常的根类为 java.lang.Throwable,Throwable下面又派生了两个子类:Error和Exception。

Error表示应用程序本身无法克服和恢复的一种严重问题。

系统异常是软件本身缺陷所导致的问题,也就是软件开发人员考虑不周所导致的问题,软件使用者无法克服和恢复这种问题,但在这种问题下还可以让软件系统继续运行或者让软件死掉,例如,数组下标越界(ArrayIndexOutOfBoundsException),空指针异常(NullPointerException)、类转换异常(ClassCastException)。

Exception表示程序还能够克服和恢复的问题,其中又分为系统异常和普通异常。

普通异常是运行环境的变化或异常所导致的问题,是用户能够克服的问题,例如,网络断线,硬盘空间不够,发生这样的异常后,程序不应该死掉。

Java为系统异常和普通异常提供了不同的解决方案,编译器强制普通异常必须try…catch处理或用throws声明继续抛给上层调用方法处理,所以普通异常也称为checked异常,而系统异常可以处理也可以不处理,所以编译器不强制用try…catch处理或用throws声明,所以系统异常也称为unchecked异常。

6、说出最常见的5个RuntimeException?

● java.lang.NullPointerException 空指针异常;出现原因:调用了未经初始化的对象或者是不存在的对象。

● java.lang.ClassNotFoundException 指定的类找不到;出现原因:类的名称和路径加载错误;通常都是程序试图通过字符串来加载某个类时可能引发异常。

● java.lang.NumberFormatException 字符串转换为数字异常;出现原因:字符型数据中包含非数字型字符。

● java.lang.IndexOutOfBoundsException 数组角标越界异常,常见于操作数组对象时发生。

● java.lang.IllegalArgumentException 方法传递参数错误。

● java.lang.ClassCastException 数据类型转换异常。

● java.lang.NoClassDefFoundException 未找到类定义错误。

● SQLException SQL 异常,常见于操作数据库时的 SQL 语句错误。

● java.lang.InstantiationException 实例化异常。

● java.lang.NoSuchMethodException 方法不存在异常。

7、throw 和 throws 的区别?

● throw:

throw 语句用在方法体内,表示抛出异常,由方法体内的语句处理。

throw是具体向外抛出异常的动作,所以它抛出的是一个异常实例,执行throw一定是抛出了某种异常。

● throws:

throws语句是用在方法声明后面,表示如果抛出异常,由该方法的调用者来进行异常的处理。

throws主要是声明这个方法会抛出某种类型的异常,让它的使用者要知道需要捕获的异常的类型。

● throws表示出现异常的一种可能性,并不一定会发生这种异常。

public class Test 


    public void  test() throws Exception 

        throw new Exception();

    



阿里巴巴java面试题及答案(2020年6月份)

...巴最新的Java面试题以及参考答案,文中涉及大量Java面试知识点和相关试题。博主已经把以下这些Java面试知识点和相关试题及参考答案整理成了一份PDF的文档,并且已经上传到百度云了,文末附文档的百度云链接,大家自行获取... 查看详情

java面试题总结之java基础(代码片段)

 1、JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?答:Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。在Java中,每个... 查看详情

java面试系列之并发编程专题-java线程池灵魂拷问

...三银四跳槽季即将来临,想必有些猿友已经蠢蠢欲动在做相关的准备了!在接下来的日子里,笔者将坚持写作、分享Java工程师在面试求职期间的方方面面,包括简历制作、面试场景复现、面试题解答、谈薪技巧以及项目的实战... 查看详情

java面试技巧之mysql问题梳理

...时表、删除表的n种方式、枚举、视图、数据恢复等相关知识点对应的面试题进 查看详情

java基础题

...两天在复习数据结构的一些知识,但也没忘了关注Java的相关知识。从网上找了其他大神的相关面试题,大家可以看一下,希望对大家有所帮助!谢谢大家的支持!    Java面试题全集(上)    Java面试... 查看详情

java面试系列之并发编程专题-java线程池灵魂拷问

...三银四跳槽季即将来临,想必有些猿友已经蠢蠢欲动在做相关的准备了!在接下来的日子里,笔者将坚持写作、分享Java工程师在面试求职期间的方方面面,包括简历制作、面试场景复现、面试题解答、谈薪技巧以及项目的实战... 查看详情

java相关面试题总结

本文分为十九个模块,分别是: Java基础、容器、多线程、反射、对象拷贝、JavaWeb、异常、网络、设计模式、Spring/SpringMVC、SpringBoot/SpringCloud、Hibernate、MyBatis、RabbitMQ、Kafka、Zookeeper、MySQL、Redis、JVM ,如下图所示:【Java... 查看详情

java之异常专项练习java面试题(代码片段)

Java之异常专项练习【Java面试题】一、final、finally、finalize的区别?二、Java中异常分为哪些种类?三、error和exception的区别?四、调用下面的方法,得到的返回值是什么?五、Java异常处理机制的理解?六、... 查看详情

java面试题

1Java基础知识面试题(2020最新版)https://thinkwon.blog.csdn.net/article/details/1043906122 Java集合容器面试题(2020最新版) https://thinkwon.blog.csdn.net/article/details/1045885513 Java异常面试题(2020最新版) https://thinkwon.blog.c 查看详情

java之final相关内容详解面试题(代码片段)

1、final关键字除了修饰类之外,还有哪些用法呢?(1)final修饰的变量,一旦赋值,不可重新赋值;(2)如果引用为引用数据类型,比如对象、数组,则该对象、数组本身可以修改,... 查看详情

java之final相关内容详解面试题(代码片段)

1、final关键字除了修饰类之外,还有哪些用法呢?(1)final修饰的变量,一旦赋值,不可重新赋值;(2)如果引用为引用数据类型,比如对象、数组,则该对象、数组本身可以修改,... 查看详情

java之运算符相关内容详解面试题(代码片段)

1、Java运算符计算机的基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富运算符来操作变量,我们可以把运算符分成以下几组?算术运算符关系运算符位运算符逻辑运算符赋值运算符其... 查看详情

程序员面试技术题,怎么才能快速记住那么多概念?

...Java面试热门内容精讲之——并发编程volatile看到一个相关知识点的课程就几十节,但实际面试上会问到什么问题还不一定。大家就会很慌& 查看详情

java异常面试常见题目

在Java核心知识的面试中,你总能碰到关于 处理Exception和Error的面试题。Exception处理是Java应用开发中一个非常重要的方面,也是编写强健而稳定的Java程序的关键,这自然使它成为面试题中的常客。关于Java中Error和Exception的面... 查看详情

java之string相关内容详解(字符串和字符串常量池)面试题(代码片段)

Java之String相关内容详解1、String可以被继承吗?2、为什么Java语言的开发者,把String类定义为final的呢?3、字符串和字符串池(1)字符串1、字符串的创建(1)直接创建:Strings="Hello";(2... 查看详情

007期javase面试题:异常(代码片段)

...今天这篇是面试系列的第七篇,主要总结了JavaSE中异常类相关面试题,在后续,会沿着第一篇开篇的知识线路一直总结下去,做到日更!如果我能做到百日百更,希望你也可以跟着百日百刷,一百天养成一个好习惯。说一下Java... 查看详情

java之string相关内容详解(字符串和字符串常量池)面试题(代码片段)

1、String可以被继承吗?String类在声明时使用final关键字修饰,被final关键字修饰的类无法被继承。Cannotinheritfromfinal"java.lang.String’无法从最终的“java.lang.String”继承接下来我们可以看一下String类的源代码片段:publi... 查看详情

2020最常见的200+java面试题汇总(含答案解析)

...章不论是从深度还是广度上来讲,都已经囊括了非常多的知识点了。这份面试题的包含的模块分为19个模块,分别是:Java基础、容器、多线程、反射、对象拷贝、JavaWeb、异常、网络、设计 查看详情