1. 谈谈final, finally, finalize的区别
final | finally | finalize |
---|---|---|
是修饰符 | 在try catch中和switch中使用 | 是一个方法,在垃圾收集器将对象从内存中清除出去之前做必要的清理工作 |
修饰变量或方法:可以保证它们在使用中不被改变。变量被修饰必须赋予初值,方法不能被重载。 | ||
修饰类:不能被继承,所以一个类不能和abstract同时使用 |
2. HashMap和Hashtable的区别
都是Map接口的类,都是以键值对的形式存储
HashMap | Hashtable |
---|---|
无序的 | 无序的 |
允许一个 null 键和多个 null 值 | 不允许 null 键和 null 值 |
是Map的异步实现,是线程不安全的 | 是Map的同步实现,所以是线程安全的 |
3.String s = new String(“xyz”);创建了几个String Object?
两个对象,一个是new String的时候创建的对象,一个是String s的时候创建的对象,后一个对象会指向前一个对象
4. sleep() 和 wait() 有什么区别?
sleep | wait | |
---|---|---|
出身 | sleep方法属于Thread类中的静态方法 | wait属于Object的成员方法 |
定义 | 让某个线程停止一段时间 | wait()是线程交互时,如果某个对象调用了wait(),则该线程就会被暂停 |
唤醒 | 时间到了之后不一定会马上进入运行状态,其他线程可能正在运行,恢复线程需要点时间 | 一旦一个对象调用了wait方法,必须要采用notify()和notifyAll()方法唤醒该线程 |
共同点:在sleep/wait的过程中有可能被其他对象调用它的interrupt(),产生InterruptedException异常,如果你的程序不捕获这个异常,线程就会异常终止,进入TERMINATED结束状态,如果你的程序捕获了这个异常,那么程序就会继续执行catch语句块(可能还有finally语句块)以及以后的代码。
5.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
short s1 = 1; s1 = s1 + 1 错误,因为s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确。