Java开发——5.方法(值传递+引用传递)

简介: 方法(值传递+引用传递)

何为方法(method):完成某一个特定功能的代码块。


我们最先了解的方法,就是main方法,它主要的目的就是为了运行程序,但是main方法有别于我们书写的其他方法,我们下面将要了解的方法都不能运行,所有的方法的运行都要到main方法中。


//注:sout为System.out.println();简写修饰符返回值类型方法名(参数列表){
//代码省略... return结果; //如果是void类型,则不需要return结果,直接sout打印即可。}
//调用格式方法名();
//拿main方法开头讲解方法的定义,但是注意 main方法是有别于今天学的 方法!//public修饰符//static关键字,一般用来声明静态方法,该关键字在后续方法的声明中,可以自行决定是否保留//void 返回值类型//main方法名//():括号里面的是参数列表publicstaticvoidmain(String[] args) {
}


方法两个明确:


  • 明确参数列表

该方法在完成一个功能时,需要的参数有几个,参数的类型是什么,需要在我们明确给出的。

  • 明确返回值类型

方法的功能完成之后,是否有结果返回,如果有,使用return 将结果返回给调用者。没有返回值void

什么情况下,我们用return, 除了void以外的都要有return


案例:定义方法实现两个整数的求和计算


publicclassMethodDemo03 {
publicstaticvoidmain(String[] args) {
// 调用方法getSum,传递两个整数,这里传递的实际数据又称为实际参数        // 并接收方法计算后的结果,返回值     intsum=getSum(5, 6);
System.out.println(sum);
    }
/*定义计算两个整数和的方法返回值类型,计算结果是int参数:不确定数据求和,定义int参数.参数又称为形式参数*/publicstaticintgetSum(inta, intb) {
returna+b;
    }
}


定义方法注意事项

  • 定义位置:类中方法外,不能嵌套定义
  • 方法必须先定义,再使用
  • void表示无返回值,可以省略return,也可以单独的书写return
  • 不能在return后面写代码,return意味着方法结束,所有后面的代码记永远都不会执行,属于无效代码
  • 定义方法时()中的参数,我们称之为:形式参数/形参,在调用该方法时传递的参数,我们称之为:实际参数/实参。

//无参方法,括号里没有值,就是无参方法publicstaticvoidprint() {
System.out.println("方法被调用");
}
//有参方法,有形参的,就是有参方法publicstaticintgetSum(inta,intb) {
returna+b;
}


方法的使用场景:


  • 1.直接方法名调用;
publicstaticvoidmain(String[] args) {        
print();
}
publicstaticvoidprint() {    
System.out.println("方法被调用");
}
  • 2.获取方法的返回值,并直接赋值给变量;
//注:这种只针对有返回值的,void就没有返回值不能以这种方式赋值给变量。
public static void main(String[] args) {        
int sum = getSum(5,6);    
System.out.println(sum);
}
public static int getSum(int a,int b) { return a + b;}
  • 3.直接输出方法。
//注:这种只针对有返回值的,void就没有返回值,直接调用输出结果就行。
public static void main(String[] args) {        System.out.println(getSum(5,6));}
public static int getSum(int a,int b) { return a + b;}

方法的重载

在同一个类中,具有相同的方法名, 参数列表不同,与返回值无关。参数列表:个数不同,数据类型不同,顺序不同。

重载方法调用:JVM通过方法的参数列表的不同,实现调用不同的方法。

注:重载仅针对同一个类中方法的名称与参数进行识别,与返回值无关,换句话说不能通过返回值来判定两个方法是否相互构成重载。


//声明一个比较方法,判断传入的参数是否相同。publicclassMethodTest1 {
publicstaticvoidmain(String[] args) {
//调用方法System.out.println(compare(10, 20));
System.out.println(compare((byte) 10, (byte) 20));
    }
//int:定义不同类型的参数,进而实现方法的重载publicstaticbooleancompare(inta, intb) {
System.out.println("int");
returna==b;
    }
//bytepublicstaticbooleancompare(bytea, byteb) {
System.out.println("byte");
returna==b;
    }
}


拓展——方法的参数传递问题

值传递:(一般针对于基本数据类型)

在参数传递的过程中,原来参数值不会发生改变!

专业术语:形参的改变不会影响实参!


publicstaticvoidmain(String[] args) {
//num 就是实参:实参是定义在方法之外类之中intnum=15;
System.out.println("值传递之前:"+num);
zhiChuanDi(num);
System.out.println("值传递之后:"+num);
}
publicstaticvoidzhiChuanDi(intnumber){
//此处的number 就是形参:形参是定义在方法之中的number=150;
    }


引用传递:(一般针对引用数据类型,但是String是个特殊例子)

引用传递,底层是通过地址值进行参数的覆盖的!(会在Java开发——7.内存分配...中展开讲述)所以引用传递会改变参数。

注:String虽然是引用数据类型,但是String的底层实现是个值传递有一样的效果的,此处是一个特殊点。


publicstaticvoidmain(String[] args) {
intarr[] =newint[]{12,18,20};
System.out.println("引用传递之前:"+arr[0]);
yinYongChuanDi(arr);
System.out.println("引用传递之后:"+arr[0]);
Stringstr="小红";
System.out.println("引用传递之前:"+str);
yinYongChuanDi2(str);
System.out.println("引用传递之后:"+str);
    }
publicstaticvoidyinYongChuanDi(int []arr){
arr[0] =66;
    }
publicstaticvoidyinYongChuanDi2(Stringstr){
str="小明";
    }


相关文章
|
9天前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
1月前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
56 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
19天前
|
存储 JavaScript 前端开发
基于 SpringBoot 和 Vue 开发校园点餐订餐外卖跑腿Java源码
一个非常实用的校园外卖系统,基于 SpringBoot 和 Vue 的开发。这一系统源于黑马的外卖案例项目 经过站长的进一步改进和优化,提供了更丰富的功能和更高的可用性。 这个项目的架构设计非常有趣。虽然它采用了SpringBoot和Vue的组合,但并不是一个完全分离的项目。 前端视图通过JS的方式引入了Vue和Element UI,既能利用Vue的快速开发优势,
101 13
|
24天前
|
算法 Java API
如何使用Java开发获得淘宝商品描述API接口?
本文详细介绍如何使用Java开发调用淘宝商品描述API接口,涵盖从注册淘宝开放平台账号、阅读平台规则、创建应用并申请接口权限,到安装开发工具、配置开发环境、获取访问令牌,以及具体的Java代码实现和注意事项。通过遵循这些步骤,开发者可以高效地获取商品详情、描述及图片等信息,为项目和业务增添价值。
56 10
|
18天前
|
前端开发 Java 测试技术
java日常开发中如何写出优雅的好维护的代码
代码可读性太差,实际是给团队后续开发中埋坑,优化在平时,没有那个团队会说我专门给你一个月来优化之前的代码,所以在日常开发中就要多注意可读性问题,不要写出几天之后自己都看不懂的代码。
54 2
|
27天前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
2月前
|
安全 Java 开发者
Java中WAIT和NOTIFY方法必须在同步块中调用的原因
在Java多线程编程中,`wait()`和`notify()`方法是实现线程间协作的关键。这两个方法必须在同步块或同步方法中调用,这一要求背后有着深刻的原因。本文将深入探讨为什么`wait()`和`notify()`方法必须在同步块中调用,以及这一机制如何确保线程安全和避免死锁。
46 4
|
2月前
|
Java 数据处理 数据安全/隐私保护
Java处理数据接口方法
Java处理数据接口方法
27 1
|
5月前
|
Java
java是值传递还是引用传递
本文澄清了Java中参数传递的常见误解,总结出Java采用“值传递”的方式。对于基本类型,传递其值的拷贝,方法内修改不影响原值;而对于对象类型,则传递其引用地址的拷贝,尽管是拷贝,但因指向同一对象,故方法内的修改会影响原对象状态。形参仅在方法内部有效,而实参则是调用方法时传递的具体值。通过示例和比喻(如复刻仓库钥匙),形象地解释了值传递、引用传递及Java特有的“共享对象传递”概念,帮助理解不同情况下参数传递的行为差异。
|
5月前
|
Java
java中的值传递和引用传递
【8月更文挑战第3天】在Java中,值传递用于基本数据类型,传递的是值的副本,因此方法内的修改不影响原值;而引用传递用于对象和数组,虽传递的是引用的副本,但对对象内容的修改会影响原始对象。理解这两者对于正确处理方法调用及参数至关重要。