[ Java学习基础 ] Java对象的创建和销毁

Posted Kevin_Zhang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[ Java学习基础 ] Java对象的创建和销毁相关的知识,希望对你有一定的参考价值。

      类实例化可生成对象,实例方法就是对象方法,实例变量就是对象属性。一个对象的生命周期包括三个阶段:创建、使用和销毁。

创建对象

创建对象包括两个步骤:声明和实例化。

1.声明

      声明对象与声明普通变量没有区别,语法格式如下:

type objectName;

其中type是引用类型,即类、接口和数组。示例代码如下:

String name;

该语句声明了字符串类型对象name。可以声明并不为对象分配内存空间,而只是分配一个引用。

2.实例化

      实例化过程分为两个阶段:为对象分配内存空间和初始化对象,首先使用new运算符为对象分配内存空间,然后再调用构造方法初始化对象。示例代码如下:

String name;
name = new String("Hello World");

代码中String("Hello World")表达式就是调用String的构造方法。初始化完成之后如下图所示:

    

空对象

      一个引用变量没有通过new分配内存空间,这个对象就是空对象,Java使用关键字null表示空对象。示例代码如下:

String name =null;
name ="Hello World";

引用变量默认值是null。当试图调用一个空对象的实例变量或实例方法时,会抛出空指针异常NullPointerException,如下代码所示:

String name =null;
//输出null字符串System.out.println(name);
//调用length()方法int len = name.length();①

但是代码运行到第①行时,系统会抛出异常。这是因为调用length()方法时,name是空对象。程序员应该避免调用空对象的成员变量和方法,代码如下:

//判断对象是否为null
if(name !=null){int len = name.length();}

提示    产生空对象有两种可能性:第一是程序员自己忘记了实例化,第二是空对象是别人传递过来的。程序员必须防止第一种情况的发生,应该仔细检查自己的代码,为自己创建的所有对象进行实例化并初始化。第二种情况需要通过判断对象非null进行避免。

避免创建不必要的对象

(1)注意String是有常量池的,它实际上是通过private final char[]来存放的,所以它是不可变的,只有第一次使用这个字符串组合的时候才进入常量池:new String("abc");实际上是有两个字符串对象,"abc"是编译期存在,它已经进入常量池了;

(2)对于Calendar这样的实例化代价较大的对象考虑尽量复用;

(3)使用自动装箱类型一定要特别小心,以免在循环中因为自动装箱而创建大量对象,能用基本类型就不要用装箱类型;

(4)小对象的创建和销毁代价是很小的,因此,使用对象池的时候一定要考虑是不是值得,使用对象池管理不当也可能造成内存泄漏。

对象销毁  

      对象不再使用时应该销毁。C++语言对象是通过delete语句手动释放,Java语言对象是由垃圾回收器(Garbage Collection)收集然后释放,程序员不用关心释放的细节。自动内存管理是现代计算机语言发展趋势,例如:C#语言的垃圾回收,Objective-C和Swift语言的ARC(内存自动引用计数管理)。

      垃圾回收器(Garbage Collection)的工作原理是:当一个对象的引用不存在时,认为该对象不再需要,垃圾回收器自动扫描对象的动态内存区,把没有引用的对象作为垃圾收集起来并释放。

 

 

 

 

 

 

 

 

 

 

以上是关于[ Java学习基础 ] Java对象的创建和销毁的主要内容,如果未能解决你的问题,请参考以下文章

Effictive Java学习笔记1:创建和销毁对象

Effective Java 学习笔记之创建和销毁对象

从使用到原理学习Java线程池

java基础:对象的销毁

从使用到原理学习Java线程池

Effective Java-创建和销毁对象