这是什么类型的Java构造函数调用?

Ang*_*elo 6 java constructor overriding

我从来没有遇到过这样的事情,我不知道这种类型的编码!这是什么?(我对Java很新)

DefaultHandler handler = new DefaultHandler() {

            boolean bfname = false;
            boolean blname = false;
            boolean bnname = false;
            boolean bsalary = false;

            public void startElement(String uri, String localName,String qName, 
                    Attributes attributes) throws SAXException {

                // code

            }

            public void endElement(String uri, String localName,
                    String qName) throws SAXException {

                // code

            }

            public void characters(char ch[], int start, int length) throws SAXException {

                // code
        };
Run Code Online (Sandbox Code Playgroud)

构造函数调用后有一个大括号(!?),似乎有一些方法的重写.然后用分号终止支架.在构造函数调用之后我从未见过大括号.这是正常的吗?怎么称呼?谢谢!

ps:在Eclipse上,如果我删除分号,则表示LocalVariableDeclarationStatement错误.

Mar*_*ers 5

这是一个匿名课程.

当您想要创建一个派生自另一个类或接口的类但您不需要在代码中的任何其他位置使用新类时,匿名类可能很有用.

匿名类最优雅的一点是它们允许您在需要的地方准确定义一次性类.此外,匿名类具有简洁的语法,可以减少代码中的混乱.

在特定情况下的DefaultHandler类是实现多个接口(一个辅助类EntityResolver,DTDHandler,ContentHandler,ErrorHandler)通过提供什么也不做的方法.我们的想法是,您可以从此类派生并仅覆盖您需要的特定方法.这比直接实现接口的代码少得多,因为那时您需要为每个方法提供定义,包括您不打算使用的方法.


des*_*tan 5

这是匿名类定义.DefaultHandler是一个接口,没有实现,您在创建实例时就在那里创建一个.

因为DefaultHandler它是一个接口,它需要一个实现DefaultHandler接口的类对象.但是如果没有这样的类或者你需要一个不同的类,你可以通过在移动中实现接口来创建满足此要求的对象.