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="小明";
    }


相关文章
|
1天前
|
缓存 监控 Java
如何运用JAVA开发API接口?
本文详细介绍了如何使用Java开发API接口,涵盖创建、实现、测试和部署接口的关键步骤。同时,讨论了接口的安全性设计和设计原则,帮助开发者构建高效、安全、易于维护的API接口。
14 4
|
1天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
19 4
|
5天前
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
10 2
|
6天前
|
SQL Java 程序员
倍增 Java 程序员的开发效率
应用计算困境:Java 作为主流开发语言,在数据处理方面存在复杂度高的问题,而 SQL 虽然简洁但受限于数据库架构。SPL(Structured Process Language)是一种纯 Java 开发的数据处理语言,结合了 Java 的架构灵活性和 SQL 的简洁性。SPL 提供简洁的语法、完善的计算能力、高效的 IDE、大数据支持、与 Java 应用无缝集成以及开放性和热切换特性,能够大幅提升开发效率和性能。
|
7天前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
20 2
|
7天前
|
监控 Java 数据库连接
在Java开发中,数据库连接管理是关键问题之一
在Java开发中,数据库连接管理是关键问题之一。本文介绍了连接池技术如何通过预创建和管理数据库连接,提高数据库操作的性能和稳定性,减少资源消耗,并简化连接管理。通过示例代码展示了HikariCP连接池的实际应用。
13 1
|
1天前
|
Java API Android开发
kotlin和java开发优缺点
kotlin和java开发优缺点
WK
|
6天前
|
开发框架 移动开发 Java
C++和Java哪个更适合开发移动应用
本文对比了C++和Java在移动应用开发中的优劣,从市场需求、学习难度、开发效率、跨平台性和应用领域等方面进行了详细分析。Java在Android开发中占据优势,而C++则适合对性能要求较高的场景。选择应根据具体需求和个人偏好综合考虑。
WK
16 0
|
Java 开发工具 git
Java开发初级6.24.3
5.在Git使用过程中,进行Git配置的操作命令是哪个() A. config B. config -g C. config -a D. git config 相关知识点: 在git中,经常使用git config 命令用来配置git的配置文件,git配置级别主要有:仓库级别 local 【优先级最高】、用户级别 global【优先级次之】、系统级别 system【优先级最低】 正确答案:D 10.RDBMS是什么? A. Rela Database Management Systems B. Relational Database Management Systems C. Relation
133 0
|
SQL 前端开发 JavaScript
Java开发初级6.24.2
3.Java网站src/main/java目录保存的是什么资源? A. Java源代码文件 B. 测试代码 C. JavaScript、CSS等文件 D. 图片资源 正确答案:A 4.什么是索引Index? A. SQL数据库里的表管理工具 B. SQL数据库里的查询工具 C. SQL数据库里的目录工具 D. SQL数据库用来加速数据查询的特殊的数据结构 正确答案:D
141 0