实例解析Java中的构造器初始化
发布时间 - 2026-01-11 03:15:23 点击率:次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
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】
如何在云虚拟主机上快速搭建个人网站?
如何打造高效商业网站?建站目的决定转化率
Laravel Blade模板引擎语法_Laravel Blade布局继承用法
Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】
个人摄影网站制作流程,摄影爱好者都去什么网站?
Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】
Laravel API资源类怎么用_Laravel API Resource数据转换
作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】
Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】
千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】
Python数据仓库与ETL构建实战_Airflow调度流程详解
Linux系统运维自动化项目教程_Ansible批量管理实战
如何在阿里云购买域名并搭建网站?
如何在橙子建站中快速调整背景颜色?
JS实现鼠标移上去显示图片或微信二维码
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】
MySQL查询结果复制到新表的方法(更新、插入)
专业商城网站制作公司有哪些,pi商城官网是哪个?
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
LinuxCD持续部署教程_自动发布与回滚机制
HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】
Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧
Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南
HTML 中如何正确使用模板变量为元素的 name 属性赋值
Laravel如何使用模型观察者?(Observer代码示例)
Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势
Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率
敲碗10年!Mac系列传将迎来「触控与联网」双革新
高端建站如何打造兼具美学与转化的品牌官网?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
JavaScript如何实现倒计时_时间函数如何精确控制
Laravel怎么生成URL_Laravel路由命名与URL生成函数详解
如何在云主机上快速搭建网站?
如何在云主机上快速搭建多站点网站?
如何实现建站之星域名转发设置?
SQL查询语句优化的实用方法总结
深圳网站制作培训,深圳哪些招聘网站比较好?
详解vue.js组件化开发实践
Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践
如何在IIS中新建站点并配置端口与物理路径?
Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID
免费视频制作网站,更新又快又好的免费电影网站?
Laravel如何使用withoutEvents方法临时禁用模型事件
标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析
Python自然语言搜索引擎项目教程_倒排索引查询优化案例
Python高阶函数应用_函数作为参数说明【指导】
大连网站制作公司哪家好一点,大连买房网站哪个好?
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?

