文档章节

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

beijing_zbs
 beijing_zbs
发布于 2015/04/28 11:39
字数 1424
阅读 12
收藏 0

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

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

           对象生命周期结束

             Java虚拟机的垃圾回收线程回收对象的内存,一般只要Java程序中没有变量引用某个对象,该对象的生命周期结束,因此可以通过控制变量的生命周期来控制对象的生命周期。

 

  (2) 创建一个对象指创建一个类的实例,前提是类被初始化,对象可以被显式或者隐式创建,显式创建对象有以下几种方式

           a. new语句创建对象

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

             

[java] view plaincopy

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

  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类

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


本文转载自:http://blog.csdn.net/jbuilder3/article/details/5550753

beijing_zbs
粉丝 7
博文 150
码字总数 31629
作品 0
塘沽
QA/测试工程师
私信 提问
深入了解android平台的jni---本地多线程调用java代码

一、jni调用java对象 JNI提供的功能之一是在本地代码中使用Java对象。包括:创建一个java类对象和通过函数传递一个java对象。创建一个java类对象,首先需要得到得到使用FindClass/GetObject...

mfcai
2013/07/17
643
0
out就可以理解为System类的静态成员变量引用了PrintStream类的对象

面试题是实验室师兄面试提供的。两道题 题1:Java中System.out.print()如何理解? 查阅API文档,我们可以知道:System是Java中的一个类,而out是System类的成员 。 out属于java.io.PrintStre...

变小火
2018/06/29
0
0
Java线上应用故障排查之二:高内存占用

前一篇介绍了线上应用故障排查之一:高CPU占用,这篇主要分析高内存占用故障的排查。 搞Java开发的,经常会碰到下面两种异常: 1、java.lang.OutOfMemoryError: PermGen space 2、java.lang...

Kerry_Han
2014/10/27
315
0
java类的生命周期,从装载,链接,初始化到卸载,关键是何时卸载??

卸载 关于类的卸载,笔者在单例模式讨论篇:单例模式与垃圾回收一文中有过描述,在类使用完之后,如果有下面的情况,类就会被卸载: 该类所有的实例都已经被回收,也就是java堆中不存在该类的...

Kerry_Han
2014/09/22
273
0
聊一聊Spring中的线程安全性

Spring与线程安全 Spring作为一个IOC/DI容器,帮助我们管理了许许多多的“bean”。但其实,Spring并没有保证这些对象的线程安全,需要由开发者自己编写解决线程安全问题的代码。 Spring对每个...

SylvanasSun
2018/10/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

分布式协调服务zookeeper

ps.本文为《从Paxos到Zookeeper 分布式一致性原理与实践》笔记之一 ZooKeeper ZooKeeper曾是Apache Hadoop的一个子项目,是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它...

ls_cherish
今天
4
0
redis 学习2

网站 启动 服务端 启动redis 服务端 在redis 安装目录下 src 里面 ./redis-server & 可以指定 配置文件或者端口 客户端 在 redis 的安装目录里面的 src 里面 ./redis-cli 可以指定 指定 连接...

之渊
昨天
2
0
Spring boot 静态资源访问

0. 两个配置 spring.mvc.static-path-patternspring.resources.static-locations 1. application中需要先行的两个配置项 1.1 spring.mvc.static-path-pattern 这个配置项是告诉springboo......

moon888
昨天
4
0
hash slot(虚拟桶)

在分布式集群中,如何保证相同请求落到相同的机器上,并且后面的集群机器可以尽可能的均分请求,并且当扩容或down机的情况下能对原有集群影响最小。 round robin算法:是把数据mod后直接映射...

李朝强
昨天
4
0
Kafka 原理和实战

本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/bV8AhqAjQp4a_iXRfobkCQ 作者简介:郑志彬,毕业于华南理工大学计算机科学与技术(双语班)。先后从事过电子商务、开放平...

vivo互联网技术
昨天
24
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部