Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这是什么类型的Java构造函数调用?_Java_Constructor_Overriding - Fatal编程技术网

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

这是什么类型的Java构造函数调用?,java,constructor,overriding,Java,Constructor,Overriding,我从来没有遇到过这样的事情,我不知道这种类型的编码! 这是什么?(我对Java相当陌生) 在构造函数调用之后,有一个大括号(!?),并且似乎覆盖了一些方法。然后大括号以分号结尾。我从未见过构造函数调用后的brake。这正常吗?它叫什么名字?谢谢大家! p、 s:在Eclipse上,如果我删除分号,它会显示LocalVariableDeclarationStatement错误。这是一个错误 当您想要创建一个从另一个类或接口派生的类,但不需要在代码中的任何其他地方使用新类时,匿名类非常有用 匿名类最

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

在构造函数调用之后,有一个大括号(!?),并且似乎覆盖了一些方法。然后大括号以分号结尾。我从未见过构造函数调用后的brake。这正常吗?它叫什么名字?谢谢大家!

p、 s:在Eclipse上,如果我删除分号,它会显示
LocalVariableDeclarationStatement
错误。

这是一个错误

当您想要创建一个从另一个类或接口派生的类,但不需要在代码中的任何其他地方使用新类时,匿名类非常有用

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


在您的特定情况下,该类是一个帮助器类,通过提供不做任何操作的方法来实现多个接口(
EntityResolver
DTDHandler
ContentHandler
ErrorHandler
)。其思想是,您可以从这个类派生并只重写您需要的特定方法。这比直接实现接口的代码要少得多,因为这样您就需要为每个方法提供定义,包括您不打算使用的方法。

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


由于
DefaultHandler
是一个接口,它需要一个实现
DefaultHandler
接口的类的对象。但是,如果没有这样的类,或者您需要一个不同的类,您可以通过在运行中实现接口来创建满足此要求的对象。

它是一个匿名内部类。用谷歌搜索“匿名java类”。它基本上是一个从接口动态创建的类。整个定义是内联指定的,请将其视为“new DefaultHandler()”部分之后的类定义。显然,此特定类定义只能在此处使用。

匿名类使用此定义

这是一个匿名类定义。它基本上是一种实现抽象类或扩展类的方法。因此,您要么实现
DefaultHandler
类,要么扩展
DefaultHandler
,这取决于
DefaultHandler
抽象类还是具体类。

我知道实现接口的类应该定义接口中声明的所有方法,我错了吗?在我的示例中,只定义了3个方法!它不是一个接口,而是一个类。检查DefaultHandler的文档。您是对的,但是
DefaultHandler
可能是一个抽象类,在这种情况下,您只需要定义抽象方法右侧。这是一门课。那么,在匿名类中有方法重写吗?谢谢。我会编辑一点你的答案来帮助其他人;)
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
        };