码迷,mamicode.com
首页 > 其他好文 > 详细

2017年9月16日 new Class()和getInstance()的区别

时间:2017-09-17 00:23:29      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:ssl   system   es2017   静态   instant   iat   exce   one   报错   

new class

new关键字实际上是在heap(堆中)开辟了一块内存,而等号右边的这个对象实际上就是一个内存地址

 

getInstance()

getInstance()主要是调用类中的static静态方法而获得的对象,属于单例对象,比如Calendar类的

public static Calendar getInstance()
{
return createCalendar(TimeZone.getDefault(), Locale.getDefault(Locale.Category.FORMAT));
}

区别:

1、getInstance()比new节约开销,new()必定要在内存上开辟空间,而getInstance()则是可以把已经存在的一个引用给你

2、new ClassName()主要是普通类,而getInstance()是少部分类,多为抽象类,因为抽象类无法实例化对象

3、因为是静态方法创建,能使用的范围也不同

 1 package day12.am;
 2 
 3 import java.io.Serializable;
 4 import java.util.Calendar;
 5 import java.util.Date;
 6 import java.util.GregorianCalendar;
 7 import java.util.Locale;
 8 import java.util.TimeZone;
 9 
10 import org.omg.Messaging.SyncScopeHelper;
11 
12  abstract class A{
13      public A(){         
14      }
15      
16     abstract void aa();
17     public static A getInstance() {
18         System.out.println("我被创建了");
19         return null;
20     }
21 };
22 public class ClassLoader {
23  public static void main(String[] args) throws  ClassNotFoundException, InstantiationException, IllegalAccessException {
24      
25      /*Date类可以直接new()
26       * public class Date implements java.io.Serializable, Cloneable, Comparable<Date>{}
27       * */
28     Date date =new Date();
29     System.out.println(date);
30     /* Calendar类只能用getInstance()方法来实现创建对象
31      * 查看底层发现public abstract class Calendar implements Serializable, Cloneable, Comparable<Calendar>();
32      * Calendar类属于抽象类,是不能被直接创建的,而Calendar的底层有getInstance()的静态方法:
33      *  public static Calendar getInstance(){
34         return createCalendar(TimeZone.getDefault(), Locale.getDefault(Locale.Category.FORMAT)); }   
35      * */
36     Calendar c =Calendar.getInstance();
37     //Calendar c2 =new Calendar();
38     System.out.println(c);
39     System.out.println(c.getClass());
40     //子类 GregorianCalendar()去实现 父类Calendar()也是可以的
41     Calendar c2= new GregorianCalendar();
42     System.out.println(c2);
43   //因为newInstance()就是实例化对象,相当于还是new(),而get是写的一个方法,不属于new 对象,通过发射创建还是会报错
44 //    Calendar c2=(Calendar) Class.forName("java.util.Calendar").newInstance();
45 //    System.out.println(c2);
46     
47    //抽象类A,用getInstance()实例化
48     A a1=A.getInstance();
49     System.out.println(a1);
50     //通过反射然后用newInstance()
51 //    A a2=(A) Class.forName("day12.am.A").newInstance();
52 //    System.out.println(a2);
53     
54 }
55 }

 技术分享

2017年9月16日 new Class()和getInstance()的区别

标签:ssl   system   es2017   静态   instant   iat   exce   one   报错   

原文地址:http://www.cnblogs.com/loseheart/p/7533312.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!