五笔啊
有个方法是setAccessbile(true)可以反射到私有构造器吧.
已解决,手误
一般还是推荐使用DCL或者静态内部类单例模式
static静态变量是可以被修改的,所有只提供getInstance()方法供外界获取对象,保证变量不会被修改
新学的就去学基础吧,这个等你有基础再来。
手写呗
因为这个类在加载的时候就实例化了,就算thread1和thread2同时获取它,取到的是类加载时实例化的那个变量的值,所以说是线程安全的;而懒汉式线程不安全,因为有可能thread1在if(instance==null)判断为真时进入了if体里但又没开始实例化,而这时thread2也进来了,最终就会有2个实例了。
单线程的时候使用懒汉式,能节省一点点的内存空间,多线程的时候使用饿汉式,能防止多线程导致的错误。
老师只在类里面创建了一个实例,
我只给第一个(饿汉模式)说明一下:
1.老师先在第一步中创建一个实例:instance 要说明的是instance相当于一个人的姓名,就像刚出生的孩子我们会给他取一个称呼叫‘张三’,new的一个实例(对象)我们也要给他取一个名字叫‘instance’.那么我们就可以用instance来确定,它就是那个新建的实例。
2.然后老师在第三步给出了一个方法(这是一个静态的开放权限的方法,可以通过类名直接调用):
这个方法反回了instance(相当于人的名字,而不是那个具体的人),然后调用这个方法时,只是相当于给这个起了一个其他的代表这个人的称呼,比如相当于他的学号,但这个人还是张三。和这个道理是一样的。
java是一种面向对象的语言,基本上都按照生活中的思维方式设计的,联系生活实际就可以很轻松的入门的。
如果你懂c中的指针的话,就简单了:instance就相当于是指向新实例化对象的内存首地址,而定义的方法只是将指针传出去,而new的对象的信息还在那片内存,所以不管你在外面调用了多少次那个方法,都只是同一个实例(对象)罢了