Java 可以从初始值设定项块调用实例方法吗?
我一直在复习Java,我读过“初始化程序块可以调用方法” 即使构造函数没有执行,它还能调用实例方法吗?这只是不赞成吗 编辑:我看到编译器允许这样做,所以问题是,这是一种好的、安全的做法吗?实例初始值设定项块将作为任何构造函数执行的一部分被调用。因此,您可以看到它,就像编译器将它复制到每个构造函数中一样 这使您的问题更简单:这与问“从构造函数调用实例方法是否安全?” 只要您正在调用的方法不能在子类中被重写,这是完全正确的。 因此,如果您的方法是Java 可以从初始值设定项块调用实例方法吗?,java,oop,initializer,Java,Oop,Initializer,我一直在复习Java,我读过“初始化程序块可以调用方法” 即使构造函数没有执行,它还能调用实例方法吗?这只是不赞成吗 编辑:我看到编译器允许这样做,所以问题是,这是一种好的、安全的做法吗?实例初始值设定项块将作为任何构造函数执行的一部分被调用。因此,您可以看到它,就像编译器将它复制到每个构造函数中一样 这使您的问题更简单:这与问“从构造函数调用实例方法是否安全?” 只要您正在调用的方法不能在子类中被重写,这是完全正确的。 因此,如果您的方法是private或final,则没有问题 在这些情况下,
private
或final
,则没有问题
在这些情况下,最好使用复制粘贴相同或类似代码的方法
当一个子类可以重写一个方法时,就会出现问题,因为这样您就可以从构造函数调用该方法,但子类构造函数尚未执行。该方法将尝试访问尚未初始化的字段
有关更多详细信息:基本上。不要在构造函数或实例初始值设定项中调用非final、非private方法。