「8」进大厂必须掌握的面试题-Java面试-异常和线程

Q1 。 错误和异常有什么区别?错误是在运行时发生的不可恢复的情况 。 如OutOfMemory错误 。 这些JVM错误无法在运行时修复 。 尽管可以在catch块中捕获错误 , 但是应用程序的执行将停止并且无法恢复 。
而异常是由于输入错误或人为错误等原因而发生的情况 。 例如 , 如果指定的文件不存在 , 则将抛出FileNotFoundException 。 否则 , 如果尝试使用null引用 , 则会发生NullPointerException 。 在大多数情况下 , 有可能从异常中恢复(可能是通过向用户提供输入正确值的反馈等) 。
Q2 。 您如何处理Java异常?Java中有五个关键字用于处理异常:

  1. try
  2. catch
  3. finally
  4. throw
  5. throws
Q3 。 Checked Exception和Unchecked Exception有什么区别?检查异常
  • 扩展Throwable类的类(RuntimeException和Error除外)被称为检查异常 。
  • 被检查的异常在编译时被检查 。
  • 示例:IOException , SQLException等 。
未经检查的异常
  • 扩展RuntimeException的类称为未检查的异常 。
  • 未检查的异常不会在编译时检查 。
  • 例如:ArithmeticException , NullPointerException等 。
Q4 。 关键字final , finally和finalize有什么目的?final:**Final用于对类 , 方法和变量施加限制 。 不能继承final类 , 不能覆盖final方法 , 并且不能更改final变量值 。 让我们看下面的示例 , 以更好地理解它 。
class FinalVarExample {public static void main( String args[]){final int a=10;// Final variablea=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");}}}finalizeFinalize用于在垃圾回收之前就执行清理处理 。 让我们看下面的示例 , 以更好地理解它 。
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();}}Q5 。 throw和throws有什么区别?throw throws 引发用于显式引发异常 。引发用于声明异常 。已检查的异常不能仅通过throw传播 。可以使用throws传播检查的异常 。引发后跟一个实例 。投掷之后是上课 。在方法中使用了throw 。抛出与方法签名一起使用 。您不能抛出多个异常 您可以声明多个异常 , 例如public void method()引发IOException , SQLException 。
Q6 。 什么是Java中的异常层次结构?【「8」进大厂必须掌握的面试题-Java面试-异常和线程】层次结构如下:
Throwable是所有Exception类的父类 。 异常有两种类型:检查的异常和UncheckedExceptions或RunTimeExceptions 。 两种类型的异常都扩展了Exception类 , 而错误又进一步分为虚拟机错误和断言错误 。
Q7 。 如何创建自定义异常?要创建您自己的异常 , 请扩展Exception类或其任何子类 。
  • class New1Exception extends Exception {} //这将创建Checked Exception
  • 类NewException扩展了IOException {} //这将创建Checked异常
  • 类NewException扩展了NullPonterExcpetion {} //这将创建UnChecked异常
Q8 。 Java异常类的重要方法有哪些?异常及其所有子类均未提供任何特定方法 , 并且所有方法均在基类Throwable中定义 。
  1. String getMessage() –此方法返回Throwable消息字符串 , 并且可以在通过其构造函数创建异常时提供该消息 。
  2. String getLocalizedMessage()–提供此方法 , 以便子类可以重写它以向调用程序提供特定于语言环境的消息 。 此方法的可抛出类实现仅使用getMessage()方法即可返回异常消息 。
  3. Synchronized Throwable getCause() –此方法返回异常原因 , 或者返回null id , 原因未知 。
  4. String toString() –此方法以String格式返回有关Throwable的信息 , 返回的String包含Throwable类的名称和本地化消息 。
  5. void printStackTrace() –此方法将堆栈跟踪信息打印到标准错误流 , 此方法已重载 , 我们可以传递PrintStream或PrintWriter作为参数 , 以将堆栈跟踪信息写入文件或流 。
Q9 。 进程和线程之间有什么区别?Process Thread 定义 程序的执行实例称为进程 。线程是进程的子集 。通讯 进程必须使用进程间通信与同级进程进行通信 。线程可以直接与其进程中的其他线程通信 。控制 进程只能控制子进程 。线程可以对同一进程的线程行使相当大的控制权 。变化 父进程中的任何更改都不会影响子进程 。主线程中的任何更改都可能影响该进程其他线程的行为 。记忆 在单独的内存空间中运行 。在共享内存空间中运行 。受控制于 进程由操作系统控制 。线程由程序中的程序员控制 。依存关系 流程是独立的 。线程是依赖的 。