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

Q1。错误和异常有什么区别?

错误是在运行时发生的不可恢复的情况。如OutOfMemory错误。这些JVM错误无法在运行时修复。尽管可以在catch块中捕获错误,但是应用程序的执行将停止并且无法恢复。

而异常是由于输入错误或人为错误等原因而发生的情况。例如,如果指定的文件不存在,则将抛出FileNotFoundException。否则,如果尝试使用null引用,则会发生NullPointerException。在大多数情况下,有可能从异常中恢复(可能是通过向用户提供输入正确值的反馈等)。

Q2。您如何处理Java异常?

Java中有五个关键字用于处理异常:

try

catch

finally

throw

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 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(); } } Q5。throw和throws有什么区别? throw throws
引发用于显式引发异常。   引发用于声明异常。  
已检查的异常不能仅通过throw传播。   可以使用throws传播检查的异常。  
引发后跟一个实例。   投掷之后是上课。  
在方法中使用了throw。   抛出与方法签名一起使用。  
您不能抛出多个异常   您可以声明多个异常,例如public void method()引发IOException,SQLException。  
Q6。什么是Java中的异常层次结构?

层次结构如下:

Throwable是所有Exception类的父类。异常有两种类型:检查的异常和UncheckedExceptions或RunTimeExceptions。两种类型的异常都扩展了Exception类,而错误又进一步分为虚拟机错误和断言错误。

Q7。如何创建自定义异常?

要创建您自己的异常,请扩展Exception类或其任何子类。

class New1Exception extends Exception {} //这将创建Checked Exception

类NewException扩展了IOException {} //这将创建Checked异常

类NewException扩展了NullPonterExcpetion {} //这将创建UnChecked异常

Q8。Java异常类的重要方法有哪些?

异常及其所有子类均未提供任何特定方法,并且所有方法均在基类Throwable中定义。

String getMessage() –此方法返回Throwable消息字符串,并且可以在通过其构造函数创建异常时提供该消息。

String getLocalizedMessage()–提供此方法,以便子类可以重写它以向调用程序提供特定于语言环境的消息。此方法的可抛出类实现仅使用getMessage()方法即可返回异常消息。

Synchronized Throwable getCause() –此方法返回异常原因,或者返回null id,原因未知。

String toString() –此方法以String格式返回有关Throwable的信息,返回的String包含Throwable类的名称和本地化消息。

void printStackTrace() –此方法将堆栈跟踪信息打印到标准错误流,此方法已重载,我们可以传递PrintStream或PrintWriter作为参数,以将堆栈跟踪信息写入文件或流。

Q9。进程和线程之间有什么区别? Process Thread
定义   程序的执行实例称为进程。   线程是进程的子集。  
通讯   进程必须使用进程间通信与同级进程进行通信。   线程可以直接与其进程中的其他线程通信。  
控制   进程只能控制子进程。   线程可以对同一进程的线程行使相当大的控制权。  
变化   父进程中的任何更改都不会影响子进程。   主线程中的任何更改都可能影响该进程其他线程的行为。  
记忆   在单独的内存空间中运行。   在共享内存空间中运行。  
受控制于   进程由操作系统控制。   线程由程序中的程序员控制。  
依存关系   流程是独立的。   线程是依赖的。  
Q10。什么是finally块?有没有什么情况下最终将不会执行?

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpxjyz.html