转载:Java中对象的生命周期

(1) 对象生命周期的开始java

             对象生命周期开始时,须要为对象分配内存(在内存运行时数据区的堆区中为对象分配内存),而且初始化它的实例变量;函数

           对象生命周期结束ui

             Java虚拟机的垃圾回收线程回收对象的内存,通常只要Java程序中没有变量引用某个对象,该对象的生命周期结束,所以能够经过控制变量的生命周期来控制对象的生命周期。this

 

  (2) 建立一个对象指建立一个类的实例,前提是类被初始化,对象能够被显式或者隐式建立,显式建立对象有如下几种方式spa

           a. new语句建立对象.net

           b.利用反射机制,调用java.lang.Class的forName()(获得java.lang.Class对象的实例)和java.lang.reflect.Constructor的newInstance()方法(获得该类的对象的实例)命令行

             

[java] view plaincopy线程

  1. Class objClass = Class.forName("Customer");  orm

  2. Customer c = (Customer)objClass.newInstance();  对象

           c.调用对象的clone()方法(clone()方法没有调用构造函数,建立一个复制的对象,属性与原对象彻底相同,保存在不一样的内存地址中)

           d.运用反序列化方法,调用java.io.ObjectInputStream类的readObject()方法

  (3)使用new或者反射的方法时,会执行类的构造函数,使用对象的clone方法,不会调用构造函数。

  (4)关于clone()

          a. Object类中声明为protected类型,若是Object的子类想对外公开clone()方法,须要扩大访问权限;

          b. 使用clone()方法须要实现Cloneable接口;

          c.调用clone()方法会建立一个复制的对象,这个对象和原来的对象具备不一样的内存地址,可是他们的属性值相同;

  (5)隐式地建立对象

          a. java命令的命令行参数

          b. String类型的直接数对应一个String对象

          c. 字符串操做符“+”结果为一个新的String对象

          d. JVM加载类时,建立的Class类型的对象

  (6)建立对象的步骤(无论以何种方式建立对象,步骤都有如下三步)

          a.分配内存

          b.将实例变量初始化为默认值

          c.初始化对象为正确的值

    (7)根据对象建立方式的不一样 ,初始化有如下三种方式

          a.clone,直接用源对象的属性初始化新对象的属性值

          b.若是对象的声明语句中显式初始化,则先进性显式初始化,接着再执行构造函数

 

(8)构造方法的定义

         a.方法名与类名相同

         b.没有返回类型

         c.不可以用static(构造函数和实例相关),final(构造函数不可以被继承,所以不可以被重写,定义成final画蛇添足),synchronized,native(不提倡调用本地方法,不然平台相关),abstract(构造函数不能被覆盖,所以不可以是abstract类型)修饰

(9)构造函数能够重载,能够在一个构造函数中经过this调用另一个构造函数

(10)this的使用

          a.必须做为第一条语句出现

          b.只能在构造函数中经过this调用其余构造方法,不可以在实例方法中经过this调用构造方法,可是能够经过this调用其余的成员

          c.不可以经过方法名调用构造函数

(11)默认构造方法(定义就是,没有参数的方法叫作默认构造方法)

         a.没有参数的构造方法

         b.有两种,一种是隐式构造方法,有java提供,另一种是在程序中显式定义默认构造方法,只要没有参数就好了

         c.若是一个类中的全部构造函数都有参数,那么这个类就没有默认构造方法,若是一个类中有显式定义默认构造方法,那么这个类就没有隐式默认构造方法

(12)构造方法不可以被继承(因此没必要定义成为final或者abstract类型的)

(13)super

          a.子类的构造方法中,只可以经过super调用父类的构造方法,不可以经过方法名调用;

          b.做为子类构造方法的第一句;

(14)若是父类没有默认构造方法(全部的方法都有参数),子类没有使用super或者super中没有参数,则会出现编译错误

(15)构造方法能够有private,protected,public和默认四种访问级别

(16)关于private的构造方法

          只可以在当前类中访问

          a.当前类中的其余构造方法经过this访问

          b.当前类中的成员方法经过new访问

构造方法能且仅能经过this调用类中的其余构造方法,成员方法能且仅能经过new调用类中的构造方法

(17)什么时候将构造函数定义为private:

          a.类的全部方法都是静态方法,无需建立类的实例就能够调用静态方法

          b.禁止类被继承,且不容许建立类的实例

(18)private构造方法vsfinal类(建立实例方买呢)

         前者既不容许建立类的实例,又不容许类被继承

         后者能够经过new建立类的实例,但不容许类被继承

()private构造方法vsabstract类

      后者虽本类不可以被实例化,可是能够有实例(可是拥有子类的实例),可是但愿经过继承实现类中的抽象方法,而前者不可以被继承

相关文章
相关标签/搜索