实例化类对象时,new关键字后面跟的是类的构造函数吗?

时间:2022-10-20 09:21:42
今天发现,当一个类的构造函数访问权限为包权限时,在包外竟然不能新建该类的对象!
由此引出了这个问题:new 后的类名加一个括号(例如:String str = new String("");)是调用了该类的构造函数还是 java规定实例化类对象时必须是这个格式?
如果是调用了类的构造函数,这种调用并未通过某个对象,而且构造函数也不是static的,这是否与“一切皆为对象”思想矛盾?

4 个解决方案

#1


don't understand what you say, too 高深了

#2


必须是这个格式。
这种语法两件事:为对象分配内存,调用构造方法。
不矛盾,内部还是通过对象调用的,不过语法如此设置而已。

#3


引用楼主 unbit 的回复:
今天发现,当一个类的构造函数访问权限为包权限时,在包外竟然不能新建该类的对象!
由此引出了这个问题:new 后的类名加一个括号(例如:String str = new String("");)是调用了该类的构造函数还是 java规定实例化类对象时必须是这个格式?
如果是调用了类的构造函数,这种调用并未通过某个对象,而且构造函数也不是static的,这是否与“一切皆为对象”思想矛盾?

构造函数问权限为包权限时 包外当然不能访问该类了 protected只准在本包内访问。
当用new关键字的时候的加载顺序:
 加载该该类的字节码 -->初始化静态域-->调用构造函数(对成员变量进行初始化)-->调用其他方法

#4


获益不浅,谢谢各位了!

#1


don't understand what you say, too 高深了

#2


必须是这个格式。
这种语法两件事:为对象分配内存,调用构造方法。
不矛盾,内部还是通过对象调用的,不过语法如此设置而已。

#3


引用楼主 unbit 的回复:
今天发现,当一个类的构造函数访问权限为包权限时,在包外竟然不能新建该类的对象!
由此引出了这个问题:new 后的类名加一个括号(例如:String str = new String("");)是调用了该类的构造函数还是 java规定实例化类对象时必须是这个格式?
如果是调用了类的构造函数,这种调用并未通过某个对象,而且构造函数也不是static的,这是否与“一切皆为对象”思想矛盾?

构造函数问权限为包权限时 包外当然不能访问该类了 protected只准在本包内访问。
当用new关键字的时候的加载顺序:
 加载该该类的字节码 -->初始化静态域-->调用构造函数(对成员变量进行初始化)-->调用其他方法

#4


获益不浅,谢谢各位了!