对象实例化-new & getInstance()方法
2014-02-14 11:29
169 查看
首先声明一下的是对于抽象类,要想对其实例化,只能用getInstance方法,是不能用new的.
单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。所有的客户对象共享一个单例对象。单例对象持有对自己的引用。
private Students(){}
private static Student instance = new Student();
public static Student getInstance(){
return instance;
}
从上可以看出,构造函数是私有的,而唯一公开的供我们调用一个对象的接口不是构造函数,而是一个getInstance()函数,在这里没有将构造函数设置为公有,直接new 一个对象的好处是:
这种构造对象的方式,我们一般称之为单例模式,单例模式,顾名思义,只允许一个对象存在,无论是什么时候,你构造和调用的对象都永远是那个实例。
单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类.
很明显,单例模式阻止了大量对象的生成,节省了内存,最重要的一点还是,它适用于很多需要处理资源冲突的地方.
1. new的使用:
如Object _object = new Object(),这时候,就必须要知道有第二个Object的存在,而第二个Object也常常是在当前的应用程序域中的,可以被直接调用的
2. GetInstance的使用:
在主函数开始时调用,返回一个实例化对象,此对象是static的,在内存中保留着它的引用,即内存中有一块区域专门用来存放静态方法和变量,可以直接使用,调用多次返回同一个对象。
3.两者区别对照:
大部分类(非抽象类/接口/屏蔽了constructor的类)都可以用new,new就是通过生产一个新的实例对象,或者在栈上声明一个对象 ,每部分的调用用的都是一个新的对象。
getInstance是少部分类才有的一个方法,各自的实现也不同。getInstance在单例模式(保证一个类仅有一个实例,并提供一个访问它的全局访问点)的类中常见,用来生成唯一的实例,getInstance往往是static的。
(1) 对象使用之前通过getinstance得到而不需要自己定义,用完之后不需要delete;
(2)new 一定要生成一个新对象,分配内存;getInstance() 则不一定要再次创建,它可以把一个已存在的引用给你使用,这在效能上优于new;
(3) new创建后只能当次使用,而getInstance()可以跨栈区域使用,或者远程跨区域使用。所以getInstance()通常是创建static静态实例方法的。
单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。所有的客户对象共享一个单例对象。单例对象持有对自己的引用。
private Students(){}
private static Student instance = new Student();
public static Student getInstance(){
return instance;
}
从上可以看出,构造函数是私有的,而唯一公开的供我们调用一个对象的接口不是构造函数,而是一个getInstance()函数,在这里没有将构造函数设置为公有,直接new 一个对象的好处是:
这种构造对象的方式,我们一般称之为单例模式,单例模式,顾名思义,只允许一个对象存在,无论是什么时候,你构造和调用的对象都永远是那个实例。
单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类.
很明显,单例模式阻止了大量对象的生成,节省了内存,最重要的一点还是,它适用于很多需要处理资源冲突的地方.
1. new的使用:
如Object _object = new Object(),这时候,就必须要知道有第二个Object的存在,而第二个Object也常常是在当前的应用程序域中的,可以被直接调用的
2. GetInstance的使用:
在主函数开始时调用,返回一个实例化对象,此对象是static的,在内存中保留着它的引用,即内存中有一块区域专门用来存放静态方法和变量,可以直接使用,调用多次返回同一个对象。
3.两者区别对照:
大部分类(非抽象类/接口/屏蔽了constructor的类)都可以用new,new就是通过生产一个新的实例对象,或者在栈上声明一个对象 ,每部分的调用用的都是一个新的对象。
getInstance是少部分类才有的一个方法,各自的实现也不同。getInstance在单例模式(保证一个类仅有一个实例,并提供一个访问它的全局访问点)的类中常见,用来生成唯一的实例,getInstance往往是static的。
(1) 对象使用之前通过getinstance得到而不需要自己定义,用完之后不需要delete;
(2)new 一定要生成一个新对象,分配内存;getInstance() 则不一定要再次创建,它可以把一个已存在的引用给你使用,这在效能上优于new;
(3) new创建后只能当次使用,而getInstance()可以跨栈区域使用,或者远程跨区域使用。所以getInstance()通常是创建static静态实例方法的。
相关文章推荐
- String字面值对象和构造方法创建对象的区别:String s = new String("hello")和String s = "hello";的区别
- new 对象和Class的getInstance()方法的区别?
- java 用new语句创建(实例化)对象的三种方法的性能对比
- Java中创建对象的5种方式 &&new关键字和newInstance()方法的区别
- new 对象和Class的getInstance()方法的区别?
- new 对象和Class的getInstance()方法的差别?
- 为什么不使用工厂模式,以new Class的方式实例化对象并调用方法不利于项目升级的维护
- "此数据库没有有效所有者,因此无法安装数据库关系图支持对象"的解决方法
- 【thinkphp3.x】thinkphp3.x中使用A方法实例化控制器对象
- js 封装 封装new 掉对象的所有属性,只暴露出对象的方法
- 定义一个交通工具(Vehicle)的类,在测试类Vehicle中的main()中实例化一个交通工具对象,通过方法给它初始化speed,size的值,并打印出来。另外,调用加速,减速的方法对速度进行改变
- VS2013SQL语句查找出现"对象名'*'无效"解决方法
- Java中main方法中为什么不能直接创建实例化内部类对象
- javascript中使用new与不使用实例化对象的区别
- String s = new String("abc");创建了几个String对象?
- String s=new String("abc")创建了几个对象?
- String s = new String("abc");创建了几个String对象?
- ArrayList<Integer> list = new ArrayList<Integer>();在这个泛型为 Integer 的 ArrayList 中存放一个 String 类型的对象。
- JavaScript 三种创建对象的方法
- ECharts图表初级入门(三):ECharts对象的数据实例化方法汇总以及注意事项