通过学习本篇文章可以掌握如下知识
1、方法的定义
2、方法在计算机中的执行流程。
3、方法使用时常见问题
4、Java中方法的参数传递机制
5、方法重载
方法是一种语法结构,它可以把一段代码实现的某种功能封装起来,以便重复利用。
方法的完整格式定义如下:
修饰符 返回值 方法名(形参列表) { 方法体; return 返回值; }
需求:加入现在有很多成需要需要进行两个整数的求和操作。代码显示:
// 掌握定义方法的完整定义
public class Method_02 {
public static void main(String[] args) {
int sum = sum(3, 4);
System.out.println(sum);
}
// !!!注意与上文中方法的完整格式做对比。
public static int sum(int a, int b) {
return a+b;
}
}
为什么举如此简单的例子,现在在回想一遍我们的场景,其他程序员就可以复用这个求和操作了。重在重复利用。
到现在应该对方法有所了解了吧(*^_^*)。Java中的方法,在CPP或者C中称为函数,其实是一个东西罢了。接下来我们将继续深入学习"方法"。
方法定义时:需要按照方法解决实际业务需求,需要考虑:
1、方法名是否规范易懂
2、方法是否需要接收参数
3、方法是否需要返回数据
public class Method_02 {
public static void main(String[] args) {
printHelloWorld();
}
// 1、无参数无返回值 --- 打印三行helloWorld
public static void printHelloWorld() {
for (int i = 0; i < 3; i++) {
System.out.println("helloWorld");
}
}
}
// 2、有参数无返回值
// 3、无参数有返回值
// 4、有参数有返回值
// 由于比较简单,在此就举一个例子,其他的举一反三即可。
方法在类中的位置放在前或者后时无所谓的,但一个方法不能定义在另一个方法里面
方法声明void无返回值时,方法内部不能使用return;
return语句下面不能编写代码
由于上述问题比较简单就不再据例子了,如果需要举例在评论区评论即可。
求1-n的和
可以将其想象成一个梯形,(上底+下底)*高/2;
这里一般很考验编程和数学能力,只能慢慢积累了。或者可以使用for函数累加也可以的。
注意:要声明好,函数名,入参和返回值。
public class Method_02 {
public static void main(String[] args) {
int res = sum1_N(100);
System.out.println(res);// 5050
}
public static int sum1_N(int n) {
return (1+n)*(n)/2;
}
}
判断一个数是否是偶数还是奇数
public class Method_02 {
public static void main(String[] args) {
boolean res = isOdd(100);
System.out.println(res);
}
public static boolean isOdd(int n) {
return n % 2 != 0;
}
}
以上举得例子都比较简单,重点是帮助了解方法的定义和使用,不在于考验编程能力。
首先要牢记一点:方法被调用的时候,是进入到栈内存中运行的。
例子如下:一个很简单的求和方法在main方法中被调用。
添加图片注释,不超过 140 字(可选)
【第一步】方法区加载MethodDemo的class文件
添加图片注释,不超过 140 字(可选)
【第二步】将main方法加入到栈内存然后执行main方法中的内容,这里先执行的是第一句代码
添加图片注释,不超过 140 字(可选)
【第三步】发现要调用sum方法,然后栈内存加载sum方法,随后就执行sum方法中的内容
添加图片注释,不超过 140 字(可选)
【第四步】sum中的方法执行完毕之后,sum方法从栈中弹出,将返回值赋值给re变量。
添加图片注释,不超过 140 字(可选)
【第五步】输出re变量值:30,至此全部执行完毕,虽然这个例子很简单,但是麻雀虽小五脏俱全,一个简单的方法调用内部却蕴含了全部的道理,应用到复杂的方法调用,例如递归,完全够用。
public class Method_02 {
public static void main(String[] args) {
int a = 10;
change(a);
System.out.println(a); // 10
}
private static void change(int a) {
System.out.println("BeforeChange:" + a); // 10
a = 20;
System.out.println(a); // 20
}
}
所谓的值传递:指的是在传输实参给方法的形参时,传输的时实参变量中存储值的副本。
注意这里用的措辞时副本,即修改副本不会影响原参数的数值。
可以按照之前的分析
在change方法执行完毕后,将要从栈内存中弹出,然后再执行 System.out.println(a); 时 返回为10。
public class Method_02 {
public static void main(String[] args) {
int[] arrs = {10,20,30};
change(arrs);
System.out.println(arrs[1]); // 60
}
private static void change(int[] a) {
System.out.println("BeforeChange:" + a[1]); // 20
a[1] = 60;
System.out.println(a[1]); // 60
}
}
在执行修改前,堆内存中的值为10,20,30;执行arrs[1] = 222后变为:
因此输入arrs[1] 时候就为222了,注意引用类型和直接类型的区别,可以减少你以后写代码的错误。
一个类中,出现多个方法的名称相同,但是他们的形参列表时不同的,那么这些方法称为方法重载。
要点:
1、方法名称相同,形参列表不同。
2、形参列表不同指的是,形参个数、类型、顺序不同,不关心形参名称。
public class Method_02 {
public static void main(String[] args) {
}
public static void test(){
}
public static void test(int a) {
}
void test(double a) {
}
void test(double a ,int b){
}
void test(int a ,double b){
}
}
如果这篇文章对你有帮助,点个赞吧,有疑问的地方直接评论就可以了。
擅长领域:IRS通信仿真、Java和算法等,欢迎讨论哦