java-----方法

news2024/9/23 1:00:50

目录

什么是方法?

方法的作用?

方法的格式:

方法的重载:

方法的内存原理

 方法的值传递:


什么是方法?

:程序中最小的执行单元(要么全执行,要么全不执行)

public class methoddeom3 {
    public static void main(String[] args) {
        System.out.println("hello");
        System.out.println("world");
    }
}
//main方法里面的要么全执行,要么全不执行,不可能说只执行其中一句

方法的作用

 1.提高代码的复用性

 2.提高代码的可维护性

假设一个植物大战僵尸的场景,植物发射子弹的代码需要去写20行,如果寒冰射手发射子弹你写了20行,豌豆射手发射子弹你也写了20行,然后卷心菜发射子弹也写了20行,那么如果有几百个植物,你需要写先相同作用的代码几千行,这也太麻烦了。

如果你把发射炮子弹的代码封装在一个方法里,植物需要发射子弹直接调用就可以了。这样可以提高代码的复用性。如果某一天发射子弹的形式发生了变换,那么你也只用去修改发射子弹这个方法,而不是去修改几千行代码,也提高了代码的可维护性。

方法的格式:

1.最简单的方法定义和调用:

public static void 方法名(){

        打包的代码;

}

范例:

public static void playGame(){

        打印语句;

}

调用:

playGame();

2.带参数的方法定义和调用

单个参数多个参数
       格式punblic static void 方法名(参数){....}punblic static void 方法名(参数1,参数...){....}
      范例public static void method(int number){.....}punblic static void getSum(int number1,int number2){....}
       调用method(1);getSum(1,2....);

    注意:方法调用时,参数的数量与类型必须与方法定义中小括号里的变量一一对应,否则程序会报错

 3.带返回值的方法定义和调用

格式:

public static 返回值类型 方法名(参数){

        方法体;

        reuturn 返回值l

}

public static int getSum(int a,int b){

        int c=a+b;

        reutrn c;

}

三种调用方式:

1.直接调用:

 方法名(实参)

2.赋值调用:

整数类型 变量名=方法名(实参);->>>> int sum=getSum(a,b);

3.输出调用:

System.out.println(方法名(实参))

方法注意点:

1.方法不调用不执行

2.方法与方法之间时平行关系,不能互相嵌套

3.方法的编写顺序和执行顺序没有关系

4.方法返回值类型为void,表示该方法没有返回值,没有返回值可省略return

return关键字:

 1.方法没有返回值:可以省略不写。如果书写,表示结束方法

 2.方法有返回值:必须写。表示结束方法和返回结果。

return关键字后面的代码不会执行。

方法的重载:

形参:方法定义中的参数

实参:方法调用的参数

public static int getSum(int a,int b){//这里的a,b是形参,我的理解就是要传递这种形式(这里是int)的参数

        int c=a+b;

        reutrn c;

}

getSum(1,2);//这里的参数是实参,就是实际传递的参数

注意:方法调用时,形参和实参要保持一致

什么是方法重载?

同一类当中,方法名相同,参数不同的方法。与返回值无关

参数不同指以下三种

        1.参数类型不同

        2.参数个数不同

        3.参数顺序不同

方法的内存原理

栈:方法运行时使用的内存,比如main运行,进入方法栈中执行

堆:存储对象或者数组,new来创建的,都存储在堆内存

下面图可以看到,main方法先进栈,然后eat()进栈,eat()方法又调用了study()方法,因为栈遵循先进后出,所以study()会先被调用,打印出学习。

new出来的都是引用数据类型,下面内存图可以看到main方法创建了一个数组,数组定义在了栈内存里,然后在堆内存开辟了一个新的空间,存储数组的具体值,并把数组的地址赋值给了arr,其实堆内存的arr存储的只是对这个数组地址,只是引用。

 方法的值传递:

正好在这里介绍值传递,正好告诉大家java只有值传递,没有引用传递,可是有人又会问了,方法传递一个对象,并对其进行改变,最后对象发生了改变,这不是引用传递吗?我们来看几个例子来解决这个问题

我们将一个基本数据类型传递到方法中,然后修改形参的值,然后打印最终的结果,发现形参改变了实参并没有发生改变。这符合值传递。

再看这个非基本数据类型,我们这个非基本类型传递给方法,然后修改形参中的name属性,然后打印结果,发现实参中的值发生了改变,这么看起来好像java也符合引用传递。

那让我们再来看一个例子:

这里我们把非基本类型传递给方法之后,然后修改通过创建一个新的对象修改形参的值,可以发现这了形参和实参就互不影响。那么到底是怎么回事?让我们来看一下内存进行理解

其实,当我们传递基本类型时,只是创建了一个副本给方法,然后该方法对其进行修改,这样并不会互相影响。

对于非基本数据类型:

这里在传递时,也只是创建了一个引用副本,当我们在形参中不创建的新的对象,形参和实参指向的其实都是同一个对象,所以修改对象属性,会让大家感觉像是引用传递。那么当在形参中创建一个新的对象时:

这时,形参创建了一个新的引用对象,那么他们指向的对象就不同了,这样形参实参的修改也不会互相影响。

所以,java只支持值传递。

内容整理自:

​​​​​​​黑马程序员Java零基础视频教程_上部(Java入门,含斯坦福大学练习题+力扣算法题和大厂java面试题)_哔哩哔哩_bilibili

【每天一个技术点】Java到底是值传递还是引用传递?_哔哩哔哩_bilibili

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

旧系统迁移新框架:FastAPI 的 WSGIMiddleware 让过程变得简单

在现代 Web 开发中,我们经常需要将新的技术与现有的系统整合。FastAPI,作为一个现代、快速(高性能)的 Web 框架,提供了与 WSGI 应用集成的能力,这使得 Django、Flask 等传统 Python Web 框架可以与 FastAPI…

五种数据库特性对比(Redis/Mysql/SQLite/ES/MongoDB)

做后端开发的程序员基本都要学会数据库的相关知识。 1、关系型数据 今天就着这段时间了解大模型的事需要牵扯到是我们接触最多的、也是入门后端必学的关系型数据库。在关系型数据库中,数据以表的形式进行组织和存储,每个表就像一个 Excel 表格&#xf…

Python学习——【4.4】数据容器(序列)的切片

文章目录 【4.4】数据容器(序列)的切片一、了解什么是序列二、掌握序列的切片操作 【4.4】数据容器(序列)的切片 一、了解什么是序列 序列是指:内容连续、有序,可使用下标索引的一类数据容器。 列表、元组…

CSS 的继承性、层叠性与权重问题解析

目录 非 VIP 用户可前往公众号进行免费阅读 继承性 层叠性 CSS的权重问题 如果权重一样,以后出现的为准 以权重大的为准 没有选中,权重为0,就近原则 权重只和css顺序有关 非 VIP 用户可前往公众号进行免费阅读 CSS 的继承性、层叠性与权重问题解析本文主要介绍了 C…

EnvironmentError: [Errno 28] No space left on device - 完美解决方法

🚨EnvironmentError: [Errno 28] No space left on device - 完美解决方法💡 🚨EnvironmentError: [Errno 28] No space left on device - 完美解决方法💡摘要引言正文1. 错误解析:为什么会出现“No space left on dev…

html实现TAB选项卡切换

<!DOCTYPE html> <html> <head> <title>选项卡示例</title> <style> .tabs { overflow: hidden; /* 防止选项卡溢出容器 */ border: 1px solid #ccc; background-color: #f1f1f1; } .tab-links { margin: 0; padding: 0; l…

c++----io流

提示&#xff1a;以下 是本篇文章正文内容&#xff0c;下面案例可供参考 1.标准io流 (1)数据的循环输入 对于内置类型&#xff1a;cin和cout直接使用&#xff0c;c已经重载了 (2)对于自定义类型&#xff1a; 需要我们自己对类型进行重载 2.文件io流 ifstream ifile(只输入…

JavaEE: 深入探索TCP网络编程的奇妙世界(四)

文章目录 TCP核心机制TCP核心机制四: 滑动窗口为啥要使用滑动窗口?滑动窗口介绍滑动窗口出现丢包咋办? TCP核心机制五: 流量控制 TCP核心机制 上一篇文章 JavaEE: 深入探索TCP网络编程的奇妙世界(三) 书接上文~ TCP核心机制四: 滑动窗口 为啥要使用滑动窗口? 之前我们讨…

鸿蒙next 带你玩转鸿蒙拍照和相册获取图片

前言导读 各位网友和同学&#xff0c;相信大家在开发app的过程中都有遇到上传图片到服务器的需求&#xff0c;我们一般是有两种方式&#xff0c;拍照获取照片或者调用相册获取照片&#xff0c;今天我们就分享一个小案例讲一下这两种情况的实现。废话不多说我们正式开始 效果图…

Linux 环境永久更换国内pip镜像源地址

1、PYPI国内源路径 &#xff08;清华镜像地址&#xff09; https://pypi.tuna.tsinghua.edu.cn/simple/ &#xff08;中科大镜像地址&#xff09;或者 https://pypi.mirrors.ustc.edu.cn/simple/ &#xff08;阿里云镜像地址&#xff09;或者 https://mirrors.aliyun.com/py…

240922-局域网内通过SSH与SFTP访问RHEL服务器

要通过SFTP&#xff08;安全文件传输协议&#xff09;在局域网内访问一台RHEL服务器&#xff0c;您需要确保以下步骤都已经正确完成&#xff1a; A. 在RHEL服务器上配置SFTP服务 RHEL默认通过sshd服务提供SFTP功能&#xff0c;SFTP使用SSH协议进行文件传输&#xff0c;因此需要…

JAVA自助高效安全无人台球茶室棋牌室系统小程序源码

​探索“自助高效安全无人台球茶室棋牌室系统”的奇妙之旅 &#x1f3b1;&#x1f375;&#x1f3b2; &#x1f50d; 初见惊艳&#xff1a;未来娱乐新体验 &#x1f50d; 走进这家无人值守的台球茶室棋牌室&#xff0c;第一感觉就像是穿越到了未来&#xff01;没有繁琐的前台登…

tornado

Tornado通过使用非阻塞网络1/0&#xff0c;可以扩展到数以万计的开放链接&#xff0c;非常适合 长时间轮询&#xff0c;WebSockets和其他需要与每个用户建立长期连接的应用程序。 特点 注重性能优越&#xff0c;速度快解决高并发异步非阻塞websockets 长连接内嵌了HTTP服务器…

jdk11特性介绍

JDK 11&#xff08;也称为Java 11&#xff09;是Java平台的一个重要版本&#xff0c;它引入了许多新特性和改进&#xff0c;旨在提高开发者的生产力和Java平台的性能。以下是一些JDK 11的主要特性&#xff1a; 局部变量类型推断&#xff08;Local-Variable Syntax for Lambda P…

VMWare虚拟机安装CentOS-7-x86_64-DVD-1611操作系统

VMWare虚拟机安装CentOS7操作系统 1、虚拟机准备打开VMware单机创建新的虚拟机典型与自定义安装选择虚拟机硬件兼容性选择安装程序光盘映射文件(iso)选择客户机操作系统命名虚拟机处理器配置内存配置网络连接类型I/O类型选择磁盘类型选择磁盘指定磁盘的最大磁盘大小磁盘名称我们…

【Python报错已解决】TypeError: ‘<‘ not supported between instances of ‘str‘ and ‘int‘

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

element-ui 日期选择器禁用某段特定日期

element-ui 日期选择器设置禁用日期 效果图如下: 2024-09-01 到2024-09-18之间的日期都不可选 2024-01-01之前的日期都不可选 官方文档中 picker-options 相关的介绍 实现功能: ​ 某仓库有限制最大可放置资产数量,且资产出借和存放都有记录。由于线下仓库资产出借和购…

Card View 卡片视图

Goto 数据网格和视图入门 Card View 卡片视图 The Card View displays data records as cards, arranged down and then across. Card fields are always arranged in a single column. The Card View is represented by the CardView class. Card View &#xff08;卡片视图…

2024 SNERT 预备队招新 CTF 体验赛-Web

目录 1、robots 2、NOF12 3、get_post 4、好事慢磨 5、uploads 6、rce 7、ezsql 8、RCE 1、robots robots 协议又叫爬虫协议&#xff0c;访问 robots.txt 继续访问 /JAY.php 拿到 flag&#xff1a;flag{hello_Do_YOU_KONw_JAY!} 2、NOF12 F12 和右键都被禁用 方法&#…

[Linux]用户管理指令

开机/重启/登录/注销 进入xhsell 或者虚拟系统中, 右键桌面打开终端, 在终端执行命令, 重启或关机linux系统 建议使用普通账号登录, 如果权限不够时, 使用 su - 用户名 命令切换到超管, 然后再使用 logout命令退回到普通账号, logout 不能在图形界面的终端中使用 用户管理 Li…