JavaBeans:JVM内存、面向对象三大特性

news/2024/3/19 11:37:04/文章来源:https://www.cnblogs.com/little-monster-lhq/p/16687181.html
  1. 内存管理:由JVM来管理

    • 堆:

      • 存储的是new出来的对象(包括实例变量、数组的元素)

      • 垃圾:没有任何引用所指向的对象

        垃圾回收器(GC)不定时到内存中清扫垃圾,回收过程是透明的(看不到的),并不一定一发现垃圾就立刻回收,通过调用System.gc()可以建议虚拟机尽快调度GC来回收

      • 实例变量的生命周期:

        • 创建对象时存储在堆中,对象被回收时一并被回收
      • 内存泄漏:不再使用的对象还没有被及时的回收,严重的泄漏会导致系统的崩溃

        • 建议:不再使用的对象应及时将引用设置为null
    • 栈:

      • 存储正在调用的方法中的局部变量(包括方法的参数)

      • 调用方法时,会在栈中为该方法分配一块对应的栈帧,栈帧中存储局部变量(包括方法的参数),

        方法调用结束时,栈帧被自动清除,局部变量一并被清除

      • 局部变量的生命周期:

        • 调用方法时存储在栈中,方法调用结束时与栈帧一并被清除
    • 方法区:

      • 存储.class字节码文件(包括静态变量、所有方法)
      • 方法只有一份,通过this来区分具体的访问对象
  2. 面向对象三大特征:

    • 封装:

      • 类:封装对象的属性的行为,作为一个整体来操作
      • 方法:封装一段特定的业务逻辑功能
      • 访问控制修饰符:封装的是具体的访问权限,保护数据的安全
    • 继承:

      • 作用:代码复用

      • 超类:所有派生类所共有的属性和行为

        接口:部分派生类所共有的属性和行为

        派生类:派生类所特有的属性和行为

      • 单一继承、多接口实现,具有传递性

    • 多态:

      • 所有对象都是多态的,通过向上造型来体现

        所有抽象方法都是多态的,通过方法的重写来体现

      • 向上造型、强制类型转换、instanceof判断

  3. String字符串类型:

    • java.lang.String类使用final修饰,不能被继承

    • String的底层封装的是一个字符数组

    • String在内存中采用Unicode编码格式,每个字符占用2个字节的空间

    • 字符串对象一旦创建,对象内容永远无法改变,但字符串引用可以重新赋值(指向新的对象)

      String称为不变对象

  4. 字符串常量池:

    • java对String字符串有一个优化措施:字符串常量池(堆中)
    • java推荐我们使用字面量/直接量(直接"")的方式来创建字符串对象,并且会缓存所有以字面量方式来创建的字符串对象到字符串常量池中,当使用相同字面量再创建对象时将会复用常量池中的对象,以减少内存开销

笔记:

  1. 内存管理:由JVM来管理

    • 堆:

      • 存储的是new出来的对象(包括实例变量、数组的元素)

      • 垃圾:没有任何引用所指向的对象

        垃圾回收器(GC)不定时到内存中清扫垃圾,回收过程是透明的(看不到的),并不一定一发现垃圾就立刻回收,通过调用System.gc()可以建议虚拟机尽快调度GC来回收

      • 实例变量的生命周期:

        • 创建对象时存储在堆中,对象被回收时一并被回收
      • 内存泄漏:不再使用的对象还没有被及时的回收,严重的泄漏会导致系统的崩溃

        • 建议:不再使用的对象应及时将引用设置为null
    • 栈:

      • 存储正在调用的方法中的局部变量(包括方法的参数)

      • 调用方法时,会在栈中为该方法分配一块对应的栈帧,栈帧中存储局部变量(包括方法的参数),

        方法调用结束时,栈帧被自动清除,局部变量一并被清除

      • 局部变量的生命周期:

        • 调用方法时存储在栈中,方法调用结束时与栈帧一并被清除
    • 方法区:

      • 存储.class字节码文件(包括静态变量、所有方法)
      • 方法只有一份,通过this来区分具体的访问对象
  2. 面向对象三大特征:

    • 封装:---------包到一起作为一个整体、保护数据的安全

      • 类:封装对象的属性的行为
      • 方法:封装一段特定的业务逻辑功能
      • 访问控制修饰符:封装的是具体的访问权限
    • 继承:-----------复用

      • 作用:代码复用

      • 超类:所有派生类所共有的属性和行为

        接口:部分派生类所共有的属性和行为

        派生类:派生类所特有的属性和行为

      • 单一继承、多接口实现,具有传递性

    • 多态:------------复用

      • 所有对象都是多态的,通过向上造型来体现

        所有抽象方法都是多态的,通过方法的重写来体现

      • 向上造型、强制类型转换、instanceof判断

  3. String字符串类型:

    • java.lang.String类使用final修饰,不能被继承

    • String的底层封装的是一个final的字符数组

    • String在内存中采用Unicode编码格式,每个字符占用2个字节的空间

    • 字符串对象一旦创建,对象内容永远无法改变,但字符串引用可以重新赋值(指向新的对象)

      String称为不变对象

  4. 字符串常量池:

    • java对String字符串有一个优化措施:字符串常量池(堆中)

    • java推荐我们使用字面量/直接量(直接"")的方式来创建字符串对象,并且会缓存所有以字面量方式来创建的字符串对象到字符串常量池中,当使用相同字面量再创建对象时将会复用常量池中的对象,以减少内存开销

      /*使用字面量来创建字符串对象时,JVM会检查常量池中是否有该对象:1)若没有,则会创建该字符串对象,并将其引用存入常量池中2)若有,则直接将常量池中的对象(引用)返回---并不会创建新的字符串对象
      */
      String s1 = "123abc"; //常量池还没有,因此创建该字符串对象,并存入常量池中
      String s2 = "123abc"; //常量池中已经有了,直接复用对象
      String s3 = "123abc"; //常量池中已经有了,直接复用对象
      //引用类型==,比较的是地址是否相同-----这是规则
      System.out.println(s1==s2); //true
      System.out.println(s1==s3); //true
      System.out.println(s2==s3); //trues1 = s1 + "!"; //创建新的字符串对象("123abc!")并将地址赋值给s1
      System.out.println(s1==s2); //false//编译器在编译时,若发现是两个字面量相连,则会直接连接好并将结果保存起来
      //如下语句相当于: String s4 = "123abc";
      String s4 = "123"+"abc"; //复用常量池中的对象
      System.out.println(s4==s2); //trueString s5 = "123";
      //因为s5是一个变量,所以在编译期并不会直接编译好
      String s6 = s5+"abc"; //创建一个新的对象存储123abc
      System.out.println(s6==s4); //false
      

补充:

  1. 成员变量是有默认值的,而局部变量是没有默认值的
  2. 面向对象:一种以对象为单位来思考、解决问题的编程思想/思路

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_6571.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PyG MessagePassing机制源码分析

PyG MessagePassing机制源码分析 Google在2017发表的论文Neural Message Passing for Quantum Chemistry中提到的Message Passing Neural Networks机制成为了后来图机器学习计算的标准范式实现。 而PyG提供了信息传递(邻居聚合) 操作的框架模型。 其中…

低成本实现webhook接收端[python]

1. Webhook是个啥 Webook本质上也是API,只不过是反向调用,即前端不主动发送请求,完全由后端推送。 简单来说,Webhook是一个接受HTTP POST或是GET,PUT,DELETE的URL,一个实现了Webhook的API提供商就是在当事件发生的时…

基于 Quartz 的调度中心

需求 服务使用集群部署(多Pod)基础服务提供调度任务注册,删除,查看的功能尽可能减少客户端的使用成本开发工作量尽可能少,成本尽可能小 基于以上的需求,设计如下,调度中心非独立部署,集成在base服务中。客…

最优化 | 一维搜索与方程求根 | C++实现

文章目录参考资料前言1. 二分法求根1.1 [a,b]区间二分法求根1.1.1 原理1.1.2 C实现1.2 区间右侧无穷的二分法求根1.3 求含根区间2. 牛顿法求根2.1 原理2.2 c实现3. 梯度下降法求根3.1 c实现4. 一维搜索的区间4.1 一般一维搜索方法4.2 黄金分割法(0.618)4…

K8s部署SpringBoot项目简单例子

目录 前言 前提条件 正文 1. 获取镜像 2. 空运行测试生成部署yaml文件 3. 修改yaml文件,增加镜像拉取策略 4. 以yaml文件的方式部署springboot项目 5. 查看部署pod的状态 6. 暴露服务端口 7.通过浏览器访问服务 前言 本文通过将一个构建好的springboot的…

Linux服务器上通过miniconda安装R(2022)

安装miniconda 下载最新版miniconda wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh安装 bash Miniconda3-latest-Linux-x86_64.sh这一步骤里我们输入完命令后会有个License要读,一行一行读的话按Enter,不想读就直接输…

【uiautomation】获取微信好友名单,可指定标签 全部

前言 接到了一个需求:现微信有8000好友,需要给所有好友发送一则一样的消息。网上搜索一番后,发现uiautomation 可以解决该需求,遂有此文。这是第一篇,获取全部好友 代码在文章末尾,自取~ 微信群发消息链接 …

一个画廊的GIF动画动作英雄从80年代和90年代

你还记得那些80年代和90年代初的动作英雄吗?比如查克诺里斯、史蒂文西格尔、西尔维斯特史泰龙、让克劳德范达姆,当然还有阿诺德施瓦辛格?意大利天才设计师DavideMazuchin&;郭美雄创建了一个图文并茂的GIF画廊,名为“过去的动作英雄”,以纪念那些年轻时的经典英雄。以…

不同vlan之间实现通信

目录: 1、单臂路由实现不同vlan间通信的原理 2、单臂路由的缺陷 3、单臂路由的配置 4、三层交换 不同vlan之间实现通信 单臂路由链路类型:交换机连接主机的端口位为access链路交换机连接路由器的的端口为trunk链路子接口:路由器的物理接口可以被划分成多个逻辑接口每个子接口…

【云原生】Kubernetes CRD 详解(Custom Resource Definition)

文章目录一、概述二、定制资源1)定制资源 和 定制控制器2)定制控制器3)Operator 介绍1、Operator Framework2、Operator 安装3、安装 Operator SDK4、Operator 简单使用4)Kubernetes API 聚合层5)声明式 APIs6&#xf…

HTML 快速入门

HTML代码是“标签化”的代码,把一个HTML文件视为一个文档,文档中有很多的标签,每一个标签也可以称为一个元素,同时每一个元素也对应一个对象,对象中有属性和方法。HTML的标签除了部分标签外,其他的都是成对…

易网防伪防窜货溯源管理系统源码

防伪防窜货和溯源系统更好用更易用,系统由PHPmysql开发,安全稳定。系统以防伪码(溯源码)为中心,可非常方便的为防伪码赋值产品信息,溯源信息。是建立防伪防窜货和溯源追踪系统的不二选择。 系统功能介绍: 一、防伪码管…

【RuoYi-Vue-Plus】学习笔记 40 - Validator(一)校验器对 Model 属性校验调用流程分析

文章目录前言参考目录框架集成1、Maven2、校验框架配置类 ValidatorConfig3、测试方法4、接口测试4.1、校验失败(参数为 null)4.2、校验成功(参数不为 null)执行流程分析InvocableHandlerMethod#invokeForRequestInvocableHandler…

来自邦卡的神奇扁平超级英雄插图

平面设计趋势正在相当大程度上动摇平面设计行业的各个方面。我们正在进入一个简单和最低限度的沟通模式的新时代,在这个时代中,平面设计似乎以最好的方式提供。 受平面设计形式的启发,法国平面设计师邦卡采用了相同的方法,创作了一系列简约、平面的超级英雄插图。这些插图涵…

自制操作系统日志——第二十二天

自制操作系统日志——第二十二天 今天,我们将继续再完善一下保护操作系统的内容,以及进一步的利用c语言显示字符串! 文章目录自制操作系统日志——第二十二天一、保护操作系统3手动强制关闭应用程序二、用c语言显示字符串API 显示窗口总结一…

vivado使用方法(初级)

文章目录1 创建新工程1.1 工程创建1.2 新建Verilog文件1.3 仿真参考1 创建新工程 1.1 工程创建 1、首先打开Vavido软件,点击Creat Project或者在File——>Project——>New里面进行新工程的创建 2、然后在弹出的界面上点击Next进入下一个界面进行项目的命名…

全站最简单 “数据滚动可视化大屏” 【JS基础拿来即用】

源码获取方式: 数据滚动大屏源码,原生js实现超级简单-Javascript文档类资源-CSDN下载原生js实现的数据滚动大屏案例,实现应该是全网最简单的,拿来直接使用即可,没有会员的小伙伴去我文章主更多下载资源、学习资料请访问…

基于Python实现的遗传算法求TSP问题

遗传算法求TSP问题 目录 人工智能第四次实验报告 1 遗传算法求TSP问题 1 一 、问题背景 1 1.1 遗传算法简介 1 1.2 遗传算法基本要素 2 1.3 遗传算法一般步骤 2 二 、程序说明 3 2.3 选择初始群体 4 2.4 适应度函数 4 2.5 遗传操作 4 2.6 迭代过程 4 三 、程序测试 5 3.1 求解…

Vue3+elementplus搭建通用管理系统实例七:通用表格实现上

一、本章内容 使用配置的方式实现表格的界面的自动生成、自动解析实体配置信息,并生成表格列、筛选项等功能,完整课程地址 二、效果预览 三、开发视频

动手实现深度学习(12): 卷积层的实现

9.1 卷积层的运算 传送门: https://www.cnblogs.com/greentomlee/p/12314064.html github: Leezhen2014: https://github.com/Leezhen2014/python_deep_learning 卷积的forward 卷积的计算过程网上的资料已经做够好了,没必要自己再写一遍。只把资料搬运到这里: http://deepl…