方法
方法是语句的结合,它们在一起解决某一个问题。方法不能够脱离类而单独存在,也就是类的外部不能够创建方法,通常情况下方法是在其他方法中调用的。
方法的创建
方法的创建有几个重要的因素要注意:
- 方法只能创建在类中
- 方法的名称
- 方法的形参
- 方法的返回值类型
- 方法的修饰符
public static 方法返回值类型 方法名称(形参){
方法体:方法指令
return 返回值;
}
首先第一点,方法只能在类中创建,这是定义,死规矩,无需解释;
其次方法的名称,需要注意的是方法的名称不要与其他方法相同,否则调用的时候程序将不知道调用的是哪一个方法,会报错(重载的情况除外);
第三点方法的形参,顾名思义就是形式参数,形式参数没有任何意义,但是要和实参的类型、个数相同。形参就是在创建方法时括号内的参数,而实参则是调用方法时括号内的参数,二者要一一对应(参数类型、参数个数、参数位置)
public class exception {
public static void main(String[] args) {
my(23);//调用my方法,23就是实参
}
//a就是形参,其的类型为 int,和实参的类型相同
public static void my(int a){
System.out.println(a);
return;
}
}
第四,返回值类型。方法中的变量属于局部变量(作用域在方法中),出了方法则无法被使用,那当需要方法中的计算结果时怎么办呢?这个时候就需要返回值,返回值能够返回一个值到调用位置,但是当需要返回一个值的时候,假设需要返回的 x,就要在方法创建时定义一个和 x 类型相同的方法;如果无需返回值,那么方法类型就为 void;
return 关键字是用来结束方法,返回值的,当方法的返回值类型定义为 int 时,就要 return 一个 int 类型的结果,否则就会报错;不论是在方法的何处,只要 return 语句一执行,则方法就会立刻结束,不会再往下执行;
注:当返回值类型为 void 时,return 可以省略;
方法的作用
其实直接在main方法中写出代码也可以完成,但是这样的main方法会变的臃肿无比,并且不好后期维护。所以要使用方法来书写代码逻辑,这样不仅仅代码美观、后期维护方便,还增强了代码复用性;
代码复用性:代码复用性是指代码的重复利用,本处使用了方法,别处也能够使用;
除此之外,方法还能够根据参数的不同得出逻辑相同的结果;
方法执行过程分析
内存、栈、栈帧的关系
以此代码为例讲解方法执行过程:
public class exception {
public static void main(String[] args) {
fac(23);
System.out.println(36);
}
public static void fac(int a){
System.out.println(a);
return;
}
}
代码首先执行main方法,main方法入栈
从上到下执行代码,执行到调用 fac() 方法,进入到 fac() 的方法逻辑中,同时 fac() 入栈
重要:fac() 方法·执行完毕,返回到main方法中调用处位置,准备继续往下执行,同时 fac() 出栈,其中打印我没有写入栈,本来是应该入栈的
后续代码继续执行,等到main方法也执行完毕,main方法的栈帧也出栈,整个Java程序就执行完毕了
方法的重载
方法的重载是指一个类中可以定义有相同名字而参数不同的多个方法;
书写代码时,一个方法的名称往往需要能够让其表达出这个方法的功能,比如说这个代码要实现的功能是多数相加,那么通常方法名为 add;
public static int add(int x, int y) {
return x + y;
}
这是整数的相加,那么如果我想要两个 浮点数相加怎么书写方法呢?
public static double add(double x, double y) {
return x + y;
}
可以发现,二者的方法名称是相同,那么将这两段代码放到同一个类中会报错吗?
答案是不会的,因为这是发生了重载;
当两段或者多段代码的方法名称相同,参数类型不相同时,就发生了重载。
那么为什么不会报错呢?
因为程序能够识别实参的类型,而形参要求和实参的类型相同,所以程序能够通过实参的类型找到对应的方法代码。
思考:
当这段代码和上面第二段代码出现在同一个类中时会不会报错?为什么?
(文章最后给出答案)
public static double add(double x, double y, double z) {
return x + y + z;
}
数组
数组是编程中最重要的数据结构之一,它的作用是存储一组类型相同的变量
数组相关知识请见:https://blog.csdn.net/qq_43780610/article/details/113947740