看看你的对象是啥种,他的生命历程又是怎样的呢?

这篇具有很好参考价值的文章主要介绍了看看你的对象是啥种,他的生命历程又是怎样的呢?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

看看你的对象是啥种,他的生命历程又是怎样的呢?

1、前言

看看你的对象是啥种,他的生命历程又是怎样的呢?
看到标题满脑大大的疑问 如上图 是个什么鬼。今天我们就来介绍一下对象的类型用与区分你的对象。

2、对象的类型

2.1、数据类型

基础类型与数据类型
八种基本数据类型

int、short、float、double、long、boolean、byte、char。

对应的封装类是:

Integer、Short、Float、Double、Long、Boolean、Byte、Character。

2.2、形参和实参

从作用域上看,形参只会在方法内部生效,方法结束后,形参也会被释放掉,所以形参是不会影响方法外的.
看看你的对象是啥种,他的生命历程又是怎样的呢?

2.3、值传递和引用传递

值传递:

传递的是实际值,像基本数据类型

引用传递:

将对象的引用作为实参进行传递

java基本类型数据作为参数是值传递,对象类型是引用传递

实参是可以传递给形参的,但是形参却不能影响实参。
当进行值传递的情况下,改变的是形参的值,并没有改变实参,无论是引用传递还是值传递,只要更改的是形参本身,那么都无法影响到实参的。
对于引用传递而言,不同的引用可以指向相同的地址,通过形参的引用地址,找到了实际对象分配的空间,然后进行更改就会对实参指向的对象产生影响。
看看你的对象是啥种,他的生命历程又是怎样的呢?

对于swap1从值传递的角度来看,对象参数传递采用的是引用传递,那么type1和type2传递过来的是指向对象的引用,在方法内部,直接操作形参,交换了形参的内容,这样形参改变,都是并没有对实参产生任何影响,也没有改变对象实际的值,所以,结果是无法交换
而对于swap2,对象引用作为形参传递过来后,并没有对形参做任何的改变,而是直接操作了形参所指向的对象实际地址,那这样,无论是实参还是其他地方,只要是指向该对象的所有的引用地址对应的值都会改变。

2.4、 拆装箱

装箱就是自动将基本数据类型转换为包装器类型(int–>Integer)调用方法:Integer的valueOf(int) 方法
拆箱就是自动将包装器类型转换为基本数据类型(Integer–>int)。
调用方法:Integer的intValue方法在Java SE5之前,如果要生成一个数值为10的Integer对象,必须这样进行:Integer i = new Integer(10);
而在从Java SE5开始就提供了自动装箱的特性,如果要生成一个数值为10的Integer对象,只需要这样就可以了:

3、 Java对象的生命周期

  1. 创建阶段(Created)
  2. 应用阶段(In Use)
  3. 不可见阶段(Invisible)
  4. 不可达阶段(Unreachable)
  5. 收集阶段(Collected)
  6. 终结阶段(Finalized)
  7. 对象空间重分配阶段(De-allocated)

3.1、创建阶段(Created)

在创建阶段系统通过下面的几个步骤来完成对象的创建过程
为对象分配存储空间

  • 开始构造对象
    -从超类到子类对static成员进行初始化
    -超类成员变量按顺序初始化,递归调用超类的构造方法
    -子类成员变量按顺序初始化,子类构造方法调用
    -一旦对象被创建,并被分派给某些变量赋值,这个对象的状态就切换到了应用阶段

3.2、应用阶段(In Use)

对象至少被一个强引用持有着。

3.3、不可见阶段(Invisible)

当一个对象处于不可见阶段时,说明程序本身不再持有该对象的任何强引用,虽然该这些引用仍然是存在着的。简单说就是程序的执行已经超出了该对象的作用域了。

3.4、不可达阶段(Unreachable)

对象处于不可达阶段是指该对象不再被任何强引用所持有。
与“不可见阶段”相比,“不可见阶段”是指程序不再持有该对象的任何强引用,这种情况下,该对象仍可能被JVM等系统下的某些已装载的静态变量或线程或JNI等强引用持有着,这些特殊的强引用被称为”GC root”。存在着这些GC root会导致对象的内存泄露情况,无法被回收。

3.5、收集阶段(Collected)

当垃圾回收器发现该对象已经处于“不可达阶段”并且垃圾回收器已经对该对象的内存空间重新分配做好准备时,则对象进入了“收集阶段”。如果该对象已经重写了finalize()方法,则会去执行该方法的终端操作。
注意:不要重载finazlie()方法!因为:

  1. 会影响JVM的对象分配与回收速度 在分配该对象时,JVM需要在垃圾回收器上注册该对象,以便在回收时能够执行该重载方法;在该方法的执行时需要消耗CPU时间且在执行完该方法后才会重新执行回收操作,即至少需要垃圾回收器对该对象执行两次GC。
  2. 可能造成该对象的再次“复活” 在finalize()方法中,如果有其它的强引用再次持有该对象,则会导致对象的状态由“收集阶段”又重新变为“应用阶段”。这个已经破坏了Java对象的生命周期进程,且“复活”的对象不利用后续的代码管理。

3.6、终结阶

当对象执行完finalize()方法后仍然处于不可达状态时,则该对象进入终结阶段。在该阶段是等待垃圾回收器对该对象空间进行回收。

3.7、对象空间重新分配阶段

垃圾回收器对该对象的所占用的内存空间进行回收或者再分配了,则该对象彻底消失了,称之为“对象空间重新分配阶段”。

4 、结语

各位看官今天就到此为止,你应该知道 你不同时期写的对象是啥种了吧,对应也了解他的生命历程又是如是如何运转的了吧。此系列简要笔记后续会不断更新,🍎 欢迎关注:👍点赞🍃收藏🔥留言!
看看你的对象是啥种,他的生命历程又是怎样的呢?文章来源地址https://www.toymoban.com/news/detail-413742.html

到了这里,关于看看你的对象是啥种,他的生命历程又是怎样的呢?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java基础】Java对象的生命周期

    一个类通过编译器将一个Java文件编译为Class字节码文件,然后通过JVM中的解释器编译成不同操作系统的机器码。虽然操作系统不同,但是基于解释器的虚拟机是相同的。java类的生命周期就是指一个class文件加载到类文件注销整个过程。 一个java类的完整的生命周期会经历加载

    2024年02月12日
    浏览(30)
  • 如何控制Spring工厂创建对象的次数?详解Spring对象的生命周期!

    😉😉 学习交流群: ✅✅1:这是孙哥suns给大家的福利! ✨✨2:我们 免费分享 Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 🥭🥭3:QQ群:583783824   📚📚  工作微信:BigTreeJava 拉你进微信群,免费领取! 🍎🍎4:本文章内容出自上述:Spring应用课程!💞💞

    2024年02月05日
    浏览(25)
  • JVM-JVM中对象的生命周期

    申明:文章内容是本人学习极客时间课程所写,文字和图片基本来源于课程资料,在某些地方会插入一点自己的理解,未用于商业用途,侵删。 原资料地址:课程资料 对象的创建 常量池检查 :检查new指令是否能在常量池中定位到这个类的符号引用,检查类之前是否被加载过

    2024年02月20日
    浏览(34)
  • Listener监听器----HttpServletRequest对象的生命周期监听器

    一、HttpServletRequest对象的生命周期监听器         ServletRequestListener接口定义了ServletRequest(是HttpServletRequest接口的父接口类型)对象生命周期的监听行为。 void requestInitialized(ServletRequestEvent sre)         HttpServletRequest对象创建后会触发该监听器方法,并将已创建HttpServletR

    2024年01月23日
    浏览(47)
  • Bean的生命周期揭秘:从诞生到消亡,一个对象的壮丽演绎!

    大家好,我是你们的小米。今天我要给大家揭秘一下Java开发中重要的概念——Spring Bean的生命周期。作为Java开发者,无论是在面试还是实际工作中,了解Bean的生命周期都是必备的知识点。让我们一起来深入了解吧!     在开始讲解生命周期之前,我们先来了解一下Spring Be

    2024年02月05日
    浏览(78)
  • 装饰器模式:让你的对象变得更强大

    在日常开发中,当需要给一个现有类添加附加职责,而又不能采用生成子类的方法进行扩充时。例如,该类被隐藏或者该类是终极类或者采用继承方式会产生大量的子类。这时候,我们该怎么办呢?我们可以使用装饰器器模式来解决这个问题, 本文将从以下四个方面讲解装饰

    2024年02月10日
    浏览(28)
  • 【FFI】N-API的JS堆对象生命周期管理

    N-API 是 Node API 的简写,同时也是 nodejs 的 JS VM (链)接入原生模块 .node 文件的 应用程序二进制接口 (i.e. ABI) 。借助 N-API 引入的抽象隔离,升级 nodejs 运行时(虚拟机) 【编译】不要求对原生扩展模块 重新编译  — 为 nodejs 的不同版本分别准备不同的原生模块 build 真的好麻

    2024年02月04日
    浏览(22)
  • 创建javaEE项目(无maven),JSP(九大内置对象)、Servlet(生命周期)了解

    1.创建一个普通的java项目 2.项目根目录右键,添加模板 3.配置tomcat服务器 4.配置项目tomcat依赖         用户通过浏览器发送一个请求,服务器tomcat接收到后,解析web.xml配置文件进行分析执行接口对应的类;         Tomcat服务器支持:支持Servlet规范。而要想让它能找到

    2024年02月05日
    浏览(34)
  • Spring IOC之对象的创建方式、策略及销毁时机和生命周期且获取方式

    目录 一、对象的创建方式 1. 使用构造方法 2. 使用工厂类方法 3. 使用工厂类的静态方法 二、对象的创建策略 1. 单例策略 2. 多例策略 三、对象的销毁时机 四、生命周期方法 1. 定义生命周期方法 2. 配置生命周期方法 3. 测试 五、获取Bean对象的方式 1. 通过id/name获取 2. 通过类

    2024年02月01日
    浏览(30)
  • NC54585 小魂和他的数列

    题目链接 题目描述 一天,小魂正和一个数列玩得不亦乐乎。 小魂的数列一共有n个元素,第i个数为Ai。 他发现,这个数列的一些子序列中的元素是严格递增的。 他想知道,这个数列一共有多少个长度为K的子序列是严格递增的。 请你帮帮他,答案对998244353取模。 对于100%的数

    2024年02月02日
    浏览(20)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包