在网上搜集的,自己整理了一下,分成几篇,留着以后面试前看,呵呵。
1、谈谈final, finally, finalize的区别:
final是用来定义一个常数,或者是不能overload的方法,不能继承的类。
finally是try/catch block的。
finalize :在Object类中定义,子类覆盖finalize()方法以整理系统资源或者执行其他清理工作。finalize()方法在垃圾收集器删除对象之前对这个对象调用的。
2、 Static Inner Class 与 Inner Class 有什么区别? Anonymous Inner Class 是否可以extends其它类,是否可以implements interface?
被声明为static,就不能再使用局部变量和外部类的对象。
匿名内部类是在一个表达式的地方定义一个没有名字(只给出父类名或接口名)的完整的类,不能加 static 修饰。
匿名内部类即可以通过接口扩展的创建,也可以通过继承其他类来创建;但是继承是 new ParentClass{..}的形式,没有extends。这通匿名类实现接口的定义类似: new Interface{...}匿名内部类常用于实现回调(事件驱动机制)。
具体代码可见 附件的 InnerClassSample.java,它用三种方法实现了简单事件驱动。
3、C++ 中 &和&&的区别?第一个是位运算符,第二个是逻辑运算符。 C++中true/false 与 1/0 对应时,区别在于:&会判断所有条件,&&只要有一个条件不符合就会返回false.
4、HashMap和Hashtable的区别:(谢谢 yzs10 和 CrazyDiamond )
1).Hashtable 和 HashMap 都实现了 Map(K,V),前者是 Directory 的子类,后者是AbstractMap的子类;
2.)Hashtable中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。即是说,在多线程应用程序中,不用专门的操作就安全地可以使用Hashtable了;而对于HashMap,则需要额外的同步机制。但HashMap的同步问题可通过Collections的一个静态方法得到解决:Map Collections.synchronizedMap(Map m), 这个方法返回一个同步的Map,这个Map封装了底层的HashMap的所有方法,使得底层的HashMap即使是在多线程的环境中也是安全的。
3.)在HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示HashMap中没有该键,也可以表示该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键,而应该用containsKey()方法来判断。
4.)HashTable使用Enumeration,HashMap使用Iterator。
5.)HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。
6.)哈希值的使用不同,HashTable直接使用对象的hashCode,代码是这样的:
int hash = key.hashCode();
int index = (hash & 0x7FFFFFFF) % tab.length;
而HashMap重新计算hash值,而且用与代替求模:
int hash = hash(k);
int i = indexFor(hash, table.length);
static int hash(Object x) {
int h = x.hashCode();
h += ~(h << 9);
h ^= (h >>> 14);
h += (h << 4);
h ^= (h >>> 10);
return h;
}
static int indexFor(int h, int length) {
return h & (length-1);
}5、Collection 和 Collections的区别 :
Collections是个java.util下的类,它包含有各种有关集合操作的静态方法(对各种集合的搜索、排序、线程安全化等)。
Collection是个java.util下的接口,它是各种集合结构的父接口。6、ArrayList和Vector的区别 :
同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的 ;
数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半 附件 代码 :内部类实现事件驱动的三种方法:
package events;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class InnerClassSample {
public static void main(String[] args)
{ InnerClassFrame frame = new InnerClassFrame();
frame.setVisible(true);
}
}class InnerClassPanel extends JPanel implements ActionListener{
private JButton yellowButton, blueButton, redButton;
public InnerClassPanel() {
yellowButton = new JButton("Yellow");
add(yellowButton);
blueButton = new JButton("Blue");
add(blueButton);
redButton = new JButton("Red");
add(redButton);
yellowButton.addActionListener(this); // 本类实现了ActionListener
redButton.addActionListener( new EventHandler() { // 匿名内部类,继承形式
public void actionPerformed( ActionEvent evt) {
Color color = Color.red;
setBackground(color);
repaint();
}
} );
blueButton.addActionListener( new ActionListener() { // 匿名内部类,实现接口形式
public void actionPerformed(ActionEvent evt) {
Color color = Color.blue;
setBackground(color);
repaint();
}
} );
}
public void actionPerformed( ActionEvent evt) { // 本类自己实现AE
Color color = Color.yellow;
setBackground(color);
repaint();
} class EventHandler implements ActionListener { // 定义一个实现了AE 的内部类,用于被其它匿名内部类继承
public void actionPerformed(ActionEvent evt) {
Color color = Color.yellow;
setBackground(color);
repaint();
}
}
}class InnerClassFrame extends JFrame{
private InnerClassPanel p;
public InnerClassFrame(){
setTitle("Inner Class Change BackGround");
setSize(400, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane = getContentPane();
//add panel to frame
p = new InnerClassPanel();
contentPane.add(p,"Center");
}
}