java对象的创建过程

(1)用new 语句创建对象,这是最常用的创建对象方法。

下面用一个简单的存在继承关系的实例的创建,来叙述对象创建过程中的细节

    概括如下:

    执行顺序:(优先级从高到低。)静态代码块>main方法>构造代码块>构造方法。

     1.静态代码块:

         * 在类中方法外出现,并加上static修饰;

       * 用于给类进行初始化,为类的属性初始化.一般用于加载驱动

       * 在类加载的时候就执行,并且只执行一次。

       * 如果类中包含多个静态代码块,那么将按照"先定义的代码先执行,后定义的代码后执行"
        
       * 静态代码块不能直接访问静态实例变量和实例方法,需要通过类的实例对象来访问。
 
    2.构造代码块:
    *直接在类中定义且没有加static关键字的代码块称为{}构造代码块。
    *构造代码块在创建对象时被调用,每次创建对象都会被调用,并且构造代码块的执行次序优先于类构造函数。
     
 class Test2_Extends {
public static void main(String[] args) {
Zi z = new Zi();
}
/*
1. jvm调用了main方法,main方法进栈,因为存在继承关系,所以父类要先加载
2. new Zi();会先将Fu.class和Zi.class分别加载进内存,再创建对象.当Fu.class加载进内存,父类的静态代码块会随着Fu.class一起加载,
当Zi.class加载进内存,子类的静态代码块会随着Zi.class一起加载
--> 第一个输出,静态代码块Fu,第二个输出静态代码块Zi
3,走Zi类的构造方法,因为java中是分层初始化的,先初始化父类,再初始化子类,所以先走的父类构造,
但是在执行父类构造时,发现父类有构造代码块,构造代码块是优先于构造方法执行的
-->所以第三个输出构造代码块Fu,第四个输出构造方法Fu
4,Fu类初始化结束,子类初始化,第五个输出的是构造代码块Zi,构造方法Zi
*/
}
class Fu {
static {
System.out.println("静态代码块Fu");
}
{
System.out.println("构造代码块Fu");
}
public Fu() {
System.out.println("构造方法Fu");
}
}
class Zi extends Fu {
static {
System.out.println("静态代码块Zi");
}
{
System.out.println("构造代码块Zi");
}
public Zi() {
System.out.println("构造方法Zi");
}
}

  (2)运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。

  以上两种方式都会显示地调用类的构造方法

 

(3)调用对象的clone()方法

(4)运用反序列化手段,调用java.io.ObjectInputStream对象的readObject()方法。

  序列化:将对象状态转化为可保持或传输的格式的过程,被序列化的对象必须implments Serializable

  反序列化:将流转化成对象的过程

  当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。

  发送方需要把这个Java对象转换为字节序列,即java对象序列,才能在网络上传送,即序列化过程;接收方则需要把字节序列再恢复为java对象,即反序列化。

最新文章

  1. 弱网测试IOS
  2. CI Weekly #1 | 这份周刊,带你了解 CI/CD 、DevOps、自动化测试
  3. HTML5 Canvas 高仿逼真 3D 布料图案效果
  4. 树莓派实现远程开机局域网电脑(WOL协议+etherwake+华硕主板Z97)秒变花生壳开机棒
  5. C#获取IP和主机名
  6. 关系型数据库与NOSQL(转)
  7. Android 文件访问权限的四种模式
  8. iOS 的 Safari 文件上传功能详解
  9. 最简的Dubbo例子部署
  10. android datepicker源码
  11. mysqli扩展库的 预处理技术 mysqli stmt
  12. [置顶] 63行代码完美实现html5 贪吃蛇游戏
  13. flex stage.width 与stage.stageWidth的区别
  14. Hadoop之运行环境搭建
  15. 20.Odoo产品分析 (三) – 人力资源板块(1) – 员工目录(1)
  16. swust oj 1075
  17. HDOJ 1023 Train Problem II
  18. C# 控件
  19. zk特性和场景
  20. Error : Weblogic Maven Plugin deployment WebLogic 12c

热门文章

  1. [论文理解] FoveaBox: Beyond Anchor-based Object Detector
  2. 在已开启Chrome窗口上调试
  3. where in 的参数化查询实现
  4. js字符串常用函数
  5. struts2数据处理的几种方式
  6. 解决 ElementTree 无法处理中文
  7. linux 基础 配置静态IP
  8. SQL server 自增主键重新从1开始
  9. super()使用方法
  10. 【转】Apache HBase 问题排查思路