46、try{}里有一个 return 语句,那么紧跟在这个 try 后的 finally{}里的代码会不会被执行,什么时候被执行,在 return 前还是后?
会在return中间执行! try 中的 return 语句调用的函数先于 finally 中调用的函数执行,也就是说 return 语句先执行,finally 语句后执行,但 return 并不是让函数马上返回,而是 return 语句执行后,将把返回结果放置进函数栈中,此时函数并不是马上返回,它要执行 finally 语句后才真正开始返回!但此时会出现两种情况: ①、如果finally中也有return,则会直接返回并终止程序,函数栈中的return不会被完成!; ②、如果finally中没有return,则在执行完finally中的代码之后,会将函数栈中的try中的return的内容返回并终止程序; catch同try;
47、Java 语言如何进行异常处理,关键字:throws、throw、try、catch、finally 分别如何使用?
try块表示程序正常的业务执行代码。如果程序在执行try块的代码时出现了“非预期”情况,JVM将会生成一个异常对象,这个异常对象将会被后面相应的catch块捕获。 catch块表示一个异常捕获块。当程序执行try块引发异常时,这个异常对象将会被后面相应的catch块捕获。 throw用于手动地抛出异常对象。throw后面需要一个异常对象。 throws用于在方法签名中声明抛出一个或多个异常类,throws关键字后可以紧跟一个或多个异常类。finally块代表异常处理流程中总会执行的代码块。 对于一个完整的异常处理流程而言,try块是必须的,try块后可以紧跟一个或多个catch块,最后还可以带一个finally块。 try块中可以抛出异常。
48、运行时异常与受检异常有何异同?
Java提供了两类主要的异常:runtime exception和checked exception。checked 异常也就是我们经常遇到的IO异常,以及SQL异常都是这种异常。对于这种异常,JAVA编译器强制要求我们必需对出现的这些异常进行catch。所以,面对这种异常不管我们是否愿意,只能自己去写一大堆catch块去处理可能的异常。 但是另外一种异常:runtime exception,也称运行时异常,我们可以不处理。当出现这样的异常时,总是由虚拟机接管。比如:我们从来没有人去处理过NullPointerException异常,它就是运行时异常,并且这种异常还是最常见的异常之一。
https://www.zhihu.com/question/376677125
49、列出一些你常见的运行时异常?
- ArithmeticException(算术异常)
- ClassCastException (类转换异常)
- IllegalArgumentException (非法参数异常)
- IndexOutOfBoundsException (下标越界异常)
- NullPointerException (空指针异常)
- SecurityException (安全异常)
50、阐述 final、finally、finalize 的区别。
final可以用于修饰变量,方法,类,被修饰的变量的值不能被改变,被修饰的方法不能被重写,被修饰的类不能被继承,它和abstract是反义词
finally通常放在try…catch…的后面构造总是执行代码块,这就意味着程序无论正常运行还是发生异常,这里的代码只要JVM不关闭都会执行,可以将释放外部资源的代码写在finally块中
finalize:Object类的方法,Java中允许使用finalize()方法在垃圾回收器将对象从内存中清除出去之前做必要的清理工作,这个方法是由垃圾回收器在销毁对象时调用的,通过重写finalize()方法可以整理系统资源或者执行其他清理工作
51、什么时候用断言(assert)?
断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为 true。如果表达式计算为 false,那么系统会报告一个 AssertionError。它用于调试目的
https://zhidao.baidu.com/question/2319163.html
52、List、Set、Map 是否继承自 Collection 接口?
List、Set 是,Map 不是。
Map是键值对映射容器,与List和Set有明显的区别,而Set存储的零散的元素且不允许有重复元素(数学中的集合也是如此),List是线性结构的容器,适用于按数值索引访问元素的情形。
53、阐述 ArrayList、Vector、LinkedList 的存储性能和特性。
https://www.cnblogs.com/jiangyi-uestc/p/5682699.html
54、Collection 和 Collections 的区别?
1、java.util.Collection 是一个 集合框架的父接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。
2、java.util.Collections 是一个包装类。它包含有各种有关集合操作的 静态多态方法。此类 不能实例化,就像一 个工具类,服务于Java的Collection框架。 他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
55、List、Map、Set 三个接口存取元素时,各有什么特点?
https://blog.csdn.net/feiyanaffection/article/details/81394745
56、TreeMap 和 TreeSet 在排序时如何比较元素?Collections 工具类中的 sort()方法如何比较元素?
https://blog.csdn.net/at10090/article/details/100128228
57、Thread 类的 sleep()方法和对象的 wait()方法都可以让线程暂停执行,它们有什么区别?
sleep是Thread的静态native方法,可随时调用,会使当前线程休眠,并释放CPU资源,但不会释放对象锁;
wait()方法是Object的native方法,只能在同步方法或同步代码块中使用,调用会进入休眠状态,并释放CPU资源与对象锁,需要我们调用notifytifyAll方法唤醒指定或全部的休眠线程,再次竞争CPU资源.
58、线程的 sleep()方法和 yield()方法有什么区别?
sleep()方法给其他线程运行机会时,不考虑线程的优先级,因此会给低优先级的线程运行机会;yield()方法只会给相同优先级或更高优先级的线程运行机会
线程执行sleep()方法后转入阻塞(blocked)状态;执行yield()方法后装入就绪(ready)状态
sleep()方法声明抛出InterruptedException;而yield()方法没有声明任何异常
sleep()比yield()(跟操作系统CPU调度相关)具有更好的可移植性
59、当一个线程进入一个对象的 synchronized 方法 A 之后,其它线程是否可进入此对象 synchronized 方法 B?
不能。其它线程只能访问该对象的非同步方法,同步方法则不能进入。因为非静
态方法上的 synchronized 修饰符要求执行方法时要获得对象的锁,如果已经进入
A 方法说明对象锁已经被取走,那么试图进入 B 方法的线程就只能在等锁池(注
意不是等待池哦)中等待对象的锁。
60、请说出与线程同步以及线程调度相关的方法。
https://blog.csdn.net/troubleshooter/article/details/78356967