实例解析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首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?