Java静态实例VS get方法
我一直在思考这些代码片段之间的区别。我知道如果您使用getInstance(下面的第二个选项),您不能设置实例字段,但还有其他区别吗Java静态实例VS get方法,java,static,singleton,instance,Java,Static,Singleton,Instance,我一直在思考这些代码片段之间的区别。我知道如果您使用getInstance(下面的第二个选项),您不能设置实例字段,但还有其他区别吗 public class MainClass { public static MainClass instance; public static void main(String[] args) { instance = new MainClass(); } public void HelloWorld() {
public class MainClass {
public static MainClass instance;
public static void main(String[] args) {
instance = new MainClass();
}
public void HelloWorld() {
System.out.println("This is a test!");
}
}
VS
使用“MainClass.instance.HelloWorld();”(第一个)和“MainClass.getInstance().HelloWorld();”(第二个)之间有什么区别
TLDR:哪一个,为什么?有什么区别
谢谢!:) 可扩展性
不同之处在于,如果您的程序对实例有许多调用,并且您希望在检索实例时更改实例的来源或执行其他操作,则可以修改
getInstance()
方法,在第一个示例中,您没有在使用实例的每个位置添加代码,而是将实例
声明为公共
,使其容易受到意外更改的影响,因此不建议使用
在第二个示例中,您已将实例
声明为私有
,使其在类外不可见,从而确保如果需要,它只能通过公共
变异器/设置器进行更改,您可以将所需的逻辑以您希望的方式进行更改。公共
当前代码易受外部人员攻击,他们可以使用新实例更改您的实例,甚至通过子类化更改自己的实例。若你们并没有必要在第一次初始化后更改实例,那个么将其设置为最终的,然后公开是好的
私人
使您免于上述问题。如果需要,为您提供更多更改实例的控制 你测试过你的代码吗?上面的代码段是instance=this上的语法错误;因为“this”不存在于静态上下文中。已修复!谢谢你的注意,马上就写下来。
public class MainClass {
private static MainClass instance;
public static void main(String[] args) {
instance = new MainClass();
}
public MainClass getInstance() {
return instance;
}
public void HelloWorld() {
System.out.println("This is a test!");
}
}