对象=null new一个对象,单列和对象实例化
来源:互联网 发布:cf冰龙刷枪软件2016 编辑:程序博客网 时间:2024/06/03 21:31
String str = new String("Test"),是开辟内存放入了对象,并把它的引用赋给str。
同理,BookInfo bookinfo=null与BookInfo bookinfo=new BookInfo():前者,是声明了一个对象(的引用),jvm并没有开辟内存放入一个对象;而后者,在声明了一个对象的引用后,又把新开辟的没有存储任何有效值的对象的地址赋给了他。
同理,BookInfo bookinfo=null与BookInfo bookinfo=new BookInfo():前者,是声明了一个对象(的引用),jvm并没有开辟内存放入一个对象;而后者,在声明了一个对象的引用后,又把新开辟的没有存储任何有效值的对象的地址赋给了他。
单例
//1、单例类确保自己只有一个实例(构造方法私有化)
//2、单例类必须自己创建自己的实例。
//3、单例类必须为其他对象提供唯一的实例。
//将entry类的构造函数声明为私有的构造函数,这样我们在外部就无法通过Singleton s = new Singleton()来实例化该,因为Private生命的成员只有在该类的内部可以访问。这样可以保证类的实例只有一个(那就是在类的内部给它实例化)。
//1、单例类确保自己只有一个实例(构造方法私有化)
//2、单例类必须自己创建自己的实例。
//3、单例类必须为其他对象提供唯一的实例。
//将entry类的构造函数声明为私有的构造函数,这样我们在外部就无法通过Singleton s = new Singleton()来实例化该,因为Private生命的成员只有在该类的内部可以访问。这样可以保证类的实例只有一个(那就是在类的内部给它实例化)。
//饿汉式(常用)
public class Singleton1
{
//2.提供一个全局访问点(其实就是一个全局静态字段),外部可以通过该字段访问该类的唯一实例
//因为静态字段是属于类的,所以这样可以保证只有一个实例。
public static Singleton1 only = new Singleton1();
//1 将构造函数声明成私有的,这样可以确保在类的外部无法实例化该类(即在类的外部获取不到类的实例)
private Singleton1() {}
public static Singleton1 sing(){
return only;
}
public void put(){
}
}
懒汉式
public class Singleton1
{
//2.提供一个全局访问点(其实就是一个全局静态字段),外部可以通过该字段访问该类的唯一实例
//因为静态字段是属于类的,所以这样可以保证只有一个实例。
public static Singleton1 only = new Singleton1();
//1 将构造函数声明成私有的,这样可以确保在类的外部无法实例化该类(即在类的外部获取不到类的实例)
private Singleton1() {}
public static Singleton1 sing(){
return only;
}
public void put(){
}
}
懒汉式
懒汉式单例设计模式
* 懒汉式单例设计模式在多线程同时初始化实例的时候有线程安全问题,
* 解决的方案是,加同步锁,使用同步方法和同步代码块都能解决问题。
* 然而多线程每次都访问锁,导致效率低下,所以使用同步代码块,然后以双重判断的形式来解决每次都判断同步锁导致的效率低下问题。
* 在这里锁使用的是该类的文件字节码对象。因为获取实例的方法时静态方法,使用锁选择类文件字节码
public class singleton {
private singleton(){
}
public static singleton sing =null;
public static singleton getInstance(){
if(sing==null){
synchronized(singleton.class){
if(sing==null){
sing=new singleton();
}
}
}
return sing;
}
}
* 懒汉式单例设计模式在多线程同时初始化实例的时候有线程安全问题,
* 解决的方案是,加同步锁,使用同步方法和同步代码块都能解决问题。
* 然而多线程每次都访问锁,导致效率低下,所以使用同步代码块,然后以双重判断的形式来解决每次都判断同步锁导致的效率低下问题。
* 在这里锁使用的是该类的文件字节码对象。因为获取实例的方法时静态方法,使用锁选择类文件字节码
public class singleton {
private singleton(){
}
public static singleton sing =null;
public static singleton getInstance(){
if(sing==null){
synchronized(singleton.class){
if(sing==null){
sing=new singleton();
}
}
}
return sing;
}
}
public static void main(String[] args) {
//将entry类的构造函数声明为私有的构造函数,这样我们在外部就无法通过Singleton s = new Singleton()来实例化该,因为Private生命的成员只有在该类的内部可以访问。这样可以保证类的实例只有一个(那就是在类的内部给它实例化)。
singleton sing = singleton.getInstance();
singleton sing1 = singleton.getInstance();
Singleton1 s = Singleton1.only;
Singleton1 s1 = Singleton1.getInstance();
s.put();
s1.put();
System.out.println(s.equals(s1));
System.out.println(sing.equals(sing1));
}
//将entry类的构造函数声明为私有的构造函数,这样我们在外部就无法通过Singleton s = new Singleton()来实例化该,因为Private生命的成员只有在该类的内部可以访问。这样可以保证类的实例只有一个(那就是在类的内部给它实例化)。
singleton sing = singleton.getInstance();
singleton sing1 = singleton.getInstance();
Singleton1 s = Singleton1.only;
Singleton1 s1 = Singleton1.getInstance();
s.put();
s1.put();
System.out.println(s.equals(s1));
System.out.println(sing.equals(sing1));
}
阅读全文
0 0
- 对象=null new一个对象,单列和对象实例化
- new 出一个对象 和 = null的区别
- java创建对象时,new 出一个对象 和 = null的区别?
- 关于( 对象 对象引用 = new 对象)和(对象 对象引用 = null)的记录
- new 一个空的数组对象和a[0]=null的区别
- php中对象克隆和一个简单的单列类
- java 申明对象和new一个对象如: People peple和People people=new People()
- 直接定义一个对象和new一个对象的区别
- New 一个对象
- 使用new和反射实例化内部类对象
- 使用new和反射实例化内部类对象
- Java使用new和反射实例化内部类对象
- 对象实例化-new & getInstance()方法
- 一个对象实例化过程
- 一个对象实例化过程
- c++对象和实例化的区别(new和不用new的区别)
- C++ 对象和实例的区别,以及用new和不用new创建类对象区别
- C++ 对象和实例的区别,以及用new和不用new创建类对象区别
- JXTA第一步:HelloWorld
- HTCVive的手柄的功能键调用
- wordpress设置“固定链接”后,页面404错误的解决方法
- 选择器优先级
- 有时间要学习的框架spring boot
- 对象=null new一个对象,单列和对象实例化
- 各种运算符
- 【HDUOJ 6035】 Colorful Tree 【DFS】
- 储罐自动计量系统
- thinkphp5多级控制器及其使用
- 理解HTML语义化
- 线段树~~~~ hdu1166
- UVA 10518 How Many Calls? (递推+ 矩阵快速幂)
- javascript运行过程中的“预编译阶段”和“执行阶段”