Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.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_Anonymous Class - Fatal编程技术网

Java 匿名类的访问修饰符是什么';谁的构造函数?

Java 匿名类的访问修饰符是什么';谁的构造函数?,java,constructor,anonymous-class,Java,Constructor,Anonymous Class,注意:这是一个自我回答的问题。这可能是一个非常简单的问题,但我认为值得分享 假设我有一个匿名类声明: MyObject myObj1 = new MyObject() { }; 其中MyObject是: class MyObject { public MyObject() { // explicit public constructor } ... } 摘自Java语言规范(我的重点): 匿名类不能具有显式声明的构造函数。相反,为匿名类隐式声明了一个匿名构造函数

注意:这是一个自我回答的问题。这可能是一个非常简单的问题,但我认为值得分享

假设我有一个匿名类声明:

MyObject myObj1 = new MyObject() {

};
其中
MyObject
是:

class MyObject {

    public MyObject() { // explicit public constructor
    }

    ...
}
摘自Java语言规范(我的重点):

匿名类不能具有显式声明的构造函数。相反,为匿名类隐式声明了一个匿名构造函数

如果我试图获取
public
构造函数的数量:

// Number of public constructors; prints 0
System.out.println(myObj1.getClass().getConstructors().length);
它按预期打印零,即匿名构造函数不是
public

它也不是私有的,因为如果我们从定义匿名类的同一包中的不同类调用以下内容(通过传递实例
myObj1
):

它完成而不执行
IllegalAccessException


匿名类中隐式构造函数的访问修饰符是什么?

匿名构造函数的行为类似于编译器为不声明构造函数的普通类创建的。在这种情况下:

在类类型中,如果类被声明为
public
,则默认构造函数被隐式地赋予访问修饰符
public
(§6.6);如果类被声明为
受保护的
,则默认构造函数被隐式地赋予访问修饰符
受保护的
(§6.6);如果类被声明为
private
,则默认构造函数被隐式地赋予访问修饰符
private
(§6.6)否则,默认构造函数具有由无访问修饰符暗示的默认访问权限


换句话说,匿名构造函数只能在与匿名类相同的包中访问。

是什么导致您执行此调查?@dnault我只是想知道匿名类作为单例的(概念)用法,并考虑了构造函数。这有什么区别?您不能称之为@EJP触发此问题的问题涉及反射。在现实生活中,是的,我不需要叫它。
myObj1.getClass().getDeclaredConstructor().newInstance();