JAVA问题部分解决方案.docVIP

  • 3
  • 0
  • 约3.25千字
  • 约 5页
  • 2016-06-11 发布于重庆
  • 举报
JAVA问题部分解决方案

1.关窗口问题 因为WIndowListener是个接口 一个类要是实现一个借口,就必须履行接口要求他的所有职责,就是实现借口的所有方法 所以要实现所有的方法,即使是空实现也要必须去做。 不过就这个问题还有另一种相对好的解决方法,避免进行大量无用的空实现: MyJFrame window= new MyJFrame(); window.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); 这是一个适配器模式 WindowAdapter是个抽象类他实现接口WIndowListener,已经进行了所有WIndowListener的方法的空实现, 当你这样做: window.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); 这看上去像是创建了一个抽象类的对象传入方法addWindowListener 而实际上是创建了一个WindowAdapter的继承类对象,这个继承类是匿名的 就相当于: class A extends WindowAdapter { @Override public void windowClosing(WindowEvent e) { System.exit(0); } } 然后 A a=new A(); window.addWindowListener(a); 这就是Java的匿名类机制 经过这样做就把实现借口转变为继承抽象类 而我们知道,继承一个类,并不需要重写他所有的方法,所以就可以只针对你想处理的windowClosing的这个方法进行重写。 这个问题的解决其中涉及到了类的继承与接口的实现、适配器模式、匿名类机制等问题。 窗口重画时自动调用paint方法 枚举类型 5. Java 惰性初始化 热度:105 发布时间:2013-10-04 20:08:36 publicclass Lazy { privatestaticbooleaninitial = false; static { Thread t = new Thread(new Runnable() { publicvoid run() { System.out.println(befor...);//此句会输出 /* * 由于使用Lazy.initial静态成员,又因为Lazy还未初 * 始化完成,所以该线程会在这里等待主线程初始化完成 */ initial = true; System.out.println(after...);//此句不会输出 } }); t.start(); try { t.join();// 主线程等待t线程结束 } catch (InterruptedException e) { e.printStackTrace(); } } publicstaticvoid main(String[] args) { System.out.println(initial); } } 看看上面变态的程序,一个静态变量的初始化由静态块里的线程来初始化,最后的结果怎样? 当一个线程访问一个类的某个成员的时候,它会去检查这个类是否已经被初始化,在这一过程中会有以下四种情况:

文档评论(0)

1亿VIP精品文档

相关文档