Java方法详解
一、方法
system(类).out(对象).println();(方法)
类+对象+方法
方法包含于类或者对象中
方法是实现某个功能的语句块的集合,一个方法只实现一个功能
方法命名规则:首字母小写,驼峰原则
函数(function)是面向过程的叫法,方法(method)是面向对象的叫法
1、方法的定义
修饰符 返回值类型 方法名(参数类型 参数名){
方法体//包含具体的语句,定义该方法的功能
return 返回值
}
参数像是一个占位符,当方法被调用时,传递值给参数,这个值为实参或变量
参数列表包含参数类型、顺序、个数
参数是可选的,方法也可以不含参数
形式参数:在方法被调用时用于接收外界输入的数据
实参:调用方法时实际传给方法的数据
2、方法的调用
调用方法:对象名.方法名(实参列表)
两种调用方法:
方法一
当返回一个值的时候,方法调用通常被当作一个值:
int max=max(3,4);
方法二
如果返回值时void,方法调用一定是一条语句,可以直接用:
system.out.println("d");
扩展:值传递和引用传递
参考菜鸟教程
3、方法的重载
定义:在相同一个类中,有相同的函数名称,但形参不同的函数
规则:
方法名称必须相同
参数列表必须不同
方法的返回类型可以相同也可以不同
仅仅返回类型不同,不足以成为方法的重载
二、命令行传递参数
1、将一个基本数据类型传递到方法中,在方法内修改形参的值,然后打印形参和实参,会发现形参修改了,但是没有影响到实参,这符合值传递
将一个非基本数据类型也就是对象,传递到方法中,然后在方法内修改对象的属性,此时在打印形参和实参,会发现实参和形参都被修改了
基本数据类型和局部变量是放在栈空间里,而所有对象是存放在堆空间中
值传递就是将基本数据类型是将数据创建一个副本,传递到方法中,那形参修改也不会影响实参
[参考文章](https://blog.csdn.net/qq_45726776/article/details/119515302?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-1-119515302-blog-107713117.pc_relevant_multi_platform_whitelistv3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-1-119515302-blog-107713117.pc_relevant_multi_platform_whitelistv3&utm_relevant_index=2)
2、引用类型在堆里存放地址值,这传递的是实参的地址值赋给形参
除非方法带返回值,接收
这里只是把形参赋值10,没有返回 给a重新赋值1
change()和主方法定义的a不一样,change()的a只在这个方法里有效,等这个方法运行结束会重新变成主方法定义的值
三、可变参数
在方法声明中,在指定参数类型后加一个省略号(...)
一个方法中,只能指定一个可变参数,它必须是方法的最后一个参数,任何普通的参数必须在他之前声明
四、递归
1、定义:A方法调用A方法,就是自己调用自己。能够用有限的语句来定义对象的无限集合。把一个大问题转化为与原问题相似的小问题解决。适合数字较小的,否则会超出范围
2、递归结构
递归头:什么时候不调用自身方法。如果没有头,将陷入死循环
递归体:什么时候需要调用自身方法
静态方法与非静态方法
3、一个demo类中含有main方法,另外写一个student类,方法是静态的,则可以在主函数直接类。方法()调用:Student.say();
如果Student类是非静态的,要先实例化这个类(即创建一个对象,用对象来调用方法)
4、被static修饰的内容会跟谁类的加载而加载,所以静态化的内容可以不用实例化就调用,同时两个静态方法之间可以相互调用;一个静态一个非静态不可以直接调用
静态调用静态,非静态调用非静态,非静态调用静态都可以直接调用,静态调用非静态不可以直接调用,要先实例化
五、计算器
写一个计算器,要求实现加减乘除功能,并且能够循环接收新的数据,通过用户交互实现
思路推荐:
写四个方法
利用循环while和switch进行用户交互
传递需要操作的两个数
输出结果