想进Java大厂必须掌握的异常和线程面试题
错误和异常有什么区别?
错误是在运行时发生的不可恢复的情况。如OutOfMemory错误。这些JVM错误无法在运行时修复。尽管可以在catch块中捕获错误,但是应用程序的执行将停止并且无法恢复。
而异常是由于输入错误或人为错误等原因而发生的情况。例如,如果指定的文件不存在,则将抛出FileNotFoundException。否则,如果尝试使用null引用,则会发生NullPointerException。在大多数情况下,有可能从异常中恢复(可能是通过向用户提供输入正确值的反馈等)。
如何处理Java异常?
Java中有五个关键字用于处理异常:
- try
- catch
- finally
- throw
- throws
由于时间关系,没有写的很详细,可能有一部分省略,需要完整版的朋友可以点一点下方链接免费领取
链接:1103806531暗号:CSDN
Checked Exception和Unchecked Exception有什么区别?
检查异常
- 扩展Throwable类的类(RuntimeException和Error除外)被称为检查异常
- 被检查的异常在编译时被检查
- 示例:IOException,SQLException等
未经检查的异常
- 扩展RuntimeException的类称为未检查的异常
- 未检查的异常不会在编译时检查
- 例如:ArithmeticException,NullPointerException等
关键字final,finally和finalize有什么目的?
final
Final用于对类,方法和变量施加限制。不能继承final类,不能覆盖final方法,并且不能更改final变量值。让我们看下面的示例,以更好地理解它。
class FinalVarExample {
public static void main( String args[]){
final int a=10; // Final variable
a=50; //Error as value can't be changed
}
}
finally
最后用于放置重要代码,无论是否处理异常,都将执行该代码。让我们看下面的示例,以更好地理解它。
class FinallyExample {
public static void main(String args[]){
try {
int x=100;
}catch(Exception e) {
System.out.println(e);
}finally {
System.out.println("finally block is executing");
}
}
}
finalize
Finalize用于在垃圾回收之前就执行清理处理。让我们看下面的示例,以更好地理解它。
class FinalizeExample {
public void finalize() {
System.out.println("Finalize is called");
}
public static void main(String args[]){
FinalizeExample f1=new FinalizeExample();
FinalizeExample f2=new FinalizeExample();
f1= NULL;
f2=NULL;
System.gc();
}
}
什么是Java中的异常层次结构?
Throwable是所有Exception类的父类。
异常有两种类型:检查的异常和UncheckedExceptions或RunTimeExceptions。两种类型的异常都扩展了Exception类,而错误又进一步分为虚拟机错误和断言错误。
如何创建自定义异常?
要创建您自己的异常,请扩展Exception类或其任何子类。
- class New1Exception extends Exception {} //这将创建Checked Exception
- 类NewException扩展了IOException {} //这将创建Checked异常
- 类NewException扩展了NullPonterExcpetion {} //这将创建UnChecked异常
Java异常类的重要方法有哪些?
异常及其所有子类均未提供任何特定方法,并且所有方法均在基类Throwable中定义。
- String getMessage() –此方法返回Throwable消息字符串,并且可以在通过其构造函数创建异常时提供该消息。
- String getLocalizedMessage()–提供此方法,以便子类可以重写它以向调用程序提供特定于语言环境的消息。此方法的可抛出类实现仅使用getMessage()方法即可返回异常消息。
- Synchronized Throwable getCause() –此方法返回异常原因,或者返回null id,原因未知。
- String toString() –此方法以String格式返回有关Throwable的信息,返回的String包含Throwable类的名称和本地化消息。
- void printStackTrace() –此方法将堆栈跟踪信息打印到标准错误流,此方法已重载,我们可以传递PrintStream或PrintWriter作为参数,以将堆栈跟踪信息写入文件或流。
什么是finally块?有没有什么情况下最终将不会执行?
最终块是始终执行一组语句的块。它始终与try块相关联,无论是否发生任何异常。
是的,如果程序通过调用System.exit()或导致致命错误(导致进程中止)退出,则最终将不会执行。
什么是同步?
同步是指多线程。同步的代码块一次只能由一个线程执行。由于Java支持执行多个线程,因此两个或多个线程可以访问相同的字段或对象。同步是使所有并发线程在执行中保持同步的过程。同步避免了由于共享内存视图不一致而导致的内存一致性错误。当一个方法被声明为已同步时,线程将保持该方法对象的监视器。如果另一个线程正在执行同步方法,则该线程将被阻塞,直到该线程释放监视器。
创建线程的两种方法是什么?
在Java中,可以通过以下两种方式创建线程:
- 通过实现Runnable接口
- 通过扩展线程
Java中有哪些不同类型的垃圾收集器?
Java中的垃圾收集程序,可以帮助进行隐式内存管理。由于在Java中,可以使用new关键字动态创建对象,一旦创建对象,该对象将消耗一些内存。一旦工作完成,并且不再有对象的引用,使用垃圾回收的Java将破坏该对象并释放其占用的内存。
Java提供了四种类型的垃圾收集器:
- 串行垃圾收集器
- 并行垃圾收集器
- CMS垃圾收集器
- G1垃圾收集器
最后
我这边也整理了一份 架构师全套****和关于java的系统化资料,包括java核心知识点、面试专题和20年最新的互联网真题、电子书等都有。有需要的朋友可以点一点下方链接免费领取!
链接:1103806531暗号:CSDN
上一篇: ROS节点订阅与发布