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();