Java初始化块

问题描述:

有人可以帮我理解下面的构造吗?我无法理解这是初始化程序还是匿名类。我不熟悉这个语法。Java初始化块

JTable jt = new JTable(data, fields) **{ 
      public TableCellRenderer getCellRenderer(int row, int column) { 
       // TODO Auto-generated method stub 
       return renderer; 
      } 
     };** 
+0

可能的重复 - http://*.com/questions/6432545/is-this-a-variation-of-an-anonymous-inner-class – mre

它创建了一个匿名的内部类,它扩展了JTable,并重写了getCellRenderer方法。

朗解释:

你正在创建一个扩展JTable中没有一类明确分配给它一个名称,而不是使用标准的类声明:

public class ExtendedJTable extends JTable{} 

这个类的知名度仅限于内部类它被定义和实例化。 例如,当您需要(如在发布的代码中)需要重写某个特定类(JTable)的方法(getCellRenderer())时,这对于限制于当前类上下文的某些目的非常有用。

这种方法有一些好处,也有一些限制。有关更深的讨论,请看这article

你在这里做两件事情:

  • 创建扩展JTable中的类的对象。这是一个匿名类,因为它没有在其他地方单独声明。
  • 在这个类中,覆盖了JTable的方法getCellRenderer(int row,int column);