当创建一个类时,需要创建一种新的数据类型。获得类的对象的过程包含两个步骤。首先,必须声明该类类型的一个变量,这种声明只是一种简单声明,对计算机来讲,并没有实际的物理含义;然后,需要创建一个对象的实际物理备份,并把对于该对象的引用赋给该变量,这是通过使用new运算符实现的(new运算符可以为对象动态分配内存空间,并返回对它的一个引用,这个引用就是new分配给对象的内存地址,然后这个引用被存储在该变量中)。如下所示的一段代码: class Birthday { int year; int month; int day; } Birthday birthday; birthday = new Birthday(); 在上面这段代码中,首先定义了Birthday类,接着声明了类型为Birthday的对象birthday。在声明birthday对象之后,birthday的值为null,即它没有引用任何对象,只是单纯地做了一个声明。此时,如果对程序进行编译,就会得到一个编译错误。第二行创建了一个实际的对象,并把对于它的引用赋给birthday。现在,可以把birthday作为Birthday的对象来使用。但实际上birthday仅仅保存了实际Birthday对象的内存地址。 看到这里,可能会产生疑惑,为什么在声明基本数据类型时没有使用new运算符呢?这是因为Java的简单类型不是作为对象实现的。出于效率的考虑,简单类型是作为“常规”变量实现的。对象有许多特性和属性,Java对对象的处理不同于简单类型,对象处理的开销将远远大于处理简单类型的开销,Java能更高效地实现简单类型。 new运算符可以在运行期间动态分配Java内存,这样就可以更高效地利用内存,但内存是有限的,因此,new运算符有可能由于内存不足而无法给一个对象分配内存。如果出现在这种情况,就会发生运行时异常。随着计算机硬件的发展,现在主流PC的内存已经达到了1GB或者2GB,内存因素在变成中已经越来越不需要考虑,但当开发一些大规模的企业级应用时,出于节约资源或性能优化的原因,有时还是需要适当考虑内存的因素。