1). Java中Error与Exception的区别是什么 ? 项目开发时自定义异常为什么要继承RuntimeException,而不是Exception ?
Java中的Error和Exception都是Throwable类的子类,但它们之间有一些区别。
Error通常表示JVM或底层系统出现了无法恢复的问题,例如OutOfMemoryError、StackOverflowError等。这些错误通常不应该被捕获和处理,因为它们表示系统已经无法正常工作,程序无法继续执行。
而Exception通常表示程序运行时遇到了可处理的问题,例如NullPointerException、IOException等。这些异常通常应该被捕获和处理,以防止程序崩溃或出现不必要的错误。
在项目开发中,自定义异常通常应该继承Exception或RuntimeException。Exception是所有可检查异常的基类,它表示可能会在方法调用期间抛出的异常。如果自定义异常是可检查异常,那么应该继承Exception。
而RuntimeException是所有非检查异常的基类,它表示程序中的错误,例如NullPointerException、IllegalArgumentException等。如果自定义异常是非检查异常,那么应该继承RuntimeException。
继承RuntimeException的自定义异常通常表示程序中的逻辑错误,例如参数无效、状态不正确等。这些异常通常不需要在方法签名中声明,并且可以在方法内部直接抛出。相反,继承Exception的自定义异常通常表示外部错误,例如网络故障、文件不存在等。这些异常通常需要在方法签名中声明,并且应该由调用方处理。
2). Java中的线程有哪些状态 ,分别表示什么含义啊 。【JavaSE 多线程相关】
在Java中,线程有以下几种状态:
-
NEW(新建):当线程对象被创建但还没有调用start()方法时,线程处于新建状态。
-
RUNNABLE(可运行):当线程调用start()方法后,线程处于可运行状态。在这个状态下,线程可能正在执行,也可能正在等待CPU时间片。
-
BLOCKED(阻塞):线程处于阻塞状态是因为它在等待监视器锁。例如,当线程试图进入一个synchronized代码块时,如果该锁已经被其他线程持有,那么该线程就会被阻塞。
-
WAITING(等待):线程处于等待状态是因为它正在等待其他线程采取某些操作。例如,线程调用了Object.wait()、Thread.join()或LockSupport.park()方法时,会进入等待状态。
-
TIMED_WAITING(计时等待):线程处于计时等待状态是因为它正在等待一段时间。例如,线程调用了Thread.sleep()、Object.wait()或Thread.join()方法,并指定了等待时间,会进入计时等待状态。
-
TERMINATED(终止):线程处于终止状态是因为它已经执行完毕或者因为出现了异常而终止。
3). Java中的sleep 与 wait 方法的区别是什么 。【JavaSE 多线程相关】
在Java中,sleep()和wait()方法都可以用于线程的等待,但它们有一些重要的区别。
-
sleep()方法来自Thread类,而wait()方法来自Object类。sleep()方法是静态方法,可以直接通过Thread类调用,而wait()方法必须在同步块或同步方法中调用,因为它需要在获取对象的监视器锁后才能调用。
-
sleep()方法会使当前正在执行的线程休眠指定的时间,不会释放对象的监视器锁。而wait()方法会使当前线程等待,同时会释放对象的监视器锁,直到其他线程调用notify()或notifyAll()方法来唤醒等待的线程。
-
sleep()方法可以用于任何地方,而wait()方法只能在同步块或同步方法中使用。
-
sleep()方法是线程的静态方法,它可以在任何地方使用,而wait()方法是Object类的实例方法,只能在同步代码块或同步方法中使用。
总的来说,sleep()方法是线程的静态方法,用于线程休眠一段时间,不会释放对象的监视器锁;
而wait()方法是Object类的实例方法,用于线程等待,会释放对象的监视器锁,直到其他线程通知或中断。
标签:Exception,Java,小练,面试,线程,sleep,方法,wait From: https://www.cnblogs.com/yifan0820/p/17903989.html