1.初始化顺序
当Java创建一个对象时,系统先为该对象的所有实例属性分配内存(前提是该类已经被加载过了),接着程序开始对这些实例属性执行初始化,其初始化顺序是:先执行初始化块或声明属性时制定的初始值,再执行构造器里制定的初始值。 在类的内部,变量定义的先后顺序决定了初始化的顺序,即时变量散布于方法定义之间,它们仍就会在任何方法(包括构造器)被调用之前得到初始化。
class Window {
Window(int maker) {
System.out.println("Window(" + maker + ")");
}
}
class House {
Window window1 = new Window(1);
House() {
System.out.println("House()");
w3 = new Window(33);
}
Window window2 = new Window(2);
void f() {
System.out.println("f()");
}
Window w3 = new Window(3);
}
public class OrderOfInitialization {
public static void main(String[] args) {
House h = new House();
h.f();
}
}
运行结果:
Window(1) Window(2) Window(3) House() Window(33) f()
由输出可见,w3这个引用会被初始化两次:一次在调用构造器之前,一次在调用期间(第一次引用的对象将被丢弃,并作为垃圾回收)。
2.静态数据的初始化
无论创建多少个对象,静态数据都只占一份存储区域。static关键字不能应用于局部变量,因此它只能作用于域。
class Bowl {
Bowl(int maker) {
System.out.println("Bowl(" + maker + ")");
}
void f1(int maker) {
System.out.println("f1(" + maker + ")");
}
}
class Table {
static Bowl bowl1 = new Bowl(1);
Table() {
System.out.println("Table()");
bowl2.f1(1);
}
void f2(int maker) {
System.out.println("f2(" + maker + ")");
}
static Bowl bowl2 = new Bowl(2);
}
class Cupboard {
Bowl bowl3 = new Bowl(3);
static Bowl bowl4 = new Bowl(4);
Cupboard() {
System.out.println("CupBoard()");
bowl4.f1(2);
}
void f3(int maker) {
System.out.println("f3(" + maker + ")");
}
static Bowl bowl5 = new Bowl(5);
}
public class StaticInitialization {
public static void main(String[] args) {
System.out.println("created new Cupboard() in main");
new Cupboard();
System.out.println("created new Cupboard in main");
new Cupboard();
table.f2(1);
cupboard.f3(1);
}
static Table table = new Table();
static Cupboard cupboard = new Cupboard();
}
运行结果:
Bowl(1) Bowl(2) Table() f1(1) Bowl(4) Bowl(5) Bowl(3) CupBoard() f1(2) created new Cupboard() in main Bowl(3) CupBoard() f1(2) created new Cupboard in main Bowl(3) CupBoard() f1(2) f2(1) f3(1)
从某种程度上来看,初始化是一段固定执行的代码,它不能接受任何参数。因此初始化块对同一个类所有对象所进行的初始化处理完全相同。基于这个原因,不难发现初始化块的基本用法,如果有一段初始化处理代码对所有对象完全相同,且无须接受任何参数,就可以把这段初始化处理代码提取到初始化块中。
以上就是本文关于实例解析Java中的构造器初始化的全部内容,希望对大家有所帮助。
# java
# 构造器初始化
# Java基础教程之构造器与方法重载
# 通过实例了解java spring使用构造器注入的原因
# Java私有构造器使用方法示例
# Java构造器使用方法及注意事项
# Java 构造器原理及用法解析
# java 页面url传值中文乱码的解决方法
# java中文传值乱码问题的解决方法
# javascirpt实现2个iframe之间传值的方法
# java及C++中传值传递、引用传递和指针方式的理解
# Java构造器与传值学习总结
# 完全相同
# 过了
# 两次
# 会在
# 这段
# 将被
# 应用于
# 创建一个
# 只占
# 多少个
# 就可以
# 为该
# 作用于
# 加载
# 决定了
# 器里
# 程度上
# System
# println
# House
相关文章:
如何在Windows环境下新建FTP站点并设置权限?
建站VPS配置与SEO优化指南:关键词排名提升策略
零服务器AI建站解决方案:快速部署与云端平台低成本实践
怎么将XML数据可视化 D3.js加载XML
如何获取开源自助建站系统免费下载链接?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?
如何通过山东自助建站平台快速注册域名?
视频网站制作教程,怎么样制作优酷网的小视频?
如何在腾讯云服务器上快速搭建个人网站?
如何用景安虚拟主机手机版绑定域名建站?
如何通过老薛主机一键快速建站?
如何选择美橙互联多站合一建站方案?
建站之星如何修改网站生成路径?
常州自助建站费用包含哪些项目?
专业网站制作服务公司,有哪些网站可以免费发布招聘信息?
相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?
英语简历制作免费网站推荐,如何将简历翻译成英文?
宝塔建站无法访问?如何排查配置与端口问题?
青浦网站制作公司有哪些,苹果官网发货地是哪里?
建站之星展会模板:智能建站与自助搭建高效解决方案
如何快速搭建响应式可视化网站?
免费ppt制作网站,有没有值得推荐的免费PPT网站?
深圳网站制作平台,深圳市做网站好的公司有哪些?
,sp开头的版面叫什么?
如何通过免费商城建站系统源码自定义网站主题与功能?
外贸公司网站制作哪家好,maersk船公司官网?
导航网站建站方案与优化指南:一站式高效搭建技巧解析
网站制作报价单模板图片,小松挖机官方网站报价?
制作宣传网站的软件,小红书可以宣传网站吗?
如何在阿里云香港服务器快速搭建网站?
如何在Tomcat中配置并部署网站项目?
如何快速查询域名建站关键信息?
上海网站制作开发公司,上海买房比较好的网站有哪些?
如何零基础开发自助建站系统?完整教程解析
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
如何快速搭建高效香港服务器网站?
网站微信制作软件,如何制作微信链接?
唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?
如何在阿里云通过域名搭建网站?
如何在IIS中新建站点并配置端口与IP地址?
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
建站之星手机一键生成:多端自适应+小程序开发快速建站指南
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
建站之星后台管理系统如何操作?
青岛网站建设如何选择本地服务器?
html制作网站的步骤有哪些,iapp如何添加网页?
相册网站制作软件,图片上的网址怎么复制?
*请认真填写需求信息,我们会在24小时内与您取得联系。