02 JavaSE--方法、对象及其三大特征

1. 方法

1.1 方法执行时的内存变化:

  • 方法只定义不调用是不会分配内存的。只是方法的字节码指令存储在元空间中。
  • 方法在调用的瞬间,会给该方法分配内存空间,会在栈中发生压栈动作。每个方法都会有自己的空间,这个空间称为栈帧
  • 栈帧中主要包括:局部变量表,操作数栈等。
  • 方法执行结束之后,给该方法分配的内存空间全部释放,此时发生弹栈动作。

在这里插入图片描述

1.2 overload 方法重载

  • 方法重载是编译阶段的一种机制(静态多态)
  • 什么情况下构成方法重载?
    • 在同一个类中,且
    • 方法名相同,且
    • 参数列表不同(类型或顺序或个数不同都算不同)
  • 什么时候考虑方法重载?
    在同一个类中,如果功能相似,建议使用方法重载。
// 想使用哪个方法,只要传对参数就行,不必强行给两个功能一样的函数起不同名字.// 加两个整数public int add(int a, int b) {return a + b;}// 加两个浮点数public double add(double a, double b) {return a + b;}

1.3 override 重写方法

1.4 值传递和引用传递

  • Java 本质上都是“值传递”。基本数据类型就是复制了具体值,引用数据类型就是复制了地址。
  • 值传递:传递对象的一个副本,即使副本被改变,也不会影响源对象,因为值传递的时候,实际上是将实参的值复制一份给形参。
  • 引用传递:传递的并不是实际的对象,而是对象的引用,外部对引用对象的改变也会反映到源对象上,因为引用传递的时候,实际上是将实参的地址值复制一份给形参。
  • 对象传递(数组、类、接口)是引用传递,原始类型数据(整形、浮点型、字符型、布尔型)传递是值传递。

但有几个需要注意的点:

  1. String 创建之后是不可变更的。
/* 该程序两次输出都是 OLD STRING
*  首先,String str = new String("OLD STRING") 后,会在字符串常量池创建一个 OLD STRING 实例* 当调用 changeString(str) 时,传递的是 str 引用的副本(实际上是值传递)。
* 即原本有一个指针 str 指向 OLD String,现在复制了一个指针 string 也指向 OLD String
* 在changeString方法内部,你创建了一个新的字符串"NEW STRING",并且让局部变量string(它是str的副本)指向这个新创建的字符串。这一操作完全不会影响到原始的str引用,因为字符串是不可变的,你不能改变str原本指向的对象的内容,只能改变string这个局部变量本身。
* 当我们执行 changeString(str);
* 其实相当于执行了 new String(changeString(str));*/public static void main(String[] args) {String str = new String("OLD STRING");System.out.println(str);changeString(str);System.out.println(str);}public static void changeString(String string) {string = new String("NEW STRING");}

2. 对象

  • 对象和引用的区别什么?

对象:new 出来的,实际存储数据的实体。
引用:是一个保存了对象内存地址的变量,可以理解为指针

  1. 第一个角度 :指针
Person person1 = new Person("Alice", 30);
Person person2 = person1;

new Person(“Alice”, 30) 创建了一个 Person 类型的对象。
person1 是一个引用,它存储了新创建对象在堆内存中的地址。
当执行 person2 = person1 时,person2 变成了第一个对象在堆内存中地址的一个副本。这意味着 person1 和 person2 现在指向同一个 Person 对象。可以看到,引用和指针几乎是同义词。

  1. 第二个角度:操作对象的工具
  • new 出来的对象,保存在堆内存
  • 但在 Java 中,程序员是不能直接操作堆内存,需要借助引用来访问堆内存。

2.1 对象的内存分析

  • new 运算符会在 JVM 的堆内存中分配空间用来存储实例变量。new 分配的空间就是 Java 对象。
  • 在 JVM 中对象创建后会有对应的内存地址,将内存地址赋值给一个变量,这个变量被称为引用
  • JVM 中的 GC 主要针对的是堆内存
    在这里插入图片描述

2.2 封装

  • 在代码上如何实现封装?
    把属性私有化,对外提供 getter 和 setter 方法。

2. this 关键字

2. static 关键字

2. 构造方法

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

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

相关文章

leetCode78. 子集

leetCode78. 子集 思路一&#xff1a;迭代法 代码 class Solution { public:vector<vector<int>> subsets(vector<int>& nums) {vector<vector<int>> res;int n nums.size();for(int i 0; i < 1 << n; i) // 1 << n 2^n{…

云仓酒庄携手央视共筑品牌新高度,酒类行业广告战略迈向新征程

随着酒类市场的日益繁荣与竞争的加剧&#xff0c;品牌宣传与推广在酒类行业中的地位愈发凸显。近日&#xff0c;云仓酒庄宣布与中视中州&#xff08;央视代理机构&#xff09;达成2024-2025年度央视广告战略合作&#xff0c;云仓酒庄副总裁周玄代表云仓酒庄签约&#xff0c;这一…

Al加码,引爆“躺平式”旅游 | 最新快讯

旅游业正迎来新的技术浪潮。 文&#xff5c;锌刻度&#xff0c;作者&#xff5c;孟会缘&#xff0c;编辑&#xff5c;李季 今年的五一&#xff0c;“微度假”“微旅行”纷纷出圈。 相较于三亚、云南等老牌旅游大热门&#xff0c;人们开始寻找一些不用“人挤人”的小众旅行目的…

Case中default的综合结果

在使用case语句时&#xff0c;不完备的case语句会导致Vivado综合时推断出锁存器。下面通过实例来详细看看各种情况下的综合结果&#xff1a; 1.完备的case语句 下述的verilog对应的电路结构是一个8选一的多路复用器&#xff1a; module case_test(input [2:0]sel,input data…

U盘提示“被写保护”无法操作处理怎么办?

今天在使用U盘复制拷贝文件时&#xff0c;U盘出现“U盘被写保护”提示&#xff0c;导致U盘明明有空闲内存却无法复制的情况。这种情况很常见&#xff0c;很多人在插入U盘到电脑后&#xff0c;会出现"U盘被写保护"的提示&#xff0c;导致无法进行删除、保存、复制等操…

【大模型应用篇7】新一代程序员需要掌握的智能体脚手架是?

大模型让智能体成为更多可能性&#xff0c; 很多公司开始押注下一轮应用形式&#xff0c;其中包括OpenAI、字节、科大讯飞、百度等公司都押注了智能体这个方向。其实&#xff0c;学习大模型到现在&#xff0c;个人也在一直想&#xff0c;大模型未来应用场景方向有哪些&#xff…

2002-2021年各地区平均受教育年限数据(分性别)(含原始数据+计算过程+计算结果)

2002-2021年各地区平均受教育年限数据&#xff08;分性别&#xff09;&#xff08;含原始数据计算过程计算结果&#xff09; 1、时间&#xff1a;2002-2021年 2、来源&#xff1a;国家统计局、统计年鉴、各省年鉴 3、指标&#xff1a;行政区划代码、地区、年份、人均受教育年…

PyTorch深度学习框架:从入门到实战

前言 学习 PyTorch 深度学习框架之前先学会深度学习和卷积神经网络 CNN &#xff0c;这样学习起来会更香嗷。 Windows系统下PyTorch的环境配置 Anaconda是什么&#xff1a; Anaconda是一个开源的Python发行版本&#xff0c;专注于数据分析领域。它包含了conda、Python等190多…

2024年好用的几款数据库管理工具

本文主要介绍几款市面上好用的几款支持多种数据库、跨平台的数据库管理工具&#xff0c;包括开源/免费/收费不同的形式。 1. Chat2DB Chat2DB 是一款自2022年9月起开源的AI驱动的数据库管理工具&#xff0c;现如今已经超过了13k的Star。由EasyExcel&#xff08;31K Star&#…

基于 Linux 自建怀旧游戏之 - 80 款 H5 精品小游戏合集

1&#xff09;简介 最近又找到了一款宝藏游戏资源分享给大家&#xff0c;包含 80 款 H5 精品小游戏&#xff0c;都是非常有趣味耐玩的游戏&#xff0c;比如 植物大战僵尸、捕鱼达人、贪吃蛇、俄罗斯方块、斗地主、坦克大战、双人五子棋、中国象棋 等等超级好玩的 H5 小游戏&…

jvm面试题30问

什么是JVM的跨平台&#xff1f; 什么是JVM的语言无关性&#xff1f; 什么是JVM的解释执行 什么是JIT? JIT&#xff1a;在Java编程语言和环境中&#xff0c;即时编译器&#xff08;JIT compiler&#xff0c;just-in-time compiler&#xff09;是一个把Java的字节码&#xff08;…

超级计算机精度理论值公式

峰值计算 FLOPS在高性能计算机集群&#xff08;超算&#xff09;上可以使用如下公式计算&#xff1a; 细分到处理器上&#xff0c;以单个 Intel Xeon Gold 6258R 举例&#xff0c;该处理器基于Cascade Lake架构&#xff0c;每个计算单元有2个FMA(fused multiply-add)&#x…