前言
本文将介绍有关Java面向对象编程的知识之一:方法;其中包括方法的概念,三类方法的格式、方法的重载以及方法的内存
方法的概念
方法是程序中最小的执行单元
方法定义:将一些代码打包在一起的过程
方法调用:在定义方法以后,手动输入代码调用已定义的方法
方法的三类格式
1.简单的方法定义与调用
方法定义
public static void 方法名(){ 方法体; }
方法调用
方法名(参数)
用IDEA来实现一下
public class test1 { public static void main(String[] args) { test(); } //方法定义 public static void test(){ System.out.println(1); System.out.println(2); System.out.println(3); } }
2.带参数的方法定义与调用
首先要先介绍参数的两种形式
1.形参(形式参数):指方法定义中的参数
2.实参(实际参数):指方法调用中的参数
方法定义
public static void 方法名(参数1,参数2...){ 方法体; }
方法调用
方法名(参数1,参数2,参数3…)
用IDEA来实现一下
public class 求和 { public static void main(String[] args) { sum(10,20); } //方法调用 public static void sum(int num1 , int num2){ int result = num1 + num2; System.out.println("两个数的和是:"+ result); } }
3.带返回值的方法定义与调用
方法定义
public static 返回值类型 方法名(参数1,参数2,参数3...){ 方法体; return返回值; }
方法调用
1.直接调用
方法名(实参)
public class 求和 { public static void main(String[] args) { sum(10,20); } public static int sum(int num1 , int num2){ int result = num1 + num2; System.out.println(result); return result; } }
在使用直接调用时,要在方法定义中写上打印输出语句
直接调用方法是不使用返回值。就像上述程序中的result值为30,但是既没有在main方法中调用result,又没有在sum方法中调用result,所以控制台输出为空
2.赋值调用
整数类型 变量名 = 方法名(实参)
public class 求和 { public static void main(String[] args) { int result = sum(10,20); System.out.println(result); } public static int sum(int num1 , int num2){ int num = num1 + num2; return num; } }
赋值调用的好处是当程序复杂时,若想调用某个方法的结果,就可以直接用一个变量来代替,便于代码的编写
同样,在将方法的结果赋值给变量后,不打印输出该变量,控制台输出也为空
3.输出调用
System.out.println(方法名(实参))
public class 求和 { public static void main(String[] args) { System.out.println(sum(10,20)); } public static int sum(int num1 , int num2){ int result = num1 + num2; return result; } }
输出调用的好处是代码简洁,在main方法中只需要写一句输出语句即可,不用像上面两种一样增添新的语句
方法的重载
概念
在同一类中,方法名相同,但是参数的个数/类型/顺序不同的方法,构成重载关系
重载判断
下面会有四道关于判断两个方法是否构成重载的例题
public class MethodDemo{ public static void fn(int a){ //方法体 } public static void fn(int a){ //方法体 } }
这两个不构成重载,因为方法名相同,参数也相同
public class MethodDemo{ public static void fn(int a){ //方法体 } public static void fn(int a , int b){ //方法体 } }
这两个构成重载,因为在同一类中且方法名相同的情况下,参数个数不同
public class MethodDemo1{ public static void fn(int a){ //方法体 } } public class MethodDemo2{ public static void fn(int a){ //方法体 } }
这两个不构成重载,因为不在同一类中
public class MethodDemo{ public static void fn(int a){ //方法体 } public static void fn(double a ){ //方法体 } }
这两个构成重载,因为在同一类中且方法名相同的情况下,参数类型不同
方法的内存
1.方法调用的基本内存原理
方法运行时使用的内存是栈,原理是先进后出,运行完就出栈;新定义出来的,带“new”的都在堆内存中开辟了一个小空间
2.方法传递基本数据类型的内存原理
变量中存储的是地址值,引用了其他空间中数据
3.方法传递引用数据类型的内存原理
在传递基本数据类型时,传递的是真实数据的值,形参的改变并不影响实参的值
public class test2 { public static void main(String[] args) { int number = 100; System.out.println("调用前的值:" + number); change(number); System.out.println("调用后的值:" + number); } public static void change(int number) { number = 200; } }
在change方法中改变的number值由于没有返回值也没有输出语句,所以调用前后的值相同,如果我们将代码的方法定义改为 带返回值类型 的方法定义时,就可以实现数据传递了
public class test2 { public static void main(String[] args) { int number = 100; System.out.println("调用前的值:" + number); System.out.println("调用后的值:" + change(number)); } public static int change(int number) { number = 200; return number; } }
方法的注意点
1.如果定义了一个方法后却不调用,那么该方法就不会执行
2.方法之间是平级关系,不可嵌套,所以在定义方法的时候不能写在main方法中,否则会报错
3.方法的编写顺序和执行顺序无关
4.若方法返回值类型为void,则该方法无返回值,可以省略return语句,但如果要写,则return后不能加具体数据,否则会报错
结语
方法是Java中重要的知识点,特别是方法的内存以及重载是面试时容易被问到的,所以掌握基础知识点很重要,练习也必不可少,具体练习在《每章练习》专栏中,感兴趣的可以做一下文章中相关习题以巩固知识。