方法
[toc]
方法是什么
方法是一种语法结构,它可以把一段代码封装成一个功能,以方便重复调用。
提高了代码的复用性。
让程序的逻辑更清楚。
减少了工作量,避免了重复工作。方法的作用
方法的定义和调用
- 方法的完整定义形式、调用
<img src="C:\Users\WD\AppData\Roaming\Typora\typora-user-images\image-20211130202947343.png" alt="image-20211130202947343" style="zoom:80%;" />
形式参数不能定义初始值
形参可以有多个,也可以没有。中间需要用 “ , ”隔开。
形参不能给初始值
调用:方法名 + (...)
- 方法的其他定义形式、调用
void 无返回值。 内部不需要return 返回值。
根据要求选择合适的 形参类型 和 返回值类型
相对与C语言来说Java中调用方法方便在不需要提前申明,可以即调即用。
因为变量的寿命问题,就是方法中的便量可以随意的定义,不需要在意在主函数中是否已经出现。
类似于此的还有 for循环中的定义的变量,只要不是在主函数中出现过的,可以出现在多个循环中那个。
方法的编写顺序无所谓
方法与方法之间是平级关系,不能嵌套定义。
方法的返回值类型为void(无返回值),方法内则不能使用return返回数据,如果方法的返回值类型写出了具体类型,方法内部必须使用return返回对应类型的数据。
return语句下面,不能编写代码,因为永远执行不到,属于无效的代码。
方法不调用就不执行,调用时必须严格匹配方法的参数情况。
有返回值的方法调用时可以选择定义变量接受结果,或者直接输出调用,甚至直接调用;无返回值方法的调用只能直接调用。
方法使用的常见问题
<img src="C:\Users\WD\AppData\Roaming\Typora\typora-user-images\image-20211130205205552.png" alt="image-20211130205205552" style="zoom:80%;" />
return 编写顺序 不能嵌套 返回值多种用法 有返回值类型必须返回相应类型的数据
着重注意返回值类型和返回值类型。
一个方法中可以存在多个return 返回不同数值的情况。
调用时必须严格匹配方法的参数情况。 数据类型 数据个数
调用 : (有返回值)
定义变量接收
直接输出 (可以直接使用)
直接调用 (调用这个方法,执行这个方法,但是不用返回值!)
调用 : (无返回值)
- 直接调用
对于调用的函数形参是一个数组时,传递的是数组的位置。而且方法中对数组的改变会改变原数组。
方法调用的内存图
方法在没有被调用的时候,在方法区中的字节码文件中存放。
方法在被调用的时候,进入到栈内存中运行。
方法的参数传递机制
基本参数类型
参数传递的机制:值传递 //适用于所有参数传递
在传输实参给方法的形参时,并不是传输实参变量本身,
而是传递实参变量中存储的值,这就是值传递。
注意:
实参:在方法内部定义的变量。
形参:在定义方法时,“()”中声名的参数。
引用参数类型
最典型的就是数组的传递,
传递的是数组的地址,可以改变其中的元素。
可变参数
格式: public static void hhh(int ... age){}
对于可变参数的方法,可变参数可以是 0 也可以是多个。
而且可变参数必须要位于参数列表的末尾。
(因为无法判断到什么地方截至)
可变参数的实质就是数组,输入的可变参数的类型要相同。
一个参数列表只能有一个可变参数。
(原因类似,没法判断截至条件)
方法的重载
在同一类中,多个名称相同的方法,但参数不同。这样的方法就是重载方法。
方法的名字并非是区分出方法的一定条件。参数也是区分方法的主要因素。
在调用时通过方法来区分所带哦用的方法。
public class 重载 {
public static void main(String[] args) {
String a ="miguo";
int b = 9;
fire();
fire(a);
fire(a,b);
}
public static void fire(){
System.out.println("轰炸小日本");
}
public static void fire(String a){
System.out.println("轰炸" + a);
}
public static void fire(String a,int v){
System.out.println("向" + a + "发射" + v + "枚核弹");
}
}
<img src="image-20211203091447304.png" alt="image-20211203091447304" style="zoom:80%;" />
不需要为其定义一个变量,在方法调用中可以直接输入相对应的数据类型
可以直接省略前面的字符串,以及数值的定义。
方法重载减少了方法的记忆量,一切都是为了更简单。
方法重载可以再攻在过程中再调用其他的方法,简化代码。
-
public static void fire(){ fire("小日本"); } public static void fire(String a){ System.out.println("轰炸" + a); } public static void fire(){ System.out.println("轰炸小日本"); } public static void fire(String a){ System.out.println("轰炸" + a); }
这两种方法效果相同,上面相比于下面更简练。
形参列表的不同是:**顺序,类型,个数**不关心形参名称
Java区分大小写,名称注意大小写问题。
单独使用return关键字
立即跳出并结束方法的执行,在任何方法中return都可以单独使用。
break ;结束当前循环,并跳出循环。
continue;结束此次循环
都是在循环中使用。
return ; 结束当前方法。
是在方法中使用。
思考
怎么样才能做到向一个数组输入进几个值在没有到达数组长的时候结束。
if(sc.nextInt() == '\0')
break;
并不能达到预期的效果
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String[] nums=null;
System.out.println("请输入一组整数,以空格分隔:");
nums=sc.nextLine().split(" ");
int num[]=new int[nums.length];
int sum=0;
for(int i=0;i<num.length;i++){
num[i]=Integer.valueOf(nums[i]);
sum+=num[i];
}
System.out.println(sum);
}
解决方法,学习一下nestLine()的使用。
搞明白hasNextint的用法。