1.什么是方法
定义:程序中最小的执行单元
作用:1.提高代码的复用性 2.提高代码的可维护性
2.方法的格式
方法定义:把一些代码打包在一起
方法调用:方法定义后并不是直接运行的,需要手动调用才能执行
2.1 最简单的方法
定义格式:
public static void 方法名(){
方法体(就是打包起来的代码);
}
范例:
public static void playGame(){
打印语句;
}
调用格式:
方法名();
范例:
playGame();
练习1:
public class fangFa {
public static void main(String[] args) {
playGame();
playGame();
}
public static void playGame(){
System.out.println("选人物");
System.out.println("对线");
System.out.println("赢/输");
}
}
练习2:展示女朋友的信息
public class girlFriend {
public static void main(String[] args){
printInfo();
}
public static void printInfo(){
System.out.println("xcm");
System.out.println("18");
System.out.println("intelligent");
}
}
练习3:看代码说结果
public class demo3 {
public static void main(String[] args){
System.out.println("a");
method1();
System.out.println("b");
}
public static void method1(){
method2();
System.out.println("c");
}
public static void method2(){
System.out.println("d");
System.out.println("e");
}
}
输出:a d e c b
练习4:定义一个方法,在方法内部定义两个变量
public class demo4 {
public static void main(String[] args){
sum();
}
public static void sum(){
int num1=10;
int num2=20;
int result=num1+num2;
System.out.println(result);
}
}
2.2 带参数的方法
定义格式:
public static void 方法名(参数1,参数2,... ...)
{... ...}
范例:
public static void getSum(int number1,int number2,... ...)
{... ...}
调用格式:
方法名(参数1,参数2,... ...);
范例:
getSum(num1,num2... ...);
形参:形式参数,方法定义中的参数
实参:实际参数,方法调用中的参数
🐖:方法调用时,形参与实参必须一一对应,否则程序将报错
练习1:定义一个方法,求长方形的周长,将结果在方法中打印
public class demo5 {
public static void main(String[] args){
getLength(5.2,1.3);
}
public static void getLength(double len,double width){
double res=(len+width)*2;
System.out.println(res);
}
}
练习2:定义一个方法,求圆的面积,将结果在方法中打印
public class demo6 {
public static void main(String[] args){
area(2);
}
public static void area(double radius){
double res=radius*radius*3.14;
System.out.println(res);
}
}
2.3 带返回值的方法
为什么要有带返回值的方法呢 ?
如果在调用出要根据方法的结果,去编写另外一段代码逻辑,为了在调用出拿到方法产生的结果,就需要定义带有返回值的方法
格式:
public static 返回值类型 方法名(参数){
方法体;
return 返回值;
}
范例:
public static int sum(int a,int b){
int res=a+b;
return res;
}
调用方式:
①直接调用:
方法名(实参);
②赋值调用:
整数类型 变量名=方法名(实参);
③输出调用:
System.out.println(方法名(实参));
练习1:定义一个方法,求一家商场每个季度的营业额,根据方法结果计算出全年的营业额
public class demo7 {
public static void main(String[] args){
int sum1=getSum(10,20,30);
int sum2=getSum(15,20,30);
int sum3=getSum(15,20,30);
int sum4=getSum(20,20,30);
int sum=sum1+sum2+sum3+sum4;
System.out.println(sum1);
System.out.println(sum2);
System.out.println(sum3);
System.out.println(sum4);
System.out.println(sum);
}
public static int getSum(int num1,int num2,int num3){
int res=num1+num2+num3;
return res;
}
}
练习2:定义方法,比较两个长方形的面积
public class demo8 {
public static void main(String[] args){
int area1=getArea(5,4);
int area2=getArea(6,3);
if(area1>area2){
System.out.println("第一个长方形更大");
}else{
System.out.println("第二个长方形更大");
}
}
public static int getArea(int len,int width){
int area=len*width;
return area;
}
}
3.方法的重载
在同一个类中,定义了多个同名的方法,这些同名的方法具有相同的功能,每个方法具有不同的参数类型或参数个数,这些同名的方法,旧构成了重载关系
也就是说,在同一个类中,方法名相同,参数不同的方法,就是重载,与返回值无关
练习1:区分一下方法是否构成重载关系
public static void fn(int a){
}
public static int fn(int a){
}
不构成,两个方法参数相同
public static float fn(int a){
}
public static int fn(int a,int b){
}
构成
public class demo9 {
public static void fn(int a){
}
}
public class demo10 {
public static int fn(double a){
}
}
不构成,两个方法分别在两个类里面
public class demo9 {
public static void fn(int a){
}
public static int fn(double a){
}
}
构成
public class demo9 {
public static void fn(int a,double b){
}
public static int fn(double a,int b){
}
}
构成
练习2:使用方法重载的思想,设计比较两个整数是否相同的方法
public class demo9 {
public static void main(String[] args){
compare(10,20);
}
public static void compare(byte b1,byte b2){
System.out.println(b1==b2);
}
public static void compare(short s1,short s2){
System.out.println(s1==s2);
}
public static void compare(int i1,int i2){
System.out.println(i1==i2);
}
public static void compare(long l1,long l2){
System.out.println(l1==l2);
}
}
4.方法的内存
4.1 方法调用的基本内存原理
public class demo10 {
public static void main(String[] args){
eat();
}
public static void eat(){
study();
System.out.println("吃饭");
sleep();
}
public static void sleep(){
System.out.println("睡觉");
}
public static void study(){
System.out.println("学习");
}
}
栈内存:先进后出
study方法执行完毕,出栈,回到调用study方法的地方
继续执行eat方法
sleep方法进栈
sleep方法执行完毕,出栈
eat方法执行完毕,出栈
mani方法执行完毕,出栈
4.2 方法传递基本数据类型的内存原理
数据值存储在自己的空间中
4.3 方法传递引用数据类型的内存原理
引用数据类型:new出来的,如:数组
数据值存储在其他空间中
自己空间中存储的是地址值
5.方法的值传递
public class demo11 {
public static void main(String[] args){
int number=100;
System.out.println("调用change方法前:"+number);
change(number);
System.out.println("调用change方法后:"+number);
}
public static void change(int number){
number=200;
}
}
输出:
调用change方法前:100
调用change方法后:100
在change 方法中,把200赋值给了change方法中的number,不会影响main方法中的number
🐖:传递基本数据类型时,传递的是真实的数据,形参的改变,不影响实际参数的值
要想改变 number的值,需要在change方法中返回number的值,并将这个值赋值给number
public class demo11 {
public static void main(String[] args){
int number=100;
System.out.println("调用change方法前:"+number);
number=change(number);
System.out.println("调用change方法后:"+number);
}
public static int change(int number){
number=200;
return number;
}
}
输出:
调用change方法前:100
调用change方法后:200
public class demo11 {
public static void main(String[] args){
int[] arr={10,20,30};
System.out.println("调用change方法前:"+arr[1]);
change(arr);
System.out.println("调用change方法后:"+arr[1]);
}
public static void change(int[] arr){
arr[1]=200;
}
}
🐖:传递引用数据类型时,传递的是是地址值,形参的改变,影响实际参数的值