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