Java 小问题 1

在网上搜集的,自己整理了一下,分成几篇,留着以后面试前看,呵呵。

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");
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值