当前位置: 首页 > news >正文

JavaSE(上)-Day7

JavaSE(上)-Day7

  • 类和对象
  • 封装
  • private
  • this
  • 构造方法
  • 标准JavaBean
  • 对象的内存图
    • 执行Test类main方法生成一个User对象的内存过程
  • 基本数据类型和引用数据类型的区别
  • this的内存原理
  • 成员变量和局部变量区别

类和对象

  1. 类是设计图纸,对象是真正的实例
  2. 定义一个类后,就可以用 类名 对象名 = new 类名();创建一个对象
  3. 通过对象名.属性; 获取属性值, 通过对象名.方法名(…); 执行方法;
  4. 建议类名使用大驼峰命名法,见名知意
  5. 类中可以有很多个class类,但是只能由一个public修饰的class类,且public修饰的类名必须和文件名保持一致
  6. 类中定义的属性完整格式是 修饰符 数据类型 属性名 = 值; 在没有显式赋值时,属性是有默认值的,参考数组的默认值

封装

  1. 封装告诉我们如何正确的设计对象的属性和方法
  2. 对象是谁,就要封装他的数据,提供他的行为方法

private

  1. private是私有访问修饰符
  2. private修饰的成员只可以在本类中被访问
  3. private修饰的成员如果想要外界使用,需要对应的getter,setter方法,用于获取属性和设置属性值
  4. private为封装的对象提高了安全性

this

  1. this可用于区分成员变量和局部变量 this.成员变量是类的属性,局部变量是方法中的变量
  2. 局部变量的优先级高于成员变量

构造方法

  1. 构造方法是在创建对象的时候,由虚拟机调用的,为成员变量初始化赋值
  2. 构造方法在不写的时候,会有一个隐式的无参构造方法
  3. 构造方法一旦显式定义,不会再提供隐式的无参的构造方法,需要显式定义

标准JavaBean

  1. 类名见名知意
  2. 类名的属性用private修饰
  3. 设置对应的getter和setter方法
  4. 定义无参和全参构造方法
  5. 追加其他必要的方法

对象的内存图

  1. JDK8之前,JVM中的堆空间后跟着方法区
  2. JDK8后,JVM中的堆空间后方法区被去掉,设计出一块独立空间元空间,方法区的一部分功能划分给堆,一部分划分给元空间
  3. 字节码文件运行时,会进入元空间运行,临时存储
  4. 元空间会存储字节码文件的信息,包括了成员变量和成员方法

执行Test类main方法生成一个User对象的内存过程

  1. 执行有main方法的Test类,Test.class进入元空间临时存储
  2. main方法进栈执行
  3. User.class进入元空间临时存储
  4. 栈中开辟一个空间,名称为user
  5. 堆中开辟一个空间,拷贝元空间中User.class的成员变量和成员方法的地址
  6. 成员变量先默认初始化,整数为0,字符串为null等
  7. 成员变量然后显示初始化,如果成员变量有直接赋值操作
  8. 最后构造函数初始化成员变量
  9. 完成后,将开辟空间的地址回传给栈中user存储
  10. 打印user,显示的是地址值
  11. user.方法名() 过程是通过地址,向堆中找方法的地址,找到元空间对应的类中的方法,让方法进栈执行,执行完毕出栈
  12. 当main方法结束后,栈中的变量也随之消失,堆中的对象没有任何变量被指向,也会作为垃圾被回收
  13. 定义多个User时,字节码文件只会加载一次

基本数据类型和引用数据类型的区别

  1. 栈中基本数据类型存储的是真正的值,引用数据类型存储的是地址
  2. 基本类型给其他基本类型赋值就是真正的值,引用数据类型给其他引用数据类型赋值是地址,指向同一个堆内存空间

this的内存原理

this表示方法调用者的地址值

成员变量和局部变量区别

不同点成员变量局部变量
定义位置不同方法外类中方法中
内存存储位置不同堆内存栈内存
生命周期不同随对象创建和消失随方法调用创建和消失
初始化不同有默认值无默认值,使用需赋值
作用域整个类方法中有效
http://www.lryc.cn/news/321908.html

相关文章:

  • 记录一下在Pycharm中虚拟环境的创建
  • Python从入门到精通秘籍九
  • 善于利用window挂在全局变量
  • 《C缺陷和陷阱》-笔记(5)
  • 【数字图像处理matlab系列】保存图像
  • 八股文三(Spring、Spring Cloud Alibaba)
  • 一文带你详解天池工业数据集
  • 08 龙芯平台openstack部署搭建-neutron-controller部署
  • JAVA 100道题(6)
  • Leetcode面试经典150题
  • 王者荣耀使用的UDP通信,十几年编程没用过的协议
  • HiveQL详解
  • Linux/Bizness
  • mysql 数据库 增删改查 基本操作
  • 计算机网络——物理层(编码与调制)
  • PHP魔术方法详解
  • 游戏 AI 反作弊|内附解决方案详情!
  • elementUI组件库样式修改整理
  • 还是了解下吧,大语言模型调研汇总
  • Win11初始化系统遇一文解决
  • vr虚拟现实游戏世界介绍|数字文化展览|VR元宇宙文旅
  • kotlin 程序 编译与执行
  • Python学习:注释和运算符
  • 英伟达 V100、A100/800、H100/800 GPU 对比
  • Spark面试重点
  • UGUI源码分析与研究2-从底层实现的角度去分析和调优UI的性能问题和疑难杂症
  • OpenAI的GPT已达极限,更看好AI Agent
  • 【C/C++】详解 assert() 断言(什么是assert? assert有什么作用?)
  • [C++]20:unorderedset和unorderedmap结构和封装。
  • ARM 汇编指令:(六) B 跳转指令